标签:
redis是单线程来处理所有client请求的。
multi命令:将命令放入队列中,直到遇到exec命令,再开始执行队列中的命令。
discard命令:来取消事务。
CAS(check and set):watch命令,被watch的key,在exec之前发生改变,则exec退出返回nil
除了可以利用mget,mset之类的命令来一次处理多条key,来减少网络传输外,也可以使用pipeline。
pipeline方式打包命令发送,redis会缓存所有命令的执行结果,消耗内存直到最后一次返回,所以并非一次打包命令越多越好。
public static void usePipeline(){ try{ jedis = new Jedis(HOST, PORT); jedis.auth("password"); Pipeline pl = jedis.pipelined(); pl.rpush("nn", "my"); pl.rpush("nn", "name"); pl.rpush("nn", "is"); pl.rpush("nn", "chai"); pl.rpush("nn", "dorothy"); pl.lrange("nn", 0, 4); System.out.println(pl.syncAndReturnAll().toString()); }catch(Exception e){ e.printStackTrace(); } }
如下是订阅者的代码:
@Test public void pubsubTest(){ String cmd = "auth password\r\nsubscribe news.share news.blog\r\n"; try{ Socket socket = new Socket(HOST,PORT); InputStream in = socket.getInputStream(); OutputStream out = socket.getOutputStream(); out.write(cmd.getBytes()); byte[] buffer = new byte[1024]; while(true){ int readCount = in.read(buffer); System.out.write(buffer,0,readCount); System.out.println("-----------------"); } }catch(Exception e){ e.printStackTrace(); } }
客户端直接订阅方式如下:
redis> psubscribe news.* Reading messages... (press Ctrl-c to quit) 1. "psubscribe" 2. "news.*" 3. (integer) 1
客户端发布消息如下:(返回2表示有2个连接接收了此消息)
redis> publish news.share "share a link http://www.google.com" (integer) 2 redis> publish news.blog "I post a blog" (integer) 2
Java程序接收到的消息:
*3 $9 subscribe $10 news.share :1 *3 $9 subscribe $9 news.blog :2 -------------------------------------- *3 $7 message $10 news.share $34 share a link http://www.google.com -------------------------------------- *3 $7 message $9 news.blog $13 I post a blog --------------------------------------
*
"快照是默认的持久化方式,默认文件名为dump.rdb
可以在redis.conf修改配置定时完成快照。默认配置如下:
也可以使用save和bgsave命令完成快照。
每次持久化都会将数据全部写入到磁盘一次,而不是增量的只同步脏数据。
比snapshotting有更好的持久化效果。将所有命令通过write函数追加到文件中(默认是appendonly.aof。
appendonly yes //启用aof # appendfsync always //性能差 appendfsync everysec //每秒缓存一次 # appendfsync no
标签:
原文地址:http://www.cnblogs.com/dorothychai/p/4422876.html