Bootstrap

【笔记】记得复习!!!三天速成redis学习笔记

字符串string

set 键名 键值
设置

get 键名
获取键值

del 键名
删除键值

exists 键名
某个键名是否存在

keys *
查看数据库中都有哪些键
keys *me
表示查找所有以me结尾的键

flushall
删除数据库中所有的键

redis-cli --raw(exit退出原本的命令行)
可以设置和输出中文

ttl 键名
查看键还有多久过期
返回-1则为没有设置 -2则已经过期

setex 键名 过期时间 键值
设置键名的过期时间

setnx 键名
键名不存在时可以直接设置键和键值

列表list

lpush 队列名称 值
头添加 返回添加后队列里有多少个
rpush 队列名称 值
尾添加

lrange 队列名称 开始个数(从0开始) 结束格式(-1为全部 最后一个)
lrange 获取类列表数值

rpop 删除列表尾部第一个元素 (会返回列表被删除的元素)
可以删除多个
rpop 队列名 数字
代表删除尾部 从左到右的两个元素

llen 队列名
查看列表中的元素个数

ltrim 队列名 序列1 序列2 (从0开始)
删除队列中指定范围以外的元素


SET 集合 命令都以s开头
列表的元素可重复
set中的元素不可重复 且无序
set的集合名词不能和list中的键撞了

sadd 集合名称(键) 元素(集合的值 也是键)
返回1 添加成功 返回0 添加失败

smembers 集合名称
查看集合内容

sismember 集合名称 元素
判断元素是否在集合中

srem 集合名称 元素
删除此元素


有序集合
有序集合元素唯一 分数可重复

添加元素 可添加多个
zadd 集合名称 分数1 元素名1 分数2 元素名2

查看 要查看分数带上后面的单词
zrange 集合名称 0 -1 [withscores] 

查看某一元素的分数
zscore 集合名称 元素名

查看某一元素排名 排名是根据分数大小排的 默认为从小到大
zrank 集合名称 元素名

查看某元素分数并且让分数从大到小排序
zrevrank 集合名称 元素名


哈希hash 这里的哈希键值类似一个队列名/组合名/数组名
命令都以h开头
插入
hset 哈希键值 哈希键值属性 哈希键值属性值

获取哈希键值属性
hget 哈希键值 哈希键值属性

获取所有的哈希键值属性
hgetall 哈希键值

删除哈希键值属性
hdel 哈希键值 哈希键值属性

查看哈希键值是否存在 1则存在
hexists 哈希键值 哈希键值属性

获取哈希键值的所有属性
hkeys 哈希键值

获取哈希键值的长度
hlen 哈希键值


发布订阅
publish 将消息发送到指定频道(终端1)
publish 频道名称 消息内容

subscribe 订阅频道 使得其收到频道发送的消息(终端2)
subscribe 频道名称
可以有多个订阅
一个publish发送 所有的subscribe都能收到消息


消息队列stream
命令都以x开头
解决了发布订阅中的不能重复读取和无法记录历史消息的问题
以下没有特殊标注要输入的就是数字

添加
xadd 消息队列名 * 消息队列属性 消息队列属性值
返回的就是id 值
*表示自动生成一个id值 自动生成的ip值为递增 
手动生成时要新开一个消息队列名 把*替换为“整数(时间戳)-整数(序列号)”要手动保持递增

查看steam消息中的数量
xlen 消息队列名

查看steam消息中全部的详细内容
xrange 消息队列名 - +
- +代表输出全部详细信息

删除steam中的消息
xdel 消息队列名 id号
返回1 则删除成功

删除steam中所有消息
xtrim 消息队列名 maxlen 0
返回删了多少条消息

读取消息队列中的消息
xread count 2(一次读取两条消息从id号小到大) block 1000(如果没有这个id号的消息就阻塞/卡住1000ms=1s)streams 消息队列名 0(0从第一条开始读取 1表示从第二条消息开始读取 $获取从现在开始到以后的新消息 有新消息添加就会自动获取 新消息要在堵塞时间结束前发送过来 否则什么都不返回)
xread count 一次性读取多少条消息 block 如果没有消息堵塞多少毫秒 streams 消息队列名 从第几条消息开始读取

创建消费者组(消息队列名称要已经有(存在)的 不存在会报错)
xgroup create 消息队列名称 消费者组的名称 id

查看消费者组的消息
xinfo groups 消息队列名称 

添加消费者
xgroup createconsumer 消息队列名称 消费者组的名称 消费者的名称
返回1则表示成功将消费者添加进消费者组里面

读取消费者的消息
xreadgroup group 组的名称 消费者的名称 count 2(一次读取两条消息) block 3000(如果3s之内没有消息就卡住3s并返回空) streams 消息队列名称 >(>表示从这个消息中读取最新的消息)


地理空间
命令都以geo开头

添加城市的经纬度
geoadd city(地理位置信息名城市/国家country/镇town)经度 纬度 城市的名字

获取城市的经纬度
geopos city 城市名
返回结果第一个是经度 第二个是纬度

计算两个城市之间的距离 后面的km选项代表以单位km返回结果
geodist city 城市1 城市2 [KM]

以成员或指定的经纬度为中心搜索城市
geosearch city frommember 要搜索的城市 byradius 多少距离以内 KM


hyperloglog 使用随机算法来计算基数  占用内存小 
适用于对精确度要求不高 数据量大的统计工作
基数:集合中每个元素都是唯一且不重复 这个集合的基数就是集合中元素的个数
命令都以pf开头

添加元素
pfadd 属性名 属性值1 属性值2..
返回1代表添加成功

查看基数
pfcount 属性名
返回的是基数个数

合并属性们
pfmerge 合并之后的名称 要合并的属性1 要合并的属性2

位图
记录是否点赞 收藏 签到
所有命令以bit结尾
offset(偏移量)0 1 2 3 4 5 6 7 
键名的值             1 1 1 1 0 0 0 0

setbit dianzan(位图名) 0 1
setbit dianzan 1 0
设置某个偏移量(在这里指 dianzan(键名))的值 长度为2的位图
第一个为偏移量的位置
set 键值 偏移量的位置(offset) 要设置可用于查找的数(键名的值)

getbit dianzan 0
返回1
getbit获取某偏移量的值
getbit 键名 可用于查找的数(键名的值)

set dianzan "\xf0"
用set设置 一次性设置多个 这里的十六进制“\xf0”表示二进制中的1111000
set 键名 “\x十六进制”
这里的十六进制表示要设置 键值的值 \xf0 则设置为11110000(二进制)

getbit dianzan 0
getbit dianzan 1
getbit dianzan 2
获取键名每一位的值

bitcount 键名
统计一个键中有多少个bit(位)是1

bitpos 键名 0/1
获取键中第一个出现0/1的位置
返回多少表示第一个出现的0/1是多少


位域
将小的整数存储在较大的位域中
比如说 记录玩家在游戏中的一些关键信息

设置等级
bitfield 键名 set u8 #0 等级
u8 表示u8类型的整数 一个8位无符号整数 表示玩家等级
#0 表示第一个位置
等级 表示初始等级是1
返回0代表设置成功

获取内存中的情况
get 键名
返回十六进制

获取键名的等级
bitfield 键名 get u8 #0

设置金钱
bitfield 键名 set u32 #1 金钱的数量
#1 表示第二个位置
u32 表示一个无符号的32位整数来表示

获取内存中的情况
get 键名
返回十六进制

获取键名的金钱
bitfield 键名 get u32 #1 
 
增加100金钱
bitfield 键名 incrby u32 #1 100


事务

在执行exec命令前所有命令都会被放到一个队列中缓存起来
在开始exec命令后 一个命令执行失败 其他命令依然会被执行
事务执行过程中 其他客户端的命令请求不会插队

multi
开启一个事务
有(TX)表示进入事务模式 

set key1 value1 
返回queued 表示命令已经被放入了队列之中

exec
执行事务 

get key1(键名)
去其他客户端获取 key1 获取成功

incr 键名
数字自增

get key1 (键名)
去其他客户端再获取key1
key1依旧原样 其他的key值为数值的自增


持久化

两种方式
rdb 指定时间内将内存中的数据快照写入磁盘 更适合做备份
可以通过配置文件redis.conf中的save 时间秒数 修改次数
可以手动 在命令行中输入save 退出redis
在redis安装目录看见生成的快照文件dump.rdb文件 

bgsave会单独创建一个子进程将内存中数据写入到硬盘中 这样主进程就可以继续处理请求了
aof 追加文件 执行命令时不仅将命令写入到内存还会写在内存中追加的文件中
redis重启 重新执行aof文件中的命令重建整个数据库的内容
开启aof的方式 redis.conf文件中的appengdonly yes 即可


主从复制
主节点为默认 不需要修改任何配置
命令行slaveof 直接指定主节点ip和端口
查看当前节点角色:role
配置所属主节点replicaof host port
以下操作都在linux中的centos7中进行
主节点和从节点并不能同时启动

把redis配置文件复制到根目录 作为主节点的配置文件
进入redis的安装目录(/usr/local/src/redis-6.2.6)
cp redis.conf ~

在根目录在复制一份redis配置文件的6380端口版本作为从节点的配置文件
cp redis.conf redis-6380.conf

code redis-6380.conf 用编辑软件打开这个配置文件
把端口号改成6380
把pidfile配置项也改成6380
pidfile /var/run/redis_6380.pid
把dbfilename后面加上端口号(持久化文件)
dbfilename dump-6380.rdb
replicaof指定主节点
改成replicaof 127.0.0.1(改为自己的虚拟机ip) 6379
表示现在配置的这个节点是6379这个库的从节点

使用新端口打开从节点
redis-server redis-6380.conf或者redis-cli -p 6380
 从节点启动成功
使用redis-cli -p 6380 进入从节点端口
可以使用info replication查看信息
role为slave 则表示从节点 

启动命令
启动6379端口的redis
redis-cli -p 6379
启动6380端口的redis
redis-cli -p 6380

哨兵模式
主节点宕机 还是需要手动将从节点提升为主节点 
哨兵模式 实现自动的故障转移
以一个独立进程的模式运行在redis集群中监控各个节点

监控 不断发送命令来检查redis节点是否正常
检查 若某个节点出现了问题 哨兵就会通过发布订阅模式来通知其他节点
自动故障转移 主节点不能正常工作时 将一个从节点自动升级为新的主节点

哨兵自己也是一个进程 生产时一般会使用三个哨兵来保证高可用

;