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】

底层实现

引用


分享: