Redis汇总 pro max
目录:
起因
实习也有两个多月了,Redis
算做是使用得比较多的技术,各种数据结构在日常开发中也是用了个遍。
不过基本是在运维同学搭好的实例上玩耍、在公司基础库封装好的API上进行一通操作。
高效是高效,香也是很香得很,但Redis
本身的很多细节其实是被屏蔽的。其本身的架构设计、底层运作是非常值得学习研究的。
翻阅过好多优秀博客后进行的简单汇总
Redis简介
也就不多说了,引用某百科的一句话:
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。
关键词:C编写、基于内存、可持久化、Key-Value、多语言API
常用的数据结构及场景
字符串String
- 缓存:比如授权用到的各种
Token
,一段时间内会过期,又不可频繁获取,临时存储到reids - 计数器:通过
INCRBY
可以简单实现,通过原子递增保持计数 - 分布式锁:【1】
- 解决资源竞争造成的一致性问题
- 分布式环境下的共同资源,给一个key设定值和过期时间,获得锁的消费者有权读写
- 分布式ID生成器
哈希Hash
- 就是一个需要临时存储的
Map
! - 比如用户资料投审核,
- 以
uid
为 key, - 用户信息映射用fields 和 values 进一一对应存储
- 投审时直接放入,审核完对相应field进行删除
- 以
列表List
- 双向链表
- 消息队列:一边往里面push,一边往外面pop
- 比如 用户下单 和 库存处理 其实是可以分开处理,而且现在基本都放在两个服务里面
- 订单接收服务:下单完成即可返回给用户状态,同时push到公共队列里
- 订单处理服务:依次pop进行进行库存操作
- 方便做分布式和扩容
集合Set
当作临时存储的数组使用,注意的是set可以 自动排重
- 起初纯把Set当作数组用,某天发现数据少了一些觉得踩坑了!
- 后面用到了跟高阶的交集、并集、差集等操作,就暗自在内心说出了 卢本伟🐂🍺
- 两个用户求公共粉丝:分两组
Set
存,SINTER
一键求交集它不香吗~
- 两个用户求公共粉丝:分两组
有序集合Zset
- 无重复(成员不允许重复,分数是允许的)、有序的集合(按照
Score
进行排序) - 天然的排序结构,用来做排行榜再合适不过了
BUT
不过在某些领域Redis
也不是最适合的:
比如消息队列,优先选择的是 Kafka
以及一些“正儿八经的MQ
”,相信很少人去维护List
,自己废大力气去搞一致性和幂等,以及 真•持久化
实际上redis并不适合任何有保障数据持久性的场景。它适合做cache,不重要的存储,或者是可以反复重来的批处理计算任务的临时存储等。【2】