Redis Psync scheduled to be closed ASAP for overcoming of output buffer limits.

作者:Rui 发布时间:December 23, 2016 分类:Redis 浏览:2,526

在做Redis HA的时候,会遇到一直同步失败的问题。并且在server的log中,发现如下异常信息

[12:54:10.7788397] [960] 09 Dec 12:54:10.783 # Client id=5252201 addr=10.207.180.15:42489 fd=119 
name= age=16 idle=0 flags=SP db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=198 oll=113
omem=274319752 ow=0 owmem=0 events=rw cmd=psync scheduled to be closed ASAP for overcoming of output buffer limits.

这是因为在主从同步过程中,master向slave发送数据时,写入缓冲区的数据超出了限制,导致连接中断。

阅读剩余部分...

Redis High ServerLoad and CPU Troubleshooting

作者:Rui 发布时间:December 23, 2016 分类:Redis 浏览:4,015

问题现象

最近工作中,遇到Redis serverload和CPU一直保持过高的问题,导致程序中很多redis的请求出现Timeout现象。当时的RPS远没有达到我们部署的redis的限制,但serverload和CPU就一直维持在90%以上,严重影响了redis的响应时间。之前我们做过基准测试,我们部署的redis可以存储54G数据,RPS可以达到25W/s,但事故时,却只有5W RPS,内存也只占用了24G左右。

有可能引起该问题的原因

  1. 资源受限,网络带宽,CPU性能,机器性能
  2. large request/response size(large object), 存储过大的数据。因为redis是单线程的,在处理请求时,如果某个请求处理的慢,就会堵塞后续的命令执行,独占资源,
  3. 执行过于复杂的LUA 脚本

阅读剩余部分...

Jedis 解决连接Redis Cluster不支持密码的问题

作者:Rui 发布时间:August 18, 2016 分类:BIGDATA,Redis 浏览:1,894

目前Jedis的发行版本,不支持使用JedisCluster连接有密码保护的Redis Cluster,这个特性已经在Github上开发完毕,将要在2.9版本发布时将其合并到主分支中。

如果迫切想使用该功能,可以自己更新最新的代码,自己合并该pull request的commit。该提交已经review通过。

这是该提交的地址,Add support to set password in JedisCluster

Redis Expires 简介和使用

作者:Rui 发布时间:June 24, 2016 分类:BIGDATA,Redis 浏览:8,594

Redis提供了为key设置生存时间的功能,当给指定的key的生存时间过期时,redis将会自动删除该Key. 在Redis术语中,也通常将设置过生存时间的Key称为易失的Key(volatile)

使用示例:
redis-expire.png

阅读剩余部分...

Redis Keyspace Notifications

作者:Rui 发布时间:June 12, 2016 分类:JAVA,Redis,BIGDATA 浏览:7,218

Keyspace Notifiations 允许客户端通过Pub/Sub订阅所有影响Redis key的操作通知事件。
以下是可以接受的事件类型:

  1. 所有影响key的操作
  2. LPUSH操作
  3. Redis expire 操作

操作事件 依赖于Redis Pub/Sub 机制,所以客户端只需要订阅keySpace相关的channel即可实现订阅通知事件

因为Redis Pub/Sub 是一种并不可靠地消息机制,所以Keyspace Notification 也不是可靠地通知系统,如果你的系统需要很好的可靠性,那么Keyspace Notification可能并不是一种很好的选择。在将来,作者也表示希望实现可靠的Notification功能。

事件类型
Redis Keyspace Notification 会对每一个影响key的操作都会发出两种类型的事件,例如,删除一个key,会触发两个事件:

PUBLISH __keyspace@0__:mykey del
PUBLISH __keyevent@0__:del mykey

阅读剩余部分...