Redis数据体系与选用速查

0 阅读3分钟

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实现滚动分页查询的一般方法