Redis学习总结
Redis
简介###
Redis全名是Remote Dictionary Server,使用ANSI C语言编写,属于NoSQL数据库。Redis可用作分布式缓存、分布式锁。Redis是内存数据库,也可以持久化。
数据类型###
数据模型是key-value,key只能是String,value支持多种类型:String、List、Set、Sort Set、Hash、Bitmap、HyperLogLog。
特点###
- Redis支持数据的持久化,重启的时候可以再次加载进行使用;
- Redis的value支持多种类型,适用于更广泛的应用场景;
- Redis支持数据的备份,即Master-Slave模式;
- Redis主进程是单线程工作,所有操作是原子性的,多个操作支持事务;
- Redis的性能优越,读速度达到110000次/s,写速度达到81000次/s,key和value的大小限制均为512M;
- 还支持Publish/Subcribe、通知、key老化逐出等特性。
持久化机制###
有两种方式,在redis.conf中配置
-
RDB快照,默认方式。
save 300 10:在300秒之后,如果至少有10个key发生变化,就触发BGSAVE命令创建快照
-
AOF(Append-Only File),实时性更好。
appendonly yes:开启 三种AOF持久化方式: appendfsync always:每次数据修改都写 appdenfsync everysec:每秒写一次(推荐) appendfsync no:让操作系统决定何时写
老化机制###
Redis支持设置key的过期时间,对过期的key删除方式:
- 定期删除,周期100ms,随机抽取设置过期时间的key
- 惰性删除,查询key时删除
如果定期删除漏掉了很多过期key,也没查询这些key,就不会删除。Redis支持配置最大内存,当内存不够用时,通过数据淘汰策略删除,支持以下6种淘汰策略:
- volatile-lru
- volatile-ttl
- volatile-random
- allkeys-lru
- allkeys-random
- no-enviction 默认
使用缓存常见的问题###
-
缓存被穿透
解决方法:
- 缓存空值,设置过期时间不超过5分钟
- 布隆过滤器