分布式缓存Redis6常见数据结构+指令
- 分布式缓存Redis6常见数据结构+指令
- 1.Redis6常见数据结构概览
- 2.Redis6数据结构之String类型介绍和应用场景
- 数据结构介绍
- 3.Redis6数据结构之List类型介绍和应用场景
- 数据结构介绍:
- 4.Redis6数据结构之Hash类型介绍和应用场景
- 数据结构介绍:
- 5.Redis6数据结构之Set类型介绍和应用场景
- 数据结构介绍:
- 6.Redis6数据结构之Sorted Set类型介绍和应用场景
- 数据结构介绍:
分布式缓存Redis6常见数据结构+指令
1.Redis6常见数据结构概览
- redis中文文档:http://www.redis.cn/
- 常见数据结构
- String
- List
- Hash
- Set
- Sorted Set
- 通用命令
2.Redis6数据结构之String类型介绍和应用场景
数据结构介绍
- 应用场景:
- 验证码、计数器、订单重复提交、用户登录信息、商品详情
- 常用命令:
- set/get/increment/decrement/del
命令 | 输入方式 | 功能 |
set/get | set key value | 设置和获取 key-value1 |
mset/mget | mset key value [key value…] | 批量设置或获取多个key值 |
incr | incr key | incr对key对应的值进行加1操作,并返回新的值 |
incrby | incrby key increment | 将key对应的数字加increment。如果key不存在,操作之前,key就会被置为0 |
setex | SETEX key seconds value | 设置key对应字符串value,并且设置key在给定的seconds时间之后超时过期,原子操作 |
setnx | SETNX key value | 将key设置值为value,如果key不存在等同SET命令。 当key存在时什么也不做, 是set if not exists的简写。 |
getset | GETSET KEY_NAME VALUE | 设置key的值,并返回key旧的值 |
- 注意
- 值的长度不能超过512 MB
- key命名规范,不要过长,冒号分割,业务名:表名:ID
3.Redis6数据结构之List类型介绍和应用场景
数据结构介绍:
- 双向链表
- 双向链表,插⼊删除时间复杂度O(1)快,查找为O(n)慢
- 应用场景
- 简单队列、最新商品列表、评论列表、非实时排行榜:定时计算榜,如手机日销榜
命令 | 输入方式 | 功能 |
lpush | LPUSH key value1 [value2] | 将一个或多个值插入到列表头部 |
rpop | RPOP key | 移除并获取列表最后一个元素 |
llen | incr key | 获取列表长度 |
lindex | LINDEX key index | 通过索引获取列表中的元素 |
lrange | LRANGE key start stop | 获取key对应的list的指定下标范围的元素, 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素, -1表示获取所有元素( lrange key 0 -1); |
rpush | RPUSH key value1 [value2] | 在key对应的list的尾部添加一个元素 |
lpop | LPOP key | 从key对应的list的尾部删除一个元素,并返回该元素 |
brpop | BRPOP LIST1 LIST2 … LISTN TIMEOUT | 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止 |
lrem | LREM KEY COUNT VALUE | 移除元素,可以指定移除个数 |
- 注意
- 通常添加到一个元素到列表的头部(左边)或者尾部(右边)
- 存储的都是String字符串类型
- 支持分页操作,在高并发项目中,第一页数据都说来源list,第二页和更多信息则是通过数据库加载
- 一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表不超过40亿个元素)
4.Redis6数据结构之Hash类型介绍和应用场景
数据结构介绍:
- 是一个String类型的field和value的映射表,Hash特别适合用于对象储存
- 应用场景
- 购物车
- 用户个人信息
- 商品详情
命令 | 输入方式 | 功能 |
hset | HSET key field value | 设置 key 指定的哈希集中指定字段的值 |
hget | HGET key Field | 返回 key 指定的哈希集中该字段所关联的值 |
hgetall | HGETALL key | 返回 key 指定的哈希集中所有的字段和值 |
hdel | HDEL key field [field …] | 从 key 指定的哈希集中移除指定的域 |
hexists | HEXISTS key field | 返回hash里面field是否存在 |
hincrby | HINCRBY key field increment | 增加 key 指定的哈希集中指定字段的数值, 如果是-1 则是递减 |
hmset | HMSET key field value [field value …] | 设置 key 指定的哈希集中指定字段的值 |
hmget | HMGET key field [field …] | 返回 key 指定的哈希集中指定字段的值 |
- 每个Hash可以存储232-1键值对(40多亿)
5.Redis6数据结构之Set类型介绍和应用场景
数据结构介绍:
- 将一个或多个成员元素加入到集合中,已经存在于集合的元素将会被忽略
- 应用场景
- 去重
- 社交应用关注、粉丝、共同好友
- 统计网站的PV、UV、IP
- 大数据里面的用户画像标签集合
命令 | 输入方式 | 功能 |
sadd | SADD key member [member …] | 添加一个或多个指定的member元素到集合的 key中.指定的一个或者多个元素member 如果已经在集合key中存在则忽略 |
hget | SCARD key | 返回集合存储的key的基数 (集合元素的数量) |
sdiff | SDIFF key [key …] | 返回的集合元素是第一个key的集合与后面所有key的集合的差集 |
sinter | SINTER key [key …] | 返回指定所有的集合的成员的交集. |
sismember | SISMEMBER key member | 返回成员 member 是否是存储的集合 key的成员. |
srem | SREM key member [member …] | 在key集合中移除指定的元素. 如果指定的元素不是key集合中的元素则忽略 |
sunion | SUNION key [key …] | 返回给定的多个集合的并集中的所有成员. |
smembers | SMEMBERS key | 返回key集合所有的元素. |
- 注意:
- 集合是通过哈希表实现的
6.Redis6数据结构之Sorted Set类型介绍和应用场景
数据结构介绍:
- 用于将一个或多个成员元素及其分数值加入到有序集当中
- 如果某个成员已经是有序集的成员,那么更新这个成员的分数值,分数值可以是整数值或双精度浮点数。
- 有序集合可以看做是在Set集合的的基础上为集合中的每个元素维护了一个顺序值: score,它允许集合中的元素可以按照score进行排序
- 应用场景
- 实时排行榜:商品热销榜、体育类应用热门球队、积分榜
- 优先级任务、队列
- 朋友圈 文章点赞-取消,逻辑:用户只能点赞或取消,统计一篇文章被点赞了多少次,可以直接取里面有多少个成员
命令 | 输入方式 | 功能 |
zadd | ZADD key score1 member1 [score2 member2] | 向有序集合添加一个或多个成员,或者更新已存在成员的分数 |
zcard | ZCARD key | 获取有序集合的成员数 |
zcount | ZCOUNT key min max | 计算在有序集合中指定区间分数的成员数 |
zincrby | ZINCRBY key increment member | 返回指定所有的集合的成员的交集. |
zrange | ZRANGE key start stop [WITHSCORES] | 通过索引区间返回有序集合指定区间内的成员, 成员的位置按分数值递增(从小到大)来排序 |
zrevrange | ZREVRANGE key start stop [WITHSCORES] | 通过索引区间返回有序集合指定区间内的成员, 成员的位置按分数值递增(从大到小)来排序 |
zrevrank | ZREVRANK key member | 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序 |
zrank | ZRANK key member | 返回有序集key中成员member的排名。其中有序集成员按score值递增(从小到大)顺序排列 |
zrem | ZREM key member [member …] | 移除有序集合中的一个或多个成员 |
zscore | ZSCORE key member | 返回有序集中,成员的分数值 |
- 注意
- 底层使用到了Ziplist压缩列表和“跳跃表”两种存储结构
- 如果重复添加相同的数据,score值将被反复覆盖,保留最后一次修改的结果
- 什么是跳跃表:性能堪比红黑树,而且实现起来比红黑树简单很多