您的位置:首页 > 数据库 > Redis

redis作为缓存服务器

2016-09-19 08:40 393 查看
Redis最常见的使用场景是作为缓存服务器进行数据缓存,而缓存数据的一大特性是数据具有时效性,在数据加载到Redis中进行缓存开始,隔一定时间后或者根据某个特定策略此数据就会过期失效,然后被删除。在Redis中有以下两种方式可以自动删除过期键,保持缓存数据的时效性:1、设置键过期时间;2、设置Redis内存大小,(Redis中键值占用空间达到最大内存后,根据配置文件中配置的键淘汰策略找到失效待删除的键然后将其删除)

设置键过期时间

1、在Redis中可以使用expire或者pexpire 命令设置某个键的过期时间,键过期后,Redis会自动将其删除,

命令格式:

redis> expire key seconds   //其中key为设置过期时间的键名,seconds为设置过期时间的时间值,以秒为单位
//上面命令的意思是设置seconds秒后,key过期失效
//expire命令返回1表示设置成功,返回0表示键不存在或者设置失败

//或者
redis> pexpire key  milliseconds    //其中key为设置过期时间的键名,milliseconds为设置过期时间的时间值,单位为毫秒,命令返回和expire一致


2、使用ttl或者pttl命令可以查看某个键离过期还剩的时间

命令格式为:

redis> ttl key
//此命令的返回值为键离过期剩余的时间(单位是秒),返回-1表示此键没有设置过期时间,返回-2表示键不存在

//或者
redis> pttl key
//返回和ttl返回大致相同,只是剩余时间的单位为毫秒


3、使用persist命令可以将某个已经设置的过期时间的键恢复为永久存在(即没有过期时间)

命令格式为:

redis> persist key
//此命令返回1表示成功清除过期时间,返回0表示键不存在或者建本来就没有过期时间


设置Redis内存大小

Redis中可以设置path/to/redis.conf配置文件中的maxmomerymaxmemory-policymaxmemory-samples 三个配置项对Redis服务的最大内存,及过期键删除策略进行配置。

配置详解如下【path/to/redis.conf】:

//设置redis的最大可用内存,以字节为单位
maxmemory <bytes>

//设置过期键删除策略,当Redis键值占用的内存空间大于maxmemory指定的值时,会根据此配置查找过期键并删除,直到占用内存小于maxmemory的配置值(若没有找到要删除的键则返回错误信息)。
//redis目前支持如下6种策略:
//  1、volatile-lru --> 仅对设置了过期时间的键使用LRU算法删除【最近最少使用算法】(仅从设置了过期时间的键中选择)
//  2、allkeys-lru --> 对所有键使用LRU算法删除键(包括设置了过期时间和没设置过期时间的键,即从reids所有键中选择)
//  3、volatile-random --> 从设置了过期时间的键中随机选择键进行删除操作(仅从设置了过期时间的键中选择)
//  4、allkeys-random --> 从所有键中随机选择键进行删除操作,直到占用内存小于maxmemory的配置值(包括设置了过期时间和没设置过期时间的键,即从reids所有键中选择)
//  5、volatile-ttl --> 删除离过期时间最近的键(即ttl值最小的值,因此只会在设置了过期时间的键中选择)
//  6、noeviction --> 不会删除任何的键,向造成占用空间超出配置值的命令返回错误结果,其他读数据的命令正常返回。
maxmemory-policy <policy-name>

//当使用LRU算法或者volatitle-ttl策略进行过期键的删除操作时,Redis并不会精确的在所有键中查找最近最小使用或者ttl值最小的键,而是根据maxmemory-samples的配置值(默认是5),每次在Redis中随机取maxmemory-samples指定的键个数,
//然后在这些随机抽取出来的键中运用LRU算法删除过期键,或者删除ttl值最小的键【即假设使用volatile-ttl策略,在默认情况下,redis会随机抽取5个键,然后删除这5个键中ttl值最小的键】
//redis配置文件中提示:默认的5个键已经可以产生足够好的结果了,设置为10可以产生和真实结果非常接近的结果了,但是比较消耗CPU资源,设置为3速度足够快,但是精确度稍微差点
maxmemory-samples 5


redis中也可以通过CONFIG SET命令动态的设置maxmemory、maxmemory-policy和maxmemory-samples的配置值

注意:设置maxmemory值时需要考虑redis初始化占用的空间,【可以通过info memory命令的used_memory_human字段值查看当前redis服务占用的内存空间,maxmemory配置值所限制的最大空间就是info memory命令中used_memory_human字段占用的空间大小】
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  redis 缓存服务器