Redis数据体系与选用速查
引言:
这篇文章用来汇总整理Redis常见数据类型的基本用法和用途,如有纰漏,欢迎指正。
Redis数据类型的罗列:
5大基本数据类型:String, List, Hash, Set, SortedSet
扩展数据类型:HyperLogLog, GEO, Stream, BitMap
基本数据类型
String类型
细分为字符串、整型、浮点型
字符串类型可存储JSON格式的字符串,使用时需序列化和反序列化(FastJson)。
常用命令get和set,前面加M就是批量,其他绝大多数是前两者的延伸。
set后加上EX可设定过期时间。
String - 分布式锁
场景:多客户端竞争同一资源时,用 SETNX 保证只有一个客户端能写入成功。 命令:SET lock:order:1 value NX EX 10 原理:NX 表示 key 不存在才写入,EX 设置过期时间防死锁。 注意:实际生产要结合 Redisson 或 Lua 脚本保证原子性,这里不详述。
List类型
可连续存储多个数据,类比数组
L、R与POP、POSH两两组合可构建出栈或队列。
List队列可用于实现消息队列,但没有存储限制,数据过多会挤爆内存,因此List队列只适合轻量化的场景,不能代替专业的MQ
Hash类型
可存储多个键值对,类比Map
与JSON类似,可用于模拟对象存储
与JSON的区别:Hash类型可以单独修改其中的某一个字段,适合需要频繁修改的场景
可用于实现购物车。
Set类型
底层是哈希表,查询速度快,无序存储。
可以利用 SINTER等命令对set求交集、并集或补集,这是List不具备的。
可用于实现共同关注列表,标签(快速无序性)。
SortedSet类型
与Set类似,有序存储,类比TreeSet
内有score字段可设置大小,通过 ZRANGE 命令可依照score字段排序
可用于实现排行榜,滚动分页查询(score存时间戳)等。
注:滚动分页查询部分会推出单讲。
扩展数据类型
HyperLogLog类型
利用概览模型算法,估算大规模数据集中不重复元素的数量(基数)
内存占用极低,不超过16KB,误差仅0.81%
用于UV统计和PV统计(不重复用户量和点击量)
GEO
地图模型,存储经纬度,默认单位是米
可计算两地距离,指定半径计算范围内数据
可用于同城搜索,附近商家等
Stream
可靠的消息队列和消费者组
用于异步任务队列
注:消息队列建议用独立的MQ技术,后续会讲
BitMap
位图,用于位运算
节省空间,计算高效
用于用户签到统计,在线状态统计
尾言:
绝大多数情况下,Redis命令不需要记,使用时利用 help @数据结构或--help的方式查询即可,命令行命令主临时模拟,多数情况下只用客户端代码,后续会单独介绍Java的客户端RedisTemplate。
注:这是小编第一次尝试写blog,如有纰漏,欢迎指正和讨论
后续计划:
缓存三剑客(击穿穿透雪崩)一文讲清楚
RedisTemplate用法简介
Lua 脚本在Redis中如何保证操作原子性
利用Redis实现滚动分页查询的一般方法