Redis的高级应用-事务处理、持久化、发布与订阅消息、虚拟内存使用

2015-01-26 10:48:25 · 作者: · 浏览: 9

三、事务处理

Redis的事务处理比较简单。只能保证client发起的事务中的命令可以连续的执行,而且不会插入其他的client命令,当一个client在连接中发出multi命令时,这个连接就进入一个事务的上下文,该连接后续的命令不会执行,而是存放到一个队列中,当执行exec命令时,redis会顺序的执行队列中的所有命令。如果其中执行出现错去,执行正确的不会回滚,次不同于关系型数据库的事务。

\ \

回滚后age的值已经改变。
<??http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+ICAgICAgICAgIMihz/vSu7j2ysLO8dPDZGlzY2FyZKOsyKHP+8rCzvG208HQo6zK/b7dyKuyv7vYufahozwvcD4KPHA+ICAgICAgICAgIFJlZGlzwNa528v4o7rKudPDd2F0Y2i84MrT1ri2qLXEa2V5o6y1sWV4ZWPKscjnufu84MrTtcRrZXm007X308N3YXRjaLrzt6LJ+rn9seS7r6Os1eLV+7j2ysLO8bvhyqew3KGjv8m199PDd2F0Y2i24LTOvODK07bguPZrZXmho3dhdGNous3Kws7xttTV+7j2way909PQ0KejrMjnufu2z7+qwcvBrL3TvODK07rNysLO8ba8u+HH5bP9o6hleGVjo6xkaXNjYXJko6x1bndhdGNo0rKyu8D9zeKjqaGjPC9wPgoKPHA+ICAgICDLxKGis9a+w7uvu/rWxjwvcD4KPHA+ICAgICAgICAgICBSZWRpc8rH0ru49tans9az1r7Du6+1xMTatObK/b7dv+KjrFJlZGlz0OjSqr6ts6O9q8TatObW0LXEyv2+3c2ssr21vbTFxczAtLGj1qSz1r7Du6+hozwvcD4KPHA+ICAgICAgICAgICBSZWRpc9ans9bBvdbWs9a+w7uvt73KvaO6PC9wPgo8cD4gICAgICAgICAgICAgICAgICAxoaJzbmFwc2hvdHRpbmejqL/s1dWjqaOsvavK/b7dtOa3xbW9zsS8/sDvo6zErMjPt73KvaGjPC9wPgo8cD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIMrHvavE2rTm1tC1xMr9vt3S0b/s1dW1xLe9yr3QtMjrtb22/r341sbOxLz+1tCjrMSsyM/OxLz+ZHVtcC5yZGKjrL/J0tTNqLn9xeTWw8no1sPX1Lav1/a/7NXVs9a+w7uvtcS3vcq9oaO/ycXk1sNSZWRpc9TabsPrxNrI57n7s6y5/W08L3A+CjxwPiAgICAgICAgICAgICAgICAgICAgICAguPZrZXmxu9DeuMS+zdfUtq+xo7Tmv+zV1aGjPC9wPgoKPHA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmUgOTAwIDEgICAgICAgIzkwMMPrxNrI57n7s6y5/TG49mtlebG70N64xKOs1d+3osbwv+zV1bGjtOY8L3A+CjxwPiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlIDMwMCAgMTAgICAjMzAww+vE2sjnufuzrLn9MTC49mtlebG70N64xKOs1eK/7NXVsaO05jwvcD4KPHA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmUgIDYwICAgIDEwMDAwICAjNjDD68TayOe5+7Osuf0xMDAwMLj2yv2+3bG70N64xKOst6LG8L/s1dWxo7TmPC9wPgoKPHA+ICAgICAgICAgICAgICAgICAgMqGiIEFwcGVuZC1vbmx5IGZpbGWjqMv10LTOqmFvZqOpo6y9q7bB0LSy2df3tOa3xbW9zsS8/tbQoaM8L3A+CjxwPiAgICAgICAgICAgICAgICAgICAgICAgICAgICDTydPav+zV1be9yr3U2tK7tqi85Lj0yrG85Nf20ru0zqOsy/nS1MjnuftSZWRpc9LizeJkb3dutfS1xLuwo6y+zbvhtqrKp9fuuvPSu7TOv+zV1brztcTL+dPQ0N64xKGjPC9wPgo8cD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW9msci/7NXVt73KvdPQuPy6w7XEs9a+w7uv0NSjrMrH08nT2sq508Nhb2bKsaOscmVkaXO74b2rw7/Su7j2ytW1vbXE0LTD/MHutrzNqLn9d3JpdGW6r8r916G80rW9zsS8/tbQtbFyZWRpc8b0tqvK0Lvhzai5/dbY0MLWtNDQzsS8/tbQsaO05iAgICA8YnI+CjwvcD4KPHA+ICAgICAgICAgICAgICAgICAgICAgtcTQtMP8we7AtNTaxNq05tbQ1tjQwr2owaLV+7j2yv2+3b/itcTE2sjdoaM8YnI+CjwvcD4KPHA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICDTydPab3O74dTaxNq6y9bQu7q05ndyaXRl1/a1xNDeuMSjrMv50tS/ycTcsrvKx8GivLTQtLW9tMXFzMnPo6zV4tH5YW9mt73KvbXEs9a+w7uv0rK7ucrH09C/ycTcu+G2qsqn0ruyv7fWyv2+3aGjPC9wPgo8cD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIL/J0tTNqLn9xeTWw87EvP645svfcmVkaXPO0sPHz+vSqs2ouf1mc3luY7qvyv3Hv9bGb3PQtMjrtb20xcXMtcTKsbv6oaM8L3A+CjxwPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicj4KPC9wPgo8cD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZG9ubHkgICB5ZXMgICPG9NPDYW9ms9a+w7uvt73KvTwvcD4KPHA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYXBwZW5kZnN5bmMgICAgYWx3YXlzIC8vytW1vdC0w/zB7r7NwaK8tNC0yOu0xcXMo6zX7sL9o6y1q8rHsaPWpMHLyv2+3bXEzerV+7PWvsO7rzwvcD4KPHA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRmc3luYyAgICAgICBldmVyeXNlYyAgLy/Dv8Pr1tDQtMjrtMXFzNK7tM6jrNTa0NTE3LrNs9a+w7uvt73D5tf2wcu63LrDtcTV29bQPC9wPgo8cD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhcHBlbmRmc3luYyAgICAgIG5vICAgICAvL83qyKvSwMC1b3OjrNDUxNzX7rrDo6yz1r7Du6/Du9PQsaPWpDwvcD4KCjxwPiAgICAgICAgICAgICAgICAgIL+qxvTS1Lrzo6zU2mJpbs7EvP680NbQu+G24MG9uPa05rSizsS8/qOsyOfPwqO6PC9wPgo8cD4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0="https://www.cppentry.com/upload_files/article/57/1_natq3__.jpg" alt="\">


五、发布与订阅信息

发布订阅(pub/sub)是一种消息通信模式,主要的目的是解除消息发布者和订阅者之间的耦合,Redis作为一个pub/sub的server,在订阅者和发布者之间起到消息路由的功能。订阅者通过subscribe和psubscribe命令向redis订阅自己感兴趣的消息类型,redis将信息类型成为通道(channel)。当发布者通过关publish命令向redis server发送特定类型的信息时,订阅该消息类型的全部client都会接收到此消息。

例如开启三个客户端,一个发布消息,另外两个订阅消息,如下


六、虚拟内存的使用

Redis的虚拟内存是暂时吧不经常访问的数据从内存交换到磁盘中,从而腾出内存空间用于其他的访问数据,尤其对于redis这样的内存数据库,内存总是不够用的。除了分隔到多个redis server外,提高数据库的容量的方法就是使用虚拟内存,把那些不常访问的数据交换到磁盘上。

通过配置vm相关的redis.config配置:

vm-enable yes #开启vm功能

vm-swap-file /tmp/redis.swap #交换出来的value保存的文件路径

vm-max-memory 10000000 #redis使用的最大内存上线

vm-page-size 32 #每个页面的大小32字节

vm-pages 123217729 #最多使用多小个页面

vm-max-threads 4 #用于执行value对象换入的工作线程数量

虚拟内存管理在2.6及之上版本取消了