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个哨兵节点,由它们选举其中一个为领导者,以防止哨兵故障,保证哨兵的高可用
  • 如果领导者故障,其他哨兵则会选举出新的领导者
posted @ 2024-07-12 11:03  落花流水sas  阅读(50)  评论(0)    收藏  举报