Redis(上)

一个高性能的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同时过期

日期加上随机值,分散处理。