4.Redis客户端的使用
标题 :
4.Redis客户端的使用
目录 :
Redis
序号 :
4
Console.WriteLine($"北京和天津之间的距离是:{distance}公里");
#### 事务
```csharp
Console.WriteLine(Environment.NewLine);
Console.WriteLine("----------------------事务----------------------");
string bookName = database.StringGet("bookName");
Console.WriteLine(bookName);
var transaction = database.CreateTransaction();
transaction.AddCondition(Condition.StringEqual("bookName", bookName));
Console.WriteLine("transaction begin");
//模拟开启另外一个客户端修改bookName的值,这时Condition.StringEqual("bookName", bookName) 条件就不满足,事务应当失败
var watingHandle = new ManualResetEvent(false);
Task.Factory.StartNew(() =>
{
var other = ConnectionMultiplexer.Connect(config).GetDatabase(0);
other.StringSet("bookName", "从入门到变黄");
Console.WriteLine("我是另外一个客户端,我已经将bookName的值修改为了:"+other.StringGet("bookName"));
watingHandle.Set();
});
watingHandle.WaitOne();
database.StringSet("bookName", "R语言从入门到实践");
var result = transaction.Execute();
Console.WriteLine("事务提交结果:" + result);
bookName = database.StringGet("bookName");
Console.WriteLine(bookName);

源码中,实际也是以队列方式执行.

- 我们在事务开启时,添加了条件.我们认为bookName的值在最后提交时应该没有被其他程序修改过
- 我们开启了另一个客户端修改了bookName的值, 最后我们在exec的时候,返回了失败.(因为bookName已经被其他程序修改了)
- 为什么transaction.Execute()返回了失败(其实这个失败,代表的是事务提交时指定的条件不满足),但是bookName的值还是被设置成了"R语言从入门到实践"。 这个就和redis的事务机制有关了,它不会回滚.所以
database.StringSet("bookName", "R语言从入门到实践");
这条语句还是被执行了.
关于回滚:
- 如果用命令行执行语句,如果语句本身语法有错误.事务会回滚.运行时错误不会回滚.
- 如果用客户端库,它会回滚(因为如果语法错误,你程序都编译不过).对于客户端库而言,它只存在运行时错误.
引用链接
[无]
4.Redis客户端的使用的更多相关文章
- StackExchange.Redis客户端读写主从配置,以及哨兵配置。
今天简单分享一下StackExchange.Redis客户端中配置主从分离以及哨兵的配置. 关于哨兵如果有不了解的朋友,可以看我之前的一篇分享,当然主从复制文章也可以找到.http://www.cnb ...
- c#实现redis客户端(一)
最近项目使用中要改造redis客户端,看了下文档,总结分享一下. 阅读目录: 协议规范 基础通信 状态命令 set.get命令 管道.事务 总结 协议规范 redis允许客户端以TCP方式连接,默认6 ...
- 使用StackExchange.Redis客户端进行Redis访问出现的Timeout异常排查
问题产生 这两天业务系统在redis的使用过程中,当并行客户端数量达到200+之后,产生了大量timeout异常,典型的异常信息如下: Timeout performing HVALS Parser2 ...
- Redis客户端之Spring整合Jedis,ShardedJedisPool集群配置
Jedis设计 Jedis作为推荐的java语言redis客户端,其抽象封装为三部分: 对象池设计:Pool,JedisPool,GenericObjectPool,BasePoolableObjec ...
- 从零开始写redis客户端(deerlet-redis-client)之路——第一个纠结很久的问题,restore引发的血案
引言 正如之前的一篇博文,LZ最近正在从零开始写一个redis的客户端,主要目的是为了更加深入的了解redis,当然了,LZ也希望deerlet客户端有一天能有一席之地.在写的过程当中,LZ遇到了一个 ...
- Redis 客户端配置及示例
一.redis自定义配置节点 <configSections> <section name ="RedisConfig" type="Amy.Toolk ...
- Redis客户端Java服务接口封装
最近在学习Redis并集成到Spring中去,发现Spring的RedisTemplate并不好用,还没有MongoTemplate好用. 而且发现Jedis和ShardedJedis的方法非常多,覆 ...
- "Redis客户端连接数一直降不下来"的有关问题解决
[线上问题] "Redis客户端连接数一直降不下来"的问题解决 前段时间,上线了新的 Redis缓存(Cache)服务,准备替换掉 Memcached. 为什么要将 Memcach ...
- spring整合redis客户端及缓存接口设计(转)
一.写在前面 缓存作为系统性能优化的一大杀手锏,几乎在每个系统或多或少的用到缓存.有的使用本地内存作为缓存,有的使用本地硬盘作为缓存,有的使用缓存服务器.但是无论使用哪种缓存,接口中的方法都是差不多. ...
- 全球领先的redis客户端:SFedis
零.背景 这个客户端起源于我们一个系统的生产问题. 一.问题的发生 在我们的生产环境上发生了两次redis服务端连接数达到上限(我们配置的单节点连接数上限为8000)导致无法创建连接的情况.由于这个系 ...
随机推荐
- gears-绕过rbash
0x00 信息收集 0x01 smb攻击 crunch 生成密码的一个软件 @%%,这个是给的密码参数. crunch 4 4 -t @%%, -o words 最小4位,最长 4位 fcrackzi ...
- linux登陆欢迎信息及命令提示符修改
登录信息修改 登陆信息显示数据 : /etc/issue and /etc/motd 登陆终端机的时候,会有几行提示的字符串,这些设置在/etc/issue里面可以修改,提示内容在/etc/motd中 ...
- python系统监控及邮件发送
python系统监控及邮件发送 #psutil模块是一个跨平台库,能轻松实现获取系统运行的进程和系统利用率 import psutil ...
- git的使用学习笔记--项目版本操作
一.使用场景 版本回退:上线失败--需要回退到上个版本 二.操作 先编辑 vim text.txt git status git add . 这个命令能看到所有的增加操作 git com ...
- GraphQL两年实战
https://mp.weixin.qq.com/s/XIQ-0kRhjCe2ubBuhnhlQA
- JAVAV EMAIL
package a; import java.util.Date;import java.util.Properties;import javax.mail.Authenticator;import ...
- spring restTemplate 进行http请求的工具类封装
本文为博主原创,未经允许不得转载: 1.对常用调用的方法进行封装: import org.springframework.http.HttpHeaders; import com.alibaba.fa ...
- ftp协议服务器与tinyhttp服务demo
https://www.jianshu.com/p/fb9fcb69efc9 ....... https://www.jianshu.com/p/e9a2e0755496 ============== ...
- CF401C
扯在前面 本题的英文翻译很有意思,很符合CF大多题的故事风格,但是luogu的翻译更过于直白易懂 如果让我看英文故事做题我怕我都不知道该怎么下手 正文 题意: 构造一个01序列,包含n个0,m个1要求 ...
- POJ2961_kmp
Period Time Limit: 3000MS Memory Limit: 30000KB 64bit IO Format: %I64d & %I64u Submit Status ...