在Redis的showlog功能简介

在Redis的showlog功能简介
Redis有实际slowlog功能。正如您可以猜到的,您可以检查运行查询。最后将记录查询slowlog X运行在Y微秒。X和Y可以在redis.conf或在运行时配置命令
复制代码如下:配置集slowlog日志低于5000

配置集slowlog最大长度25

设置.

slowlog日志低于用于设置微秒,所以以上设置将记录运行超过5秒的查询。把日志记录,你可以用得到的X命令slowlog,其中x是记录你想要的数目。
复制代码如下:slowlog得到10

它将显示一个唯一的ID、时间戳和事件查询、查询执行所花费的时间和实际的命令+参数。你可以通过删除日志slowlog复位。
上次看slowlog,我一直无法平静看到DEL命令已经花费了超过20毫秒的时间。记住,redis是单线程的,因此它将块(严重阻碍)并发系统。同时,因为这是一个写操作,这将阻止这个复制过程中的所有时间依赖Redis复制。服务量,是否正在进行。

也许除了我之外,人人都知道这一点,但它证明了使用DEL命令字符串的哈希值,时间复杂度为O(1),并为列表,设置和排序集(n)(其中n是集合中的项目数)。你可以删除包含数百万个数据集等阻止它。

我们的解决方案非常简单:我们不删除这些数据项,而是重命名它们,并在后台使用小型可中断块执行这些数据项。首先,我们delayed_delete功能:

本地键=键{ 1 }
当地data_type = redis.call(键)。好吧

如果data_type'set'or然后= = = = data_type'zset
局部温度= 'gc:TMP:..redis.call('incr ','gc:IDS)..:..钥匙
Redis.call('rename键,温度)
返回redis.call('sadd ','gc:..data_type,温度)
终点

返回redis.call('del键)
这会将收集和添加新的名字:设置或GC GC:zset集。(我们没有使用列表,但是如果你使用它,你也应该支持它。

接下来,我们安排了一个Ruby脚本,每分钟运行一次:

require'redis
R = redis.new(司机::hiredis)
r.srandmember('gc:集',10000)。每做|集|
项目= r.srandmember(组5000)
如果items.nil | | items.length = = 0
R.srem('gc:设置,设置)
下一个
终点
R.srem(设置项)
终点

r.srandmember('gc:zset,10000)。每做| zset |
如果r.zremrangebyrank(zset,0, 5000)<5000
R.srem('gc:zset,zset)
终点
终点
您可以根据您的需要修改号码。你的收藏有多大,它们被删除的频率有多大,因为我们不经常做这些输出操作,我们一次只能删除一小块。

但是这种方法比直接删除更慢,但在并发环境中可以很好地执行。

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部