1

概述

Redis属于NoSql,即非关系性数据库,采用key-value的形式存值。采用Redis作为缓存,可以缓解数据库的压力。由于Redis的运行环境在内存中,同时使用c语言编写,所以取数据的速度比较快。
同时因为在内存环境中,所以要考虑两个问题。(1)内存环境一般断电即擦除,所以需要持久化策略。(2)Redis的存储数据的能力是有限的,内存数据满了,应该如何处理。


Redis的持久化策略

1.RDB模式

RDB是Redis默认的持久化策略。使用Redis,会自动生成一个RDB文件。RDB文件记录的是数据快照,占用空间小,持久化效率高。
image
但是Redis是单线程的,记录快照会阻塞Redis的使用,所以它的默认设置是,900秒内,1次改变,进行快照。300秒内,10次改变,进行快照。60秒内,10000次改变,进行快照。
这就有丢失数据的可能性。
image

2.AOF模式

为了应对数据丢失的可能性,Redis推出AOF模式,它默认是关闭的。它记录的是用户层操作行为,可以确保数据不丢失。
但是由于记录的是操作行为,文件占用内存大,并且恢复数据的速度慢。
image

3.模式选择

1.如果对数据完整性要求较高,使用AOF模式
2.如果追求效率,允许少量丢失数据,使用RDB模式
3.如果想两者兼顾可以采用集群的方式,主机和从机采用不同的模式。


Redis内存优化策略

1.默认策略noeviction

image
Redis内存满了之后,默认是不进行任何处理。正常情况下都会修改redis.conf,修改默认策略。

2.LRU(Least Recently Used)

LRU是最近最少使用,开启之后,当内存满了,会将最近最少使用的数据删除。
image
Redis里面有两种可选策略,一种是针对快到期的数据,进行LRU算法(volatile-lru),一种是针对所有数据进行LRU算法(allkeys-lru)

3.LFU(Least Frequently Used)

LFU是最近最少使用。它考虑到有曾经特别热门的数据,但是后期很少有人访问的情况,所以是计数寄存器定时右移一位,呈指数递减。
image
Redis里面有两种可选策略,一种是针对快到期的数据,进行LFU算法(volatile-lfu),一种是针对所有数据进行LFU算法(allkeys-lfu)

4.Random

Random 是随机删除数据,这就有可能带来缓存击穿或者穿透问题,所以正常情况下是不会使用这种算法,和上面两种一样,Redis也提供了两种可选策略。一种快到期,一种针对所有数据
image

5.TTL

TTL是将即将超时的数据删除,所以是只针对设定了超时时间的数据。Redis也只提供了一种策略。
image


52HZ
7 声望1 粉丝