Redis Notes
文章目录
参考
概述
特点
- 高速读写
- 基于内存
持久化
- 虽然
过期删除
- 设定过期时间,过期后自动删除
- 分布式,主从集群
功能和场景概要
- 缓存
消息
- 发布和订阅
- 计数
- 队列
地理空间信息处理
- 存储
- 搜索
- 分布式锁
数据类型
- String
- HashMap
- List
- Set
- ZSet: 有序集合
过期时间
不要集中过期时间,避免集中过期,导致集中删除影响 Redis 性能
类型
共用功能
DEL
- 删除键
概念
key
- 在根路径下的名称
Hash :: Hash Map
- key
dict 的 名称
- field
字段名称
- value
- 字段的值
| |
- 这里 mymap 是 key
- name 和 score 是 field
- "Lucy" 和 80 是 value
string
功能
- set
创建字符串
- 使用 set 存储的结果都会转成
字符串即使是 数字等
- 使用 set 存储的结果都会转成
- get
- 获取整个字符串
- getRange
获取子串 substring
- 使用
- GetSet
- 返回旧值,设置新值
- MGet
- 一次获取多个 Key 对应的值
- SetEx
- 设置创建,同时指定过期时间 set exist timeout
- SetNX
- set not exist
- SetRange
- 设置子串
- StrLen
- 长度
- MSet
- Append
- 添加到字符串尾部
二进制操纵
原理
- 把整个字符串当成一个二进制数,修改给定位
bit - 从做到右计数,eg: 01110111: 0 -> 0, 1-> 1, 2->1, …
- 把整个字符串当成一个二进制数,修改给定位
setbit :: 设置给定位
1setbit Key Offset Value- offset 就是从左到右计算的位
- getbit :: 获取给定位 bit 的值
对于数值
- Incr
- 数值加 1
- IncrBy
- 加上给定值
- IncrByFloat
- 加 float 数值
- Decr
- DecrBy
- 注意:没有 DecrByFloat
hash
功能
- HSET, hset
- 创建 HashMap
- HSetNx
- hset when not exist, 字段不存在时设定
- ?
HGet
获取给定 field 的值
1hget yourHash field
- HDel
- 删除 field
- ?
HExists
- 判断给定 dict 中 是否存在 field
- HLen
- field 数量
- HKeys
- 所有字段 field
- HVals
- 所有值
- HGetAll
- 获取所有 field - value 对
- HScan
- 迭代 field - value 对, 在给定 db 中(区别于 HGetAll)
List
功能
- LPush
- 创建
- LRange
- 获取
- BLPop
- block left pop, 获取第一个元素 并删除
- BRPop
- block right pop
- BRPopLPush
- block right pop and left push to another list
- LIndex
- list index, 通过 index 获取元素
- LInsert
- 插入,通过 after|before , pivot 决定插入位置
- LLen
- LPop
- 移出第一个元素(left)
- LPush
- 左侧插入
- LPushX
- push when list exist
- LRem
- 移除几个给定元素
- LSet
- 通过 index 设置元素
- RTrim
- 修剪,只剩下 start ~ stop
- RPop
- RPopPush
- RPush
- RPushX
Set
功能
- sadd
- 创建
- SMembers
- 获取
- SScan
- SDiff
- 返回差集
- SDiffStore
- 返回差集,并存储到新的 Set
- SInter
- intersection 返回交集
- SInserStore
- SUnion
- 返回并集
- SUnionStore
- SIsMember
- 包含给定元素判断
- SMembers
- 所有元素
- SMove
- 在 Set 间移动元素
- SPop
- 随机删除
- SRem
- 删除给定元素
- SRandMemember
- 随机获取给定数量元素
zset(sorted set 有序集合)
功能
zadd
- 创建
- zRangeByScore
消息中间件
订阅 subscribe 和
- 通过 channel 和 订阅机制
一个 channel,可以被多个 client 订阅
- 多个订阅同时收到相同内容
- channel 不需要手动创建,订阅时 channel 自动创建
缺点:
- 不支持消息的堆积及回溯
- 不能持久化
- 不可回溯历史消息
Stream
- 链表存储
- 可以持久化
- 可以回溯任意位置
ID- 消息的 id
- 每个消息都有自己的 ID
- 保持递增,可以系统生成,可以自己设置
用途:
- 删除消息
- 访问消息
消费:
- 消费组 Consumer Group
- 消费组包括多个消费者 Consumer
操作:
消费组创建: XGROUP CREATE [stream_name] [consumer_group_name] [消费方向 0-0 或 $]
- 0-0 表示从头开始消费
- $ 表示从尾部开始消费(即已有消息不处理)
- 消费者创建和消费: XREADGROUP GROUP [group_name] [consumer_name] []
游标
last_delivered_id- 和消费组关联
- 消费组中的任意一个消费者访问了信息,都会导致 last_delivered_id 改变
数据库
Redis 的数据是 0,1,2,3 数字计数的 参考:
文章作者
上次更新 2025-09-24 (360d44c)