当前位置: 首页 > news >正文

网站开发的发展行政单位建设网站方案

网站开发的发展,行政单位建设网站方案,wordpress上传媒体文件8m,wordpress 加密算法引言 Redis的过期删除策略和内存淘汰策略是经常被问道的问题#xff0c;这两个机制都是做删除操作#xff0c;但是触发的条件和使用的策略是不同的。今天就来深入理解一下这两个策略。 过期删除策略 Redis 是可以对 key 设置过期时间的#xff0c;因此需要有相应的机制将…引言 Redis的过期删除策略和内存淘汰策略是经常被问道的问题这两个机制都是做删除操作但是触发的条件和使用的策略是不同的。今天就来深入理解一下这两个策略。 过期删除策略 Redis 是可以对 key 设置过期时间的因此需要有相应的机制将已过期的键值对删除而做这个工作的就是过期键值删除策略。 如何设置过期时间 Redis中设置key过期时间的命令一共有4个 expire key n设置key在n秒后过期。pexpire key n设置key在n毫秒后过期。expireat key n设置key在某个时间戳精确到秒之后过期。pexpireat key n设置key在某个时间戳精确到毫秒之后过期。 当然在设置字符串时也可以同时对key设置过期时间共有3种命令 set key value ex n设置键值对的时候同时指定过期时间精确到秒set key value px n设置键值对的时候同时指定过期时间精确到毫秒setex key n value设置键值对的时候同时指定过期时间精确到秒 要想查看某个key剩余的存活时间可以使用命令TTL key # 设置键值对时指定过期时间为60sset name iq50 ex 60 OK# 查看过期时间ttl name (integer) 56ttl name (integer) 50# 可以通过PERSIST key命令取消过期时间persist name (integer) 1# -1表示永不过期ttl name (integer) -1如何判定key已过期了 每当我们对一个 key 设置了过期时间时Redis 会把该 key 带上过期时间存储到一个**过期字典expires dict**中也就是说「过期字典」保存了数据库中所有 key 的过期时间。 过期字典存储在 redisDb 结构中如下 typedef struct redisDb {dict *dict; /* 数据库键空间存放着所有的键值对 */dict *expires; /* 过期字典存储键的过期时间 */.... } redisDb;过期字典数据结构结构如下 过期字典的 key 是一个指针指向某个键对象过期字典的 value 是一个 long long 类型的整数这个整数保存了 key 的过期时间 过期字典数据结构如下图所示 字典实际上是哈希表哈希表的最大好处就是让我们可以用 O(1) 的时间复杂度来快速查找。当我们查询一个 key 时Redis 首先检查该 key 是否存在于过期字典中 如果不在则正常读取键值如果存在则会获取该 key 的过期时间然后与当前系统时间进行比对如果比系统时间大那就没有过期否则判定该 key 已过期。 常见的3种过期删除策略 在介绍Redis的过期删除策略之前来看一下常见的3种过期删除策略 定时删除惰性删除定期删除 接下来一张表分析一下各自的优缺点 删除策略描述优点缺点定时删除在设置key过期时间时同时创建一个定时事件。当时间到达时由事件处理器自动执行key的删除操作。对内存友好。可以保证过期key会被尽快删除去释放内存。对CPU不友好。在过期key较多的情况下会占用相当一部分CPU时间这会对服务器的响应时间和吞吐量造成影响。惰性删除不主动删除过期键每次从数据库访问key时都检测key是否过期过期则删除该key。对CPU友好。只有每次访问时才检查key所以只会使用很少的系统资源。对内存不友好。如果一个key已经过期但是我们一直没有去访问它占用的内存空间就一直得不到释放。定期删除每隔一段时间随机从数据库中取出一定数量的key进行检查并删除其中的过期key。限制删除操作的执行时长和频率减少对CPU的影响也能删除过期数据减少对内存的无效占用。 内存清理方面没有定时删除好也没有惰性删除使用的系统资源少。难以确定删除操作执行的时长和频率。 Redis的过期删除策略 基于我们上面介绍的3种过期删除策略Redis选择了**惰性删除定期删除两种策略配合使用**以求在合理使用CPU时间和避免内存浪费之间取得平衡。 Question1Redis是怎么实现惰性删除的呢 Redis的惰性删除由 db.c 文件中的 expireIfNeeded 函数实现代码如下 int expireIfNeeded(redisDb *db, robj *key) {// 判断 key 是否过期if (!keyIsExpired(db,key)) return 0;..../* 删除过期键 */....// 如果 server.lazyfree_lazy_expire 为 1 表示异步删除反之同步删除return server.lazyfree_lazy_expire ? dbAsyncDelete(db,key) :dbSyncDelete(db,key); }Redis 在访问或者修改 key 之前都会调用 expireIfNeeded 函数对其进行检查检查 key 是否过期 如果过期则删除该 key至于选择异步删除还是选择同步删除根据 lazyfree_lazy_expire 参数配置决定Redis 4.0版本开始提供参数然后返回 null 客户端如果没有过期不做任何处理然后返回正常的键值对给客户端 Question2Redis是怎么实现定期删除的呢 再回忆一下定期删除策略的做法每隔一段时间「随机」从数据库中取出一定数量的 key 进行检查并删除其中的过期key。 **间隔时间多长**在 Redis 中默认每秒进行 10 次过期检查相当于每100ms一次此配置可通过 Redis 的配置文件 redis.conf 进行配置配置键为 hz 它的默认值是 hz 10。 **随机抽查的数量多少**随机抽查的数量由 ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP 定义的它是写死在代码中的数值是 20。 接下来看一下定期删除的流程 从过期字典中随机抽取 20 个 key检查这 20 个 key 是否过期并删除已过期的 key如果本轮检查的已过期 key 的数量超过 5 个也就是「已过期 key 的数量」占比「随机抽取 key 的数量」大于 25%则继续重复步骤 1如果已过期的 key 比例小于 25%则停止继续删除过期 key然后等待下一轮再检查。 由此可见定期删除是一个循环的流程。 内存淘汰策略 之前我们介绍的是Redis的过期删除策略是删除已过期的key而当Redis的运行内存已经超过Redis设置的最大内存之后则会使用内存淘汰策略删除符合条件的key以此保证Redis的高效运行。 如何设置Redis最大运行内存 在配置文件 redis.conf 中可以通过参数 maxmemory bytes 来设定最大运行内存只有在 Redis 的运行内存达到了我们设置的最大运行内存才会触发内存淘汰策略。 不同位数的操作系统maxmemory 的默认值是不同的 在 64 位操作系统中maxmemory 的默认值是 0表示没有内存大小限制那么不管用户存放多少数据到 Redis 中Redis 也不会对可用内存进行检查直到 Redis 实例因内存不足而崩溃也无作为。在 32 位操作系统中maxmemory 的默认值是 3G因为 32 位的机器最大只支持 4GB 的内存而系统本身就需要一定的内存资源来支持运行所以 32 位操作系统限制最大 3 GB 的可用内存是非常合理的这样可以避免因为内存不足而导致 Redis 实例崩溃 Redis内存淘汰策略有哪些 Redis 内存淘汰策略共有八种这八种策略大体分为「不进行数据淘汰」和「进行数据淘汰」两类策略。 1、不进行数据淘汰的策略 noevictionRedis3.0之后默认的内存淘汰策略 它表示当运行内存超过最大设置内存时不淘汰任何数据这时如果有新的数据写入会报错通知禁止写入不淘汰任何数据但是如果没用数据写入的话只是单纯的查询或者删除操作的话还是可以正常工作。 2、进行数据淘汰的策略 针对「进行数据淘汰」这一类策略又可以细分为「在设置了过期时间的数据中进行淘汰」和「在所有数据范围内进行淘汰」这两类策略。 在设置了过期时间的数据中进行淘汰 volatile-random随机淘汰设置了过期时间的任意键值volatile-ttl优先淘汰更早过期的键值。volatile-lruRedis3.0 之前默认的内存淘汰策略淘汰所有设置了过期时间的键值中最久未使用的键值volatile-lfuRedis 4.0 后新增的内存淘汰策略淘汰所有设置了过期时间的键值中最少使用的键值 在所有数据范围内进行淘汰 allkeys-random随机淘汰任意键值;allkeys-lru淘汰整个键值中最久未使用的键值allkeys-lfuRedis 4.0 后新增的内存淘汰策略淘汰整个键值中最少使用的键值。 我们可以通过命令查看当前Redis使用的内存淘汰策略 127.0.0.1:6379 config get maxmemory-policy 1) maxmemory-policy 2) noeviction可以看出当前 Redis 使用的是 noeviction 类型的内存淘汰策略它是 Redis 3.0 之后默认使用的内存淘汰策略表示当运行内存超过最大设置内存时不淘汰任何数据但新增操作会报错。 怎么修改内存淘汰策略 有两种方式可选 通过config set maxmemory-policy 策略命令设置。它的优点是设置之后立即生效不需要重启 Redis 服务缺点是重启 Redis 之后设置就会失效。通过修改 Redis 配置文件修改设置“maxmemory-policy 策略”它的优点是重启 Redis 服务后配置不会丢失缺点是必须重启 Redis 服务设置才能生效。 总结 Redis 使用的过期删除策略是「惰性删除定期删除」删除的对象是已过期的 key。 内存淘汰策略是解决内存过大的问题当 Redis 的运行内存超过最大运行内存时就会触发内存淘汰策略Redis 4.0 之后共实现了 8 种内存淘汰策略我也对这 8 种的策略进行分类如下
http://www.dnsts.com.cn/news/260108.html

相关文章:

  • 东莞信科做网站ocin wordpress主题
  • 网站建设需要哪些基础wordpress 编辑器设置
  • 手机被网站安装软件有哪些内容html页面 wordpress
  • vps如何创建网站嘉兴品牌网站
  • 网站建设宣传wordpress 搬家出错
  • 怎样免费建企业网站wordpress 腾讯云短信
  • 怎么找淘宝客网站wordpress企业网站制作视频教程
  • 专业html5网站建设小程序开发平台售后服务怎样
  • 合肥品牌型网站建设地址树莓派wordpress建站
  • 和平苏州网站建设上海网站建设案例
  • 中航建设集团有限公司网站一起做网站
  • 网站制作在哪里比较好如何使用ps做网站
  • 青岛cms建站系统seo推广工具
  • 自己做网站和外包wordpress转到手机端
  • 网站权重提升工具《网站开发实践》 实训报告
  • 广州医院网站建设备案价网站
  • 常州网站建设专业的公司软件开发培训机构加盟
  • 企业建站划算吗365网站
  • 那个网站详情页做的好做影视网站违法莫
  • 专业网站设计 网络服务专业手机建站价格
  • php网站投票源码网站建设销售一个月开几个单
  • 网站项目团队介绍找外贸客户的网站
  • 金融投资公司网站建设论文卡点视频免费制作软件
  • 抚州制作网站哪家公司好大连开发区一中
  • 保定制作公司网站的公司青岛百度网站排名优化
  • 陕西高端品牌网站建设返利网站开发计划书
  • 餐饮团购网站建设东莞网站建设技术支持
  • 山东省建设工程质量监督总站网站赣州做网站推广
  • 苏州网站建设品牌网站建站网站80s隐秘而伟大
  • 网站建设和app哪个好本地的番禺网站建设