redis高级实用特性(2)
事务处理:
redis对事务的支持目前还是比较简单,redis只能保证一个
client发起事务中的命令可以连续执行,而中间不会插入其他
client的命令,当一个client 在一个连接中发出multi命令时,这个
连接会进入一个事务上下文,该连接后续的命令不会立即执行,
而是先放到一个队列中,当执行exec命令时,redis会顺序的执行
队列中的所有命令。
127.0.01:6379> MULTI
OK
127.0.01:6379> set age 20
QUEUED
127.0.01:6379> set age 30
QUEUED
127.0.01:6379> get age
QUEUED
127.0.01:6379> EXEC
1) OK
2) OK
3) "30"
如何取消一个事务
discard 取消事务,达到事务回滚的效果
>>现在的redis对事务的支持还是不完善的
如:
127.0.01:6379> MULTI
OK
127.0.01:6379> incr age
QUEUED
127.0.01:6379> incr name
QUEUED
127.0.01:6379> exec
1) (integer) 31
2) (error) ERR value is not an integer or out of range
当执行事务中的语句出错时,age并没有回滚
>>乐观锁复杂事务控制
乐观锁:大多数是是基于数据版本(version)的记录机制实现的。
即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一
般是通过为数据表添加一个version字段来实现读取数据时,将此版本号一同
读出,之后更新时,对此版本号加1.此时,将提交数据的版本号与数据库表对应
的字段版本号进行对比,如果提交的数据版本号大于数据库当前版本号,则给予
更新,否则认为是过期数据。
>redis乐观锁实例:假设有一个age的key,我们开两个session来对age进行复制操作,
这样事务会执行失败,watch 命令会监视给定的key,当exec时,如果监视的key
从调用watch后发生过变化,则整个事务会失败。也可以调用watch多次监视多个
key.这样就可以对指定的key加乐观锁了,注意watch的key是对整个连接
有效的,事务也是一样的,如果连接断开,监视和事务都会自动清除,
当然exec,discard,unwatch命令都会清除连接中的所有监视。
>>持久化机制
redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据
同步到硬盘来保持持久化。redis支持两种持久化方式:
1.snapshotting(快照)也是默认的方式
2.append-only file(缩写aof)的方式
>snapshottting
快照是默认的持久化方式,这种方式是将内存中数据以快照的方式写入
到二进制文件中,默认的 文件名为dump.rdb.可以通过配置设置自动
做快照持久化的方式。我们可以配置redis在n秒内如果超过m个key被
修改就自动做快照。
save 60 10000 #如果60秒内超过10000个key被修改,则发起快照保存
>aof
由于快照方式是在一定间隔时间内做一次,所以如果redis意外down掉得话,
就会丢失最后一次快照后的所有修改。
aof比快照方式有更好的持久化性,是由于在使用aof时,redis会将每一个
收到的写命令都通过write函数追加到文件中,当redis重启时会通过重新执行
文件中保存的写命令来在内存中重建整个数据库内容。
当然由于os会在内核中缓存write做的修改,所以可能不是立即写到磁盘上。
这样aof方式的持久化也还是有可能丢失部分修改。
可以通过配置文件告诉redis,我们想要通过fsync函数强制os写入到磁盘的时机。
appendonly yes //启用aof持久化方式
#appendfsync always //收到写命令就立即写入到磁盘,最慢,但是保证完全的持久化
#appendsync everysec //每秒写入磁盘一次,在性能和持久化方面做了很好的折中
#appendsync no //完全依赖os,性能最好,性能没有保证
>>发布及订阅消息
发布订阅(pub/sub)是一种消息通信模式,主要的目的是解除消息发布者和消息订阅者之间
的耦合,redis作为一个pub/sub的server,在订阅者和发布者之间起到了消息路由的功能。
订阅者可以通过subscribe和psubscribe命令向redis server订阅自己感兴趣的消息类型
redis将消息类型称为通道(channel).当发布者通过publish命令向redis server发送
特定类型的信息时,订阅该信息类型的全部client都会收到此消息。
客户端1 subscibe tv1 订阅tv1
publish tv1 "发布的消息"
消息发布时,客户端1会收到信息
>>虚拟内存的使用
redis的虚拟内存与操作系统的虚拟内存不是一回事,但是思路和目的都是相同的。
就是暂时把不经常访问的数据从内存交换到磁盘中,从而腾出 宝贵的内存空间用于
其他需要访问的数据。尤其是对于redis这样的内存数据库,内存总是不够用的。除了
可以将数据分割到redis server外。另外能够提高数据库容量的办法就是使用虚拟内存
把那些不经常访问的数据交换到磁盘上。
下面是vm相关的配置:
vm-enabled yes #开启vm功能
vm-swap-file /tmp/redis.swap #交换出来的value保存的文件路径
vm-max-memory 1000000 #redis使用的最大内存上限
vm-page-size 32 #每个页面的大小32字节
vm-pages 134217728 #最多使用多少页面
vm-max-threads 4 #用于执行value对象换入的线程数量
redis高级实用特性(2)的更多相关文章
- Redis学习第八课:Redis高级实用特性(二)
Redis高级实用特性 4.持久化机制 Redis是一个支持持久化的内存数据库,也就是说Redis需要经常将内存中的数据同步到硬盘来保证持久化.Redis支持两种持久化方式:(1).snapshott ...
- Redis学习第八课:Redis高级实用特性(一)
Redis高级实用特性 注:我学习的环境是vmware7.1 + ubantu10.10+ redis 3.0.2 1.安全性 设置客户端连接后进行任何其他指定前需要的密码.因为redis速度相当快, ...
- redis高级实用特性
1. 安全性 2. 主从复制 3. 事务处理 4. 持久化机制 5. 发布订阅消息 : 可以做一个消息系统 6. 虚拟内存的使用 一 . 安全性 设置客户端连接后进行任何其他指定前需要使用的密码 . ...
- redis高级实用特性(1)
1.安全性 2.主从复制 3.事务处理 4.持久化机制 5.发布订阅消息 6.虚拟内存的使用 安全性:设置客户端连接后进行任何其他指定前需要使用的密码 警告:因为redis速度相当快,所以在一台比较好 ...
- Redis 高级实用特性
1.安全性 设置客户端连接后进行任何其他操作前先验证密码. 因为Redis速度相当快,所以在一台比较好的服务器下,一个外部用户可以在一秒钟进行150K次的密码尝试,这意味着需要指定一个非常强大的密码来 ...
- Redis数据库高级实用特性:持久化机制
Redis数据库高级实用特性:持久化机制 大型web系统数据缓存设计 Redis高级特性:虚拟内存的使用技巧 Redis高级实用特性:安全性与主从复制 Memcached.Redis OR Tair
- NoSQL之Redis高级实用命令详解--安全和主从复制
Android IOS JavaScript HTML5 CSS jQuery Python PHP NodeJS Java Spring MySQL MongoDB Redis NOSQL Vim ...
- redis高级应用特征
Redis高级应用特性 1.安全性 2.主从复制 3.事务处理 4.持久化机制 5.发布订阅消息 6.虚拟内存的使用 安全性 设置客户端连接后进行任何其他指定前需要使用的密码. 警告:因为redis速 ...
- redis 高级特性 不要太好用
Redis高级特性及应用场景 redis中键的生存时间(expire) redis中可以使用expire命令设置一个键的生存时间,到时间后redis会自动删除它. 过期时间可以设置为秒或者毫秒精度. ...
随机推荐
- WPF中override ResourceDictionary中的设置的方法
当资源文件里改变了控件的样式时,在使用的地方如果想改变资源文件里修改的内容,会造成无法达到预期目的的结果. 以DataGrid为例,我在资源文件里,改变了默认的DataGrid的样式,其中我设置了Is ...
- C# 根据IP获取省市
/// <summary> /// 根据IP获取省市 /// </summary> public void GetAddressByIp() { string ip = &qu ...
- POJ 2484 A Funny Game
博弈. $n>=3$,后手赢,否则先手赢. #pragma comment(linker, "/STACK:1024000000,1024000000") #include& ...
- LVM
LVM (简体中文) pvdisplay -v -m命令查看物理分段 Create logical volume from another LV free space PVMOVE(8)
- H5移动端页面设计心得分享(转载)
去年JDC出了不少优秀的武媚娘…不,H5呢,大家都很拼,同时当然也积累了一些经验和教训,今天结合咱们的实战案例,从字体,排版,动效,音效,适配性,想法这几个方面好好聊一聊关于H5的设计,希望对同学们有 ...
- EditText文本中用正则匹配是否包含数字,及判断文本只能是纯汉字或纯字母
遇到判断EditText中文本,是否为制定格式 EditText et; Button btn; @Override protected void onCreate(Bundle savedInsta ...
- JavaScript DOM编程艺术-学习笔记(第五章、第六章)
第五章: 1.题外话:首先大声疾呼,"js无罪",有罪的是滥用js的那些人.js的father 布兰登-艾克,当初为了应付工作,10天就赶出了这个js,事后还说人家js是c语言和s ...
- Windows Server 2008 如何在IIS中添加MIME类型
用户可以通过使用MIME以设置服务器传送多媒体文件,如声音和视频等.MIME是一种技术规范,现在可以用于浏览器上,传送可以供浏览器识别的信息 如果我们的网站提供下载服务,有时传上去的文件比如 xxx. ...
- 误删除libc.so.6的解决方法
误删除libc.so.6的解决方法 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://63638790.blog.51cto. ...
- IOS APP 国际化(实现不跟随系统语言,不用重启应用,代码切换stroyboard ,xib ,图片,其他资源)
http://www.cnblogs.com/tangbinblog/p/3898046.html