redis研究之watch

具体的看注释,代码如下:

 1         public static void TransTest()
 2         {
 3             RedisClient client1 = new RedisClient(host, port);
 4             RedisClient client2 = new RedisClient(host, port);
 5             //初始k1为1
 6             client1.Set<string>("k1", "1");
 7             Console.WriteLine(client1.Get<string>("k1"));
 8             //监视k1
 9             client1.Watch("k1");
10             var trans = client1.CreateTransaction();
11             trans.QueueCommand(r => r.Set<string>("k1", "11111111111111"));
12             //k2不存在
13             trans.QueueCommand(r => r.Set<string>("k2", "2"));
14             //其它客户端在事务提交前修改k1的值
15             client2.Set<string>("k1", "AAAAAAAAAA");
16             //提交事务
17             trans.Commit();
18             Console.WriteLine(client1.Get<string>("k1"));//这里会输出AAAAAAAAAA
19             Console.WriteLine(client1.Get<string>("k2"));//这个值会是空
20             Console.Read();
21         }
时间: 2024-10-09 21:00:26

redis研究之watch的相关文章

Redis研究(六)—集合类型

一.介绍 一个集合类型(set)键可以存储至多2^32-1个字符串. 集合类型在Redis内部是使用值为空的散列表(hash table)实现的,所以操作的复杂度为O(1).多个集合类型键之间还可以进行并集.交集和差集运算. 二.命令 1.增加/删除元素 sadd key member srem key member sadd用来向集合中增加一个或者多个元素,如果键不存在则会自动创建.一个集合中不能有相同的元素,所以如果要加入的元素已经存在于集合中就会忽略这个元素.本命令的返回值是成功加入的元素

Redis研究(四)—散列类型

散列类型(hash)的键值也是一种字典结构,其存储了字段(field)和字段值的映射,但字段值只能是字符串,不支持其他数据类型. 散列类型不能嵌套其他的数据类型.一个散列类型键可以包含至多2^32-1个字段. 一.介绍 散列类型适合存储对象:使用对象类别和ID构成键名,使用字段表示对象的属性,而字段值则存储属性值. 如果要关系数据中存储汽车对象: 数据是以二维表的形式存储的,这就要求所有的记录都有同样的属性,无法单独为某条记录增减属性.如果想要为ID为1的汽车增加生产日期属性,就需要把数据表更改

Redis研究(十二)—数据复制

在上一节中我们写了Redis的数据持久化 http://blog.csdn.net/wtyvhreal/article/details/42916503 通过持久化功能,Redis保证了即使在服务器重启的情况下也不会损失(或少量损失)数据.但是由于数据是存储在一台服务器上的,如果这台服务器的硬盘出现故障,也会导致数据丢失.为了避免单点故障,我们希望将数据库复制多个副本以部署在不同的服务器上,即使有一台服务器出现故障其他服务器依然可以继续提供服务.这就要求当一台服务器上的数据库更新后,可以自动将更

Redis研究(十四)—管理工具

工欲善其事,必先利其器.在使用Redis的时候如果能够有效利用Redis的各种管理工具,将会大大方便开发和管理. 一. redis-cli 相信大家对redis-cli已经很熟悉了,作为Redis自带的命令行客户端,你可以从任何安装有Redis的服务器中找到它,所以对于管理Redis 而言redis-cli是最简单实用的工具.redis-cli可以执行大部分的Redis命令,包括查看数据库信息的INFO命令,更改数据库设置的 CONFIG命令和强制进行RDB快照的SAVE命令等,下面会介绍几个管

Redis研究(十五)—任务队列

在网站开发中,当页面需要进行如发送邮件.复杂数据运算等耗时较长的操作时会阻塞页面的渲染.为了避免用户等待太久,应该使用独立的线程来完成这类操作. 不过一些编程语言或框架不易实现多线程,这时很容易就会想到通过其他进程来实现.设想有一个进程能够完成发邮件的功能,那么在页面中只需要想办法通知这个 进程向指定的地址发送邮件就可以了. 通知的过程可以借助任务队列来实现.任务队列顾名思义,就是“传递任务的队列”.与任务队列进行交互的实体有两类,一类是生产者(producer),一类是消费者(consumer

Redis研究(十三)—安全和通信协议

一.安全 Redis的作者Salvatore Sanfilippo曾经发表过Redis宣言,其中提到Redis以简洁为美.同样在安全层面Redis也没有做太多的工作. 1.可信的环境       Redis的安全设计是在“Redis运行在可信环境”这个前提下做出的,在生产环境运行时不能允许外界直接连接到Redis服务器上,而应该通过应用程序进行中转,运行在可信的环境中是保证Redis安全的最重要方法. Redis的默认配置会接受来自任何地址发送来的请求,即在任何一个拥有公网IP的服务器上启动Re

Redis研究-3.1 数据结构之链表

我们知道,数据结构中,链表的最大好处就是能高效的实现动态增.删.改,缺点就是遍历访问比较慢,因此,在Redis中,很多功能的底层实现都是基于链表的,因为Redis是基于C语言来写的,所以只能自己实现自己的链表结构.对于一个常规的双向链表节点,我们通常使用下面的方式来定义: typedef struct Node{ void *value; struct Node *prev; struct Node *next; }Node; Redis中,在adlist.h中也是这样子定义的 typedef

(转)Redis研究(一)—简介

http://blog.csdn.net/wtyvhreal/article/details/41855327 Redis是一个开源的高性能键值对数据库.它通过提供多种键值数据类型来适应不同场景下的存储需求,并借助许多高层级的接口使其可以胜任如缓存.队列系统等不同的角色. 1.1历史和发展 2008年,意大利一家创业公司Merzia的创始人Salvatore Sanfilippo为了避免MySQL的低性能,亲自定做一个数据库,并于2009年开发完成,这个就是redis. 短短几年,用户数据量猛增

Redis研究(十六)—发布/订阅模式

在上一篇中我们写了Redis的任务队列. 除了实现任务队列外,Redis还提供了一组命令可以让开发者实现"发布/订阅"(publish/subscribe)模式."发布/订阅"模式同样可以实现进程间的消息传递,其原理是这样的: "发布/订阅"模式中包含两种角色,分别是发布者和订阅者.订阅者可以订阅一个或若干个频道(channel),而发布者可以向指定的频道发送消息,所有订阅此频道的订阅者都会收到此消息. 发布者发布消息的命令是PUBLISH,用法

Redis研究(八)—有序集合类型 1

一.介绍 sorted set为集合中的每个元素都关联了一个分数,所以可以获得分数最高或者最低的前N个元素,获得指定分数范围内的元素等与分数有关的操作.虽然集合中每个元素都是不同的,但是他们的分数却可以相同. 有序集合类型与列表类型有些相似 (1)二者都是有序的 (2)二者都可以获得某一个范围的元素. 但是二者有很大的区别 (1)列表通过链表实现,获取两端数据速度快,访问中间数据速度慢. (2)有序集合类型使用散列表和跳跃表实现,获取中间数据也很快(时间复杂度O(log(N))). (3)列表不