我们在生产环境中使用 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/
我是Redis新手。在我当前的项目中,我们大量使用了Redis,我们一次性提取了1000多个键,而且提取频率太高了。早期这些调用是连续的,我们正在尝试用管道替换。我们为此目的使用了SpringRedisTemplate。现在的挑战是我们从redisTemplate得到的响应是对象列表。我们希望它与输入键映射。现在我们依赖于输入键顺序,我认为这不是很可靠的事情。有什么方法可以让Redis本身以MAP格式获得相同的格式,以便我们可以直接使用响应。 最佳答案 没有这样的命令。相反,您可以使用Luascripting达到目标。但是,Lua脚
我的应用程序功能与Cassandra集成时遇到了一些问题。我正在尝试为我的用户创建一个内容提要。用户可以创建帖子,而帖子又具有字段user_id。我将Redis用于整个社交图,而将Cassandra列仅用于对象。在Redis中,用户1有一个名为user:1:followers的集合,其中包含他/她的所有关注者ID。这些关注者ID对应于用户表中的CassandraID和帖子表中的user_id。我的目标最初是简单地将此Redis集中的所有user_id插入一个查询,该查询将使用FROMpostsWHEREuser_idIN(此处为user_ids)并获取二级索引user_id中的所有帖子
在我正在开发的网站中,用户可以提交图像(头像)。当用户想要更新他们的图片时,上传的图片会被调整大小、优化并生成一些缩略图。只有经过处理后,图像才会显示在网站中。我打算使用redis来长时间缓存图片,当上述过程完成后,我想只对上传的图片使缓存失效。我找不到教我们如何实现这些目标的文档/教程。有人能给我指点一些教程/文档来解释如何缓存图像以及如何使特定图像的缓存无效吗?谢谢。 最佳答案 您可以使用solr-thumbnail包来完成所有这些工作,包括缓存。您也可以将redis定义为kvstore。Docshere
我是Redis的新手,我试图通过Redis文档找出这个问题,但没有成功。这是详细信息。假设我插入了如下字符串。Setcategory:1"Men"Setcategory:2"Women"Setcategory:3"Kids"Setcategory:4"Home"Setcategory:5"shoes"...在这种情况下,我想通过查询遵循特定模式的键来获取所有值category:*。Getcategory:*有没有办法像这样获取所有类别? 最佳答案 使用SCAN.SCAN是遍历Redis数据库中的键的唯一安全方法。SCAN将分块键空间
我计划为我的预订引擎使用StackExchange.Redisc#包装器。但我担心会在同一日期范围内登记的预订。如何确保不会创建重叠订单? 最佳答案 您必须为您的数据使用唯一的key。2个主要解决方案:解决方案1:在REDIS中存储唯一大小跟踪预订号关键名称:bookings:size在每次预订时,获取bookings:size,然后在预订后添加+1。像这样使用booking:size作为键预订:订单-1预订:订单2bookings:order-3解决方案2:在您的程序中生成一个唯一的key1.在您的代码中生成一个唯一的key(最好
我需要在Java中使用Redis作为数据源,所以我决定使用代码:publicclassRedisService{privatestaticfinalJedisjedis=newJedis("host",6400);;publicstaticDevicegetDevice(Stringkey){//Dosomethinguseredis.returnnull;}}我以为服务器会自动初始化Jedis(RedisAPIforJava),这是使用Jedis的好方法吗? 最佳答案 看看我们如何使用Jedis:通过传递主机和端口信息创建单例or
我需要在Java中使用Redis作为数据源,所以我决定使用代码:publicclassRedisService{privatestaticfinalJedisjedis=newJedis("host",6400);;publicstaticDevicegetDevice(Stringkey){//Dosomethinguseredis.returnnull;}}我以为服务器会自动初始化Jedis(RedisAPIforJava),这是使用Jedis的好方法吗? 最佳答案 看看我们如何使用Jedis:通过传递主机和端口信息创建单例or
我希望使用Redis的GEORADIUS命令。但是,该命令只在给定经纬度的二维圆范围内进行搜索。我还需要进行高度搜索,从而在三维球体范围内找到结果。我如何在Redis中实现这一目标? 最佳答案 我相信您实际上想要做的是在3D圆柱体(或者如果考虑到地球的球形性质,则为某种圆锥体)内搜索。海拔搜索本身并不包含在Redis的地理空间索引中,但您可以将该属性存储在其自己的SortedSet中作为分数。然后,您可以对高度执行范围搜索(ZRANGEBYSCORE),并将结果与半径查询的结果相交(ZINTER)(提示:使用临时键STORE结果
我希望使用Redis的GEORADIUS命令。但是,该命令只在给定经纬度的二维圆范围内进行搜索。我还需要进行高度搜索,从而在三维球体范围内找到结果。我如何在Redis中实现这一目标? 最佳答案 我相信您实际上想要做的是在3D圆柱体(或者如果考虑到地球的球形性质,则为某种圆锥体)内搜索。海拔搜索本身并不包含在Redis的地理空间索引中,但您可以将该属性存储在其自己的SortedSet中作为分数。然后,您可以对高度执行范围搜索(ZRANGEBYSCORE),并将结果与半径查询的结果相交(ZINTER)(提示:使用临时键STORE结果
我是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" 最佳答案 您可以