文章目录
- 1. Redis数据类型
- 2. string
- 3. hash数据类型
- 4. Redis数据类型之list
- 4. Redis数据类型之set
- 5. Redis数据类型之sorted_set
1. Redis数据类型
1.1 业务数据的特殊性
作为缓存使用:
- 原始业务功能设计
- 秒杀
- 618活动
- 双11活动
- 排队购票
- 运营平台监控到的突发高频访问数据
- 突发时政要闻,被强势关注围观
- 高频、复杂的统计数据
- 在线人数
- 投票排行榜
附加功能:
系统功能优化或升级
- 单服务器升级集群
- Session 管理
- Token 管理
1.3 redis 数据存储格式
1.3 Redis 数据类型(5种常用)
2. string
2.1 string 类型
2.2 string 类型基本操作
基本操作01:
实操:
基本操作02:
append指令的返回值为当前操作原生的长度。
实操:
2.3 单指令操作与多指令操作的抉择!
你可能会有疑问,为什么同样的功能出现了2个指令,下面来说一下这2者的区别。
答疑时间:
在一次性操作大量数据的时候,适当分割数据量(mset,mget…)可以提升效率!
2.4 string类型数据的扩展操作:充当数值
业务场景:
解决方案:
string作为数值操作:
2.5 string类型数据的扩展操作:生命周期
业务场景:
解决方案:
2.6 string类型数据的扩展操作:高频访问信息
业务场景:
解决办法:
2.7 string类型数据操作的注意事项
redis数据库重新设置值会覆盖之前的值。
2.8 redis的key的设置约定
redis里面的数据大部分还是来源于其他关系型数据库
3. hash数据类型
3.1 hash类型简介
3.2 hash类型数据的基本操作
基本操作01:
示例:
基本操作02:
示例:
3.3 hash类型数据扩展操作
演示:
3.4 hash类型数据操作的注意事项
3.5 hash类型应用场景:电商网站购物车设计与实现(买家)
业务场景:
解决方案:
思考:上面的设计是否加速了购物车的呈现,错误!
hsetnx可以保证在原来字段有值得情况下不会去修改它,相当于在修改之前做了一次判断,提升了redis的性能。
3.7 hash类型应用场景:双11活动日(卖家)
业务场景:
解决方案:
3.8 redis原则
redis只负责数据的提供和保存,尽量不要把业务逻辑压到redis上面来,像判断值存不存在这种指令就应当谨慎使用,因为他已经带有业务逻辑的性质了。
3.9 string存储对象和hash存储对象对比
- string存数据注重的是整体性,要么一次性更新,要么一次性获取。以读为主。
- hash可以把属性隔离开,他讲究的是更新操作会比较灵活一些。更新操作会遍历一些。
- 注意灵活运用(可以在hash里面存储string json格式)。
4. Redis数据类型之list
4.1 list类型介绍
4.2 list 类型数据基本操作
如果你想按照push的顺序获取数据,那么你需要从push相反的方向去获取数据。
索引这里,-1表示倒数第一个元素,-2表示倒数第二个元素,以此类推。
示例:
4.3 list 类型数据扩展操作:规定时间内获取并移除数据
b表示阻塞的意思:block
- Redis Blpop 命令移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
- Redis Brpop 命令移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
- Redis Brpoplpush 命令从列表中取出最后一个元素,并插入到另外一个列表的头部; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
示例:
4.4 list 类型数据扩展操作:微信朋友圈点赞
业务场景:
解决方案:
示例:
4.5 list 类型数据操作注意事项
4.6 list 应用场景:list实现日志消息队列
4. Redis数据类型之set
4.1 set类型介绍
4.2 set类型基本操作
基本操作01:
示例:
基本操作02:
示例:
4.3 set 类型数据的扩展操作:获取随机的数据
应用场景:
为了增加用户的粘性,今日头条会给你推送热点消息。并且有2中推送策略:一是推送过的就不再推送了,二是推送过后依然会再次推送。
解决办法:
示例:
4.4 set 类型数据的扩展操作:集合的交、并、差集
业务场景:
集合的交、并、差集说明:
解决方案:
4.4.1 sinter命令
4.4.2 sunion命令
4.4.3 sdiff命令
4.4.4 sinterstore命令
4.4.5 sunionstore命令
4.4.6 sdiffstore命令
4.4.7 smove命令
4.5 set类型注意事项
- set类型不允许数据重复,如果添加的数据在set 中已经存在,将只保留一份。
- set虽然与hash的存储结构相同,但是无法启用hash中存储值的空间。
4.6 set类型应用场景:权限校验
业务场景:
解决方案:
4.7 set类型应用场景:网站访问量统计
业务场景:
解决方案:
4.8 set类型应用场景:实现黑白名单
应用场景:
解决方案:
5. Redis数据类型之sorted_set
5.1 sorted_set类型介绍
5.2 sorted_set 类型数据的基本操作:添加、获取、删除
5.2.1 zadd命令
5.2.2 zrange命令 和 zrevrange命令
zrevrange命令和zrange命令类型,只是他是逆序(大到小)展示。
示例:
5.2.3 zrem命令
示例:
5.3 sorted_set 类型数据的基本操作:条件获取数据和删除数据
示例:
5.5 redis索引和操作元素说明
redis里面的操作跟java有一点不同,java在操作这些数据的时候常常是[start,end),操作元素不包括end。但是redis里面是[start,end],包含satrt和end。
5.6 sorted_set 类型数据的基本操作:集合相关操作
5.6.1 zcard命令
5.6.2 zcount命令
5.6.3 zinterstore命令
示例:
5.6.4 zunionstore命令
示例:
5.7 sorted_set扩展操作:排名
业务场景:
解决方案:
5.7.1 zrank命令
5.7.2 zrevrank命令
5.7.3 zscore命令:取score
5.7.4 zincrby命令:先更新score再取score
5.8 sorted_set 类型数据操作的注意事项
- score保存的数据存储空间是64位,如果是整数范围是-9007199254740992~9007199254740992
- score保存的数据也可以是一个双精度的double值,基于双精度浮点数的特征,可能会丢失精度,使用时候要慎重。
- sorted_set底层存储还是基于set结构的,因此数据不能重复,如果重复添加相同的数据,score值将被反复覆盖,保留最后一次修改的结果。
5.9 sorted_set应用场景:管理过期信息
业务场景:
解决方案:
5.9.1 redis time命令
5.10 sorted_set应用场景:带有权重的消息队列
业务场景:
解决方案: