草庐IT

雷迪斯 (1.2.6) : Slow queries

coder 2023-07-18 原文

我们在生产环境中使用 Redis 1.2.6。 redis 中有 161804 个键。机器有 2GB 内存。

问题:

对 Redis 的选择查询平均需要 0.02 秒。但有时他们需要 1.5-2.0 秒,我认为每当 redis 将修改后的 key 保存在磁盘上时。

我在重启redis之前和之后注意到的一件奇怪的事情是:

重启前“changes_since_last_save”变化太快,达到 3000+(5 分钟内)。但重启后“changes_since_last_save”仍然低于 20 左右。

重启前的 Redis 统计信息:

{:bgrewriteaof_in_progress=>"0", :arch_bits=>"64", :used_memory=>"53288487", :total_connections_received=>"586171", :multiplexing_api=>"epoll", :used_memory_human=>"50.82M", :total_commands_processed=>"54714152", :uptime_in_seconds=>"1629606", :changes_since_last_save=>"3142", :role=>"master", :uptime_in_days=>"18", :bgsave_in_progress=>"0", :db0=>"keys=161863,expires=10614", :connected_clients=>"13", :last_save_time=>"1280912841", :redis_version=>"1.2.6", :connected_slaves=>"1"}

重启后的 Redis 统计信息:

{:used_memory_human=>"49.92M", :total_commands_processed=>"6012", :uptime_in_seconds=>"1872", :changes_since_last_save=>"2", :role=>"master", :uptime_in_days=>"0", :bgsave_in_progress=>"0", :db0=>"keys=161823,expires=10464", :connected_clients=>"13", :last_save_time=>"1280917477", :redis_version=>"1.2.6", :connected_slaves=>"1", :bgrewriteaof_in_progress=>"0", :arch_bits=>"64", :used_memory=>"52341658", :total_connections_received=>"252", :multiplexing_api=>"epoll"}

不确定这里出了什么问题。

提前致谢。

苏尼尔

最佳答案

默认情况下,Redis 配置为根据一段时间内更改的键的数量不时将所有数据转储到磁盘(请参阅 default config)。

另一种选择是使用 append-only file ,它更轻量,但需要某种维护——您需要每隔一段时间运行一次 BGREWRITEAOF,这样您的日志就不会变得太大。 Redis config file 上还有更多内容关于这个。

正如 Tobias 所说,您应该尽快切换到 2.0,因为它比 1.2.6 更快,而且在许多情况下使用的内存更少。

关于雷迪斯 (1.2.6) : Slow queries,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3404696/

有关雷迪斯 (1.2.6) : Slow queries的更多相关文章

  1. 雷迪斯 |获取管道结果作为输入命令的映射 - 2

    我是Redis新手。在我当前的项目中,我们大量使用了Redis,我们一次性提取了1000多个键,而且提取频率太高了。早期这些调用是连续的,我们正在尝试用管道替换。我们为此目的使用了SpringRedisTemplate。现在的挑战是我们从redisTemplate得到的响应是对象列表。我们希望它与输入键映射。现在我们依赖于输入键顺序,我认为这不是很可靠的事情。有什么方法可以让Redis本身以MAP格式获得相同的格式,以便我们可以直接使用响应。 最佳答案 没有这样的命令。相反,您可以使用Luascripting达到目标。但是,Lua脚

  2. Cassandra /雷迪斯 : Way to create feed without Cassandra 'IN' secondary index? - 2

    我的应用程序功能与Cassandra集成时遇到了一些问题。我正在尝试为我的用户创建一个内容提要。用户可以创建帖子,而帖子又具有字段user_id。我将Redis用于整个社交图,而将Cassandra列仅用于对象。在Redis中,用户1有一个名为user:1:followers的集合,其中包含他/她的所有关注者ID。这些关注者ID对应于用户表中的CassandraID和帖子表中的user_id。我的目标最初是简单地将此Redis集中的所有user_id插入一个查询,该查询将使用FROMpostsWHEREuser_idIN(此处为user_ids)并获取二级索引user_id中的所有帖子

  3. Django + 雷迪斯 : How to invalidate cache for just one specific element - 2

    在我正在开发的网站中,用户可以提交图像(头像)。当用户想要更新他们的图片时,上传的图片会被调整大小、优化并生成一些缩略图。只有经过处理后,图像才会显示在网站中。我打算使用redis来长时间缓存图片,当上述过程完成后,我想只对上传的图片使缓存失效。我找不到教我们如何实现这些目标的文档/教程。有人能给我指点一些教程/文档来解释如何缓存图像以及如何使特定图像的缓存无效吗?谢谢。 最佳答案 您可以使用solr-thumbnail包来完成所有这些工作,包括缓存。您也可以将redis定义为kvstore。Docshere

  4. 雷迪斯 : Querying based on matching key pattren - 2

    我是Redis的新手,我试图通过Redis文档找出这个问题,但没有成功。这是详细信息。假设我插入了如下字符串。Setcategory:1"Men"Setcategory:2"Women"Setcategory:3"Kids"Setcategory:4"Home"Setcategory:5"shoes"...在这种情况下,我想通过查询遵循特定模式的键来获取所有值category:*。Getcategory:*有没有办法像这样获取所有类别? 最佳答案 使用SCAN.SCAN是遍历Redis数据库中的键的唯一安全方法。SCAN将分块键空间

  5. redis - 预订引擎 |雷迪斯 - 2

    我计划为我的预订引擎使用StackExchange.Redisc#包装器。但我担心会在同一日期范围内登记的预订。如何确保不会创建重叠订单? 最佳答案 您必须为您的数据使用唯一的key。2个主要解决方案:解决方案1:在REDIS中存储唯一大小跟踪预订号关键名称:bookings:size在每次预订时,获取bookings:size,然后在预订后添加+1。像这样使用booking:size作为键预订:订单-1预订:订单2bookings:order-3解决方案2:在您的程序中生成一个唯一的key1.在您的代码中生成一个唯一的key(最好

  6. java - 雷迪斯 : Can I init jedis instance as a static final field? - 2

    我需要在Java中使用Redis作为数据源,所以我决定使用代码:publicclassRedisService{privatestaticfinalJedisjedis=newJedis("host",6400);;publicstaticDevicegetDevice(Stringkey){//Dosomethinguseredis.returnnull;}}我以为服务器会自动初始化Jedis(RedisAPIforJava),这是使用Jedis的好方法吗? 最佳答案 看看我们如何使用Jedis:通过传递主机和端口信息创建单例or

  7. java - 雷迪斯 : Can I init jedis instance as a static final field? - 2

    我需要在Java中使用Redis作为数据源,所以我决定使用代码:publicclassRedisService{privatestaticfinalJedisjedis=newJedis("host",6400);;publicstaticDevicegetDevice(Stringkey){//Dosomethinguseredis.returnnull;}}我以为服务器会自动初始化Jedis(RedisAPIforJava),这是使用Jedis的好方法吗? 最佳答案 看看我们如何使用Jedis:通过传递主机和端口信息创建单例or

  8. database - 雷迪斯 GREORADIUS : include altitude? - 2

    我希望使用Redis的GEORADIUS命令。但是,该命令只在给定经纬度的二维圆范围内进行搜索。我还需要进行高度搜索,从而在三维球体范围内找到结果。我如何在Redis中实现这一目标? 最佳答案 我相信您实际上想要做的是在3D圆柱体(或者如果考虑到地球的球形性质,则为某种圆锥体)内搜索。海拔搜索本身并不包含在Redis的地理空间索引中,但您可以将该属性存储在其自己的SortedSet中作为分数。然后,您可以对高度执行范围搜索(ZRANGEBYSCORE),并将结果与​​半径查询的结果相交(ZINTER)(提示:使用临时键STORE结果

  9. database - 雷迪斯 GREORADIUS : include altitude? - 2

    我希望使用Redis的GEORADIUS命令。但是,该命令只在给定经纬度的二维圆范围内进行搜索。我还需要进行高度搜索,从而在三维球体范围内找到结果。我如何在Redis中实现这一目标? 最佳答案 我相信您实际上想要做的是在3D圆柱体(或者如果考虑到地球的球形性质,则为某种圆锥体)内搜索。海拔搜索本身并不包含在Redis的地理空间索引中,但您可以将该属性存储在其自己的SortedSet中作为分数。然后,您可以对高度执行范围搜索(ZRANGEBYSCORE),并将结果与​​半径查询的结果相交(ZINTER)(提示:使用临时键STORE结果

  10. 雷迪斯 : Sorted sets for specific SMEMBERS - 2

    我是Redis的新手,我尝试为属于sadd的特定值显示一个排序集。有没有办法在Redis中执行此操作?SADDfriends"Sarah"SADDfriends"Lisa"SADDfriends"Tim"ZADDusers200"Sarah"ZADDusers133"Lisa"ZADDusers410"Peter"ZADDusers280"Tim"ZADDusers205"Hans"我想显示一个仅包含friend分数的排序集。1)"Tim"2)"280"3)"Sarah"4)"200"5)"Lisa"6)"133" 最佳答案 您可以

随机推荐