云霄建设局网站深圳市国外网站建设
云霄建设局网站,深圳市国外网站建设,wordpress多网站整合在一个后台,赣州人才网招聘文章目录 Redis 给缓存数据设置过期时间有啥用#xff1f;Redis是如何判断数据是否过期的呢#xff1f;过期的数据的删除策略了解么#xff1f; Redis 给缓存数据设置过期时间有啥用#xff1f;
一般情况下#xff0c;我们设置保存的缓存数据的时候都会设置一个过期时间。… 文章目录 Redis 给缓存数据设置过期时间有啥用Redis是如何判断数据是否过期的呢过期的数据的删除策略了解么 Redis 给缓存数据设置过期时间有啥用
一般情况下我们设置保存的缓存数据的时候都会设置一个过期时间。为什么呢
因为内存是有限的如果缓存中的所有数据都是一直保存的话分分钟直接Out of memory。
Redis 自带了给缓存数据设置过期时间的功能比如
127.0.0.1:6379 exp key 60 # 数据在 60s 后过期
(integer) 1
127.0.0.1:6379 setex key 60 value # 数据在 60s 后过期 (setex:[set] [ex]pire)
OK
127.0.0.1:6379 ttl key # 查看数据还有多久过期
(integer) 56注意 Redis中除了字符串类型有自己独有设置过期时间的命令 setex 外其他方法都需要依靠 expire 命令来设置过期时间 。另外 persist 命令可以移除一个键的过期时间
过期时间除了有助于缓解内存的消耗还有什么其他用么
很多时候我们的业务场景就是需要某个数据只在某一时间段内存在比如我们的短信验证码可能只在1分钟内有效用户登录的 token 可能只在 1 天内有效。
如果使用传统的数据库来处理的话一般都是自己判断过期这样更麻烦并且性能要差很多。
Redis是如何判断数据是否过期的呢
Redis 通过一个叫做过期字典可以看作是hash表来保存数据过期的时间。过期字典的键指向Redis数据库中的某个key(键)过期字典的值是一个long long类型的整数这个整数保存了key所指向的数据库键的过期时间毫秒精度的UNIX时间戳。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y2g1Ux8H-1692844680798)(images/redis-all/redis过期时间.png)]
过期字典是存储在redisDb这个结构里的
typedef struct redisDb {...dict *dict; //数据库键空间,保存着数据库中所有键值对dict *expires // 过期字典,保存着键的过期时间...
} redisDb;过期的数据的删除策略了解么
如果假设你设置了一批 key 只能存活 1 分钟那么 1 分钟后Redis 是怎么对这批 key 进行删除的呢
常用的过期数据的删除策略就两个重要自己造缓存轮子的时候需要格外考虑的东西
惰性删除 只会在取出key的时候才对数据进行过期检查。这样对CPU最友好但是可能会造成太多过期 key 没有被删除。定期删除 每隔一段时间抽取一批 key 执行删除过期key操作。并且Redis 底层会通过限制删除操作执行的时长和频率来减少删除操作对CPU时间的影响。
定期删除对内存更加友好惰性删除对CPU更加友好。两者各有千秋所以Redis 采用的是 定期删除惰性/懒汉式删除 。
但是仅仅通过给 key 设置过期时间还是有问题的。因为还是可能存在定期删除和惰性删除漏掉了很多过期 key 的情况。这样就导致大量过期 key 堆积在内存里然后就Out of memory了。
怎么解决这个问题呢答案就是 Redis 内存淘汰机制。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/88266.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!