一、redis的优缺点
1.优点
- **读写性能优异**。
- **支持数据持久化**,支持AOF和RDB两种持久化方式。
- **支持事务**,Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。
- **数据结构丰富**,除了支持string类型的value外还支持hash、set、zset、list等数据结构。
- **支持主从复制**,主机会自动将数据同步到从机,可以进行读写分离。
2.缺点
- **数据库容量受到物理内存的限制**,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。
- **Redis** **不具备自动容错和恢复功能**,主机从机的宕(dang)机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复。
- **主机宕机**,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性。
- **Redis 较难支持在线扩容**,在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足够的空间,这对资源造成了很大的浪费。
二、redis的内存淘汰策略有哪些
1.全局的键空间选择性移除
- noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。
- allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key。(这个是最常用的)
- allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key。
2.设置过期时间的键空间选择性移除
- volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key。
- volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key。
- volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除。
3.**总结**
Redis的内存淘汰策略的选取并不会影响过期的key的处理。内存淘汰策略用于处理内存不足时的需要申请额外空间的数据;过期策略用于处理过期的缓存数据。