这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天
介绍
内存数据库,高读写性能的key-value存储系统。可作为缓存,消息中间件,流数据处理。
Redis is an open source (BSD licensed), in-memory data structure store used as a database, cache, message broker, and streaming engine
重要特性:
-
性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s
-
原子 – Redis的所有操作都是原子性的。单个操作是原子性的。
多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起
-
数据结构丰富
-
扩展
扩展:
- Transactions 事务
- Pub/Sub 消息的发布订阅机制
- Lua scripting
- Keys with a limited time-to-live 键过期机制
- LRU eviction of keys
- Automatic failover 故障转移
数据结构
Key、Strings、Hash、List、Set
-
GET/SET/DEL/INCR/SETNX
(变量
获得,设置,删除,原子增,只在不存在时设置,存在的话不作为(SET if Not eXists)
EXITS Key,判断是否存在
Expire Key time,设置过期时间
TTL Key, 测试时间
-
HSET/HGET/HINCRBY
(哈希表 or 字典 or 映射Map
(插入一个 k,v;获取一个k,为一个k增加值
HSET key field value [field value ...] HGET key field HINCRBY key field increment -
LPUSH/RPOP/LRANGE
(list / 链表
头插,尾弹
LRANGE key start stop用负数表示尾部,类似python切片的语法,全闭区间
-
SADD / SISMEMBER / SCARD / SINTER
(集合,集合间操作
-
ZADD/ZRANGEBYSCORE/ZREVRANGE/ZINCRBY/ZSCORE
(有序集合
应用
缓存穿透
对于一个cache中不存在的key,请求会直接询问数据库DB,如果短时间对这个不存在的key大量并发访问,就会造成DB宕机
解决
- bloom filter,进行拦截
- cache null策略,设置一个 承接空 的key
缓存雪崩
在同一时刻,大量缓存的Key失效,导致原本由缓存承接的请求,大量的查询DB,会造成DB宕机
解决
- 请求加锁
- 对失效更新
- 不同key,设置不同的失效时间
未来
写的比较浅,未来会深入学习,并结合实践