Redis学习笔记
目录
启动
redis-sever.exe
redis-cli
redis-cli --raw
----ctrl+c 停止
图形化工具
redisinsight
String
SET name kwq // 键值对
GET name // 键 区分大小写
DEL name // 删除
EXISTS name // 是否存在
KEYS * // 查找键
FLUSHALL // 删除所有键
EXPIRE name 10 // 设置过期时间为10秒的键 name
SETEX name 10 kwq // 设置过期时间为10秒的键值对 name : kwq
SETNX name // 当键不存在是设置,存在则不变
TTL namew // 过期时间查看
List
LPUSH letter a // 在列表letter 头部 加入a,也可以添加多个元素,如 b c d
RPUSH letter a // 在列表letter 尾部 加入a
LPOP letter // 删除并返回头元素,在后面加上数字,如LPOP letter 2,表示删除前2个
RPOP letter // 删除并返回尾元素,在后面加上数字,如RPOP letter 2,表示删除后2个
LRANGE letter 0 -1 // 获取列表中第0个到最后一个元素,即所有元素
LLEN letter // 获取长度
LTRIN letter 1 3 // 删除(TRIN修剪) 指定范围1~3 外的全部元素
SET
SADD course Redis // 在set course 中加入 Redis,set中元素 不能重复
SMEMBERS course // 查看集合中元素
SISMEMBER Redis // 判断是否存在元素Redis
SREM course Redis // 删除 course集合 中的 Redis元素
//运算,交集并集等等
SINTER
SUNION
SDIFF
SortedSet
ZADD result 680 清华 670 北大 560 山西大学 // 有序集合中添加元素,每个元素绑定一个浮点分数
ZRANGE result 0 -1 // 查元素,从分数低到高输出
ZRANGE result 0 -1 WITHSCORES // 输出 元素和分数
ZSCORE result 清华 // 查看清华分数
ZRANK result 清华 // 查看清华排名(从小到大),输出2
ZREVRANK result 清华 // 查看清华排名(从大到小),输出0
ZREM result 清华 // 删除清华
Hash
HSET person name kwq // 在person中加入键值对
HGET person name // 获取键的值
HGETALL person // 获取所有 键值对
HDEL person name // 删除键值对
HEXISTS person name // 是否存在
HKEYS person // 获取person中所有键
HLEN person // 获取person中键的数量
发布订阅
SUBSCRIBE kwqqq // 订阅频道kwqqq,可以有多个终端订阅同一个频道
// 在另一个终端可以发布消息 给所有 订阅了频道kwqqq 的终端
publish kwqqq redis
消息队列Stream
//解决发布订阅时,消息无法持久化,无法记录历史消息等问题
XADD kwqqq * course redis // 给Stream kwqqq 中加入键值对消息course redis,*表示生成自动的消息id
XADD kwqqq 1-0 course redis // 指定id为1-0
XLEN kwqqq // 查看Stream kwqqq 消息数量
XRANGE kwqqq - + // 查看所有消息
XDEL kwqqq 1-0 // 删除id为1-0的消息
XTRIM kwqqq 0 // 删除所有消息
XREAD COUNT 2 BLOCK 1000 STREAMS kwqqq 0 // 从头(0)开始读取kwqqq的2条消息,如果没有消息则阻塞1000ms,可以重复读取
XREAD COUNT 2 BLOCK 1000 STREAMS kwqqq $ // 获取从现在开始的最新消息
XGROUP CREATE kwqqq group1 0 // 0是id,group1是组的名称
XINFO GROUPS kwqqq // 查看组的信息
XGROUP CREATECONSUMER kwqqq group1 consumer1 // 将消费者consumer1添加到组group1中
XREADGROUP GROUP group1 consumer1 COUNT 2 BLOCK 1000 STREAMS kwqqq > // > 表示读取最新消息
//执行上面这条命令后,刚刚的消息就被消费了
地理空间Grospatial
GEOADD city 116.405285 39.904989 beijing // city是地理位置信息名字 后加经纬度 beijing是城市名
GEOPOS city beijing // 获取beijing经纬度
GEODIST CITY beijing shanghai // 计算位置距离 加 KM 则返回千米单位
GEOSEARCH city FROMMEMBER beijing BYRADIUS 300 KM // BYRADIUS是圆形范围的意思,返回beijing圆形范围300km的所有city,也可以使用BYBOX表示矩形范围
HyperLogLog算法
//用于做基数统计的算法,基数为不重复的元素的数量,牺牲精度提升速度
PFADD course git docker redis // 添加3门课程
PFCOUNT course // 计数
PFMERGE result course course2 // 合并course course2,放入result,会去掉重复
位图Bitmap
//使用String类型模拟一个bit数组,数组的下标就是偏移量,值只有0 1
//记录在线情况等等
SETBIT dianzan 0 1 // 设置一个dianzan的key,把它在偏移量0的位置上设置为1
SETBIT dianzan 1 0 // 设置一个dianzan的key,把它在偏移量1的位置上设置为0
GETBIT dianzan 0 // 获取dianzan键,在偏移量0上的值
//因为实际上是String,因此可以直接使用SET
SET dianzan "\xF0" // "\xF0"为16进制的11110000,一次性设置多个位的值
BITCOUNT dianzan // 输出dianzan中有多少个位为1
BITPOS dianzan 0 // 获取dianzan中第一个出现的0的位置
BITPOS dianzan 1 0 3 // 获取dianzan中0~3位的范围内,第一个出现的1的位置
位域Bitfield
//创建key为player:1,第一个位置为8位无符号数,表示等级,这里设置为1级
BITFIELD player:1 set u8 #0 1 // u8 8位无符号数; #0 第1个位置
BITFIELD player:1 get u8 #0 // get获取第一个位置上的值
BITFIELD player:1 set u32 #1 100 // 第2个位置设置为金钱,100元
BITFIELD player:1 incrby u32 #1 100 // 第2个位置再增加100元
事务
// 一次请求中执行多个命令
// redis中 事务中的某个命令执行失败,不会影响其他命令执行
// 事务执行过程中,其他客户端提交的命令请求不会被插入到事务的执行命令序列中
MULTI // 开启事务
SET K1 V1 // 回车后不会立即执行,而是会放到队列中
SET K2 V2 // 回车后不会立即执行,而是会放到队列中
//此时在其他客户端获取redis中的k1或k2都会是空
EXEC/DISCARD // 执行事务,执行后其他客户端才能获取k1和k2
持久化
RDB方式
// 配置文件中会自动出发快照
save // 手动触发快照
// 缺点:在快照后服务器宕机,则快照后的内容就会丢失
// 因此 RDB更适合用于备份
bgsave // 专门开启一个子线程,负责将内存中的数据写入硬盘,如果不开,就会阻塞主线程的所有操作
//上述两个命令会把内存中的数据保存在dump文件中
- AOF方式
- 为了解决上述 专门开启一个子线程 的时间损耗
- AOF意思是追加文件,即在写命令的时候,不仅会写入内存,还会写入一个追加文件(AOF文件),记录一切写操作
- 当服务器重启,执行aof文件,来重建整个数据库内容
- 只需要将配置文件中相应位置修改为 appendonly yes
主从复制
- 主节点master单向复制(异步传输)到从节点slave
- 主写从读
- 主节点的变化会自动同步到从节点上
修改从节点配置
- 修改配置文件redis.conf
- 修改端口号为从节点端口号
- pidfile的端口部分也进行修改,pid为进程id,为了和主节点的pid区分
- dbfilename dump后也加上 "-端口号",(这个就是之前所说的持久化文件),用于区分数据
- replocaof 该配置项是指定主节点的,replocaof 127.0.0.1 主节点端口号
启动从节点
redis-server redis-xxxx.conf // 终端输入
连接从节点
redis-cli -p xxxx // xxxx为从节点端口号
info replication // 查看信息
哨兵
上述主从复制中,主节点宕机,就需要人工设置新的主节点,不能做到真正的高可用
哨兵模式,就是为了实现自动的故障转移
哨兵以一个独立的进程运行在redis集群中,监控各个节点,功能如下
- 监控:不断发送命令来检查节点是否正常
- 通知:如果发现故障,则通过 发布订阅 模式来通知其他节点
- 自动故障转移:将一个从节点设置为新的主节点,将其他从节点指向新的主节点
配置哨兵模式
-
添加一个配置文件sentinel.conf,以添加一个哨兵节点
-
新建该文件,里面输入:
sentinel monitor 主节点名 127.0.0.1 端口号 1 // 1 表示 只需1个哨兵节点同一,就进行故障转移
-
启动哨兵节点
redis-sentinel sentinel.conf
- 在实际环境中,会设置3个哨兵节点,由它们选举其中一个为领导者,以防止哨兵故障,保证哨兵的高可用
- 如果领导者故障,其他哨兵则会选举出新的领导者
浙公网安备 33010602011771号