一个高性能的key-value
数据库。
缓存中间件–Memcache和Redis
Redis优点:1、数据类型丰富。2、支持数据持久化存储。3、主持主从。4支持分片。
为什么Redis这么快
完全基于内存的操作。
数据结构简单,对数据的操作也简单。
单线程(避免并发问题)。
多路复用I/O模型。
多路复用IO模型
基于react
设计模式监听I/O事件。
Redis采用的多路复用函数:epoll/kqueue/evport/select。
优先使用时间复杂度为O(1)的多路复用函数,以时间复杂度为O(n)的select作为保底。
Redis的数据类型
1、String
2、HashMap
3、List
4、Set
5、Sorted Set
6、用于计数的HyperLoglog,用于存储地理信息的Geo
从海量key中查询固定前缀的key
KEYS pattern:一次性返回所有的key,但是键值过大容易造成卡顿。
1 | SCAN cursor [MATCH pattern] [COUNT count] |
基于cursor的迭代器,以cursor为游标开始迭代,支持模糊查询,不保证每次都能返回count个。
通过Redis实现分布式锁
1 | SET key value [EX seconds][PX milliseconds] [NX|XX] |
EX:设置过期时间(秒)。
PX:设置过期时间(毫秒)。
NX:键不存在时才设置。
XX:键存在时才设置。
成功时返回OK,否则返回nil
分布式锁需要解决的问题
互斥性:任意时间只能有一个客户端获取资源。
安全性:不能由其他客户端删除。
死锁:机制避免。
容错:Redis宕机仍能释放锁和获取锁。
大量key同时过期
日期加上随机值,分散处理。