标题 :

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客户端的使用的更多相关文章

  1. StackExchange.Redis客户端读写主从配置,以及哨兵配置。

    今天简单分享一下StackExchange.Redis客户端中配置主从分离以及哨兵的配置. 关于哨兵如果有不了解的朋友,可以看我之前的一篇分享,当然主从复制文章也可以找到.http://www.cnb ...

  2. c#实现redis客户端(一)

    最近项目使用中要改造redis客户端,看了下文档,总结分享一下. 阅读目录: 协议规范 基础通信 状态命令 set.get命令 管道.事务 总结 协议规范 redis允许客户端以TCP方式连接,默认6 ...

  3. 使用StackExchange.Redis客户端进行Redis访问出现的Timeout异常排查

    问题产生 这两天业务系统在redis的使用过程中,当并行客户端数量达到200+之后,产生了大量timeout异常,典型的异常信息如下: Timeout performing HVALS Parser2 ...

  4. Redis客户端之Spring整合Jedis,ShardedJedisPool集群配置

    Jedis设计 Jedis作为推荐的java语言redis客户端,其抽象封装为三部分: 对象池设计:Pool,JedisPool,GenericObjectPool,BasePoolableObjec ...

  5. 从零开始写redis客户端(deerlet-redis-client)之路——第一个纠结很久的问题,restore引发的血案

    引言 正如之前的一篇博文,LZ最近正在从零开始写一个redis的客户端,主要目的是为了更加深入的了解redis,当然了,LZ也希望deerlet客户端有一天能有一席之地.在写的过程当中,LZ遇到了一个 ...

  6. Redis 客户端配置及示例

    一.redis自定义配置节点 <configSections> <section name ="RedisConfig" type="Amy.Toolk ...

  7. Redis客户端Java服务接口封装

    最近在学习Redis并集成到Spring中去,发现Spring的RedisTemplate并不好用,还没有MongoTemplate好用. 而且发现Jedis和ShardedJedis的方法非常多,覆 ...

  8. "Redis客户端连接数一直降不下来"的有关问题解决

    [线上问题] "Redis客户端连接数一直降不下来"的问题解决 前段时间,上线了新的 Redis缓存(Cache)服务,准备替换掉 Memcached. 为什么要将 Memcach ...

  9. spring整合redis客户端及缓存接口设计(转)

    一.写在前面 缓存作为系统性能优化的一大杀手锏,几乎在每个系统或多或少的用到缓存.有的使用本地内存作为缓存,有的使用本地硬盘作为缓存,有的使用缓存服务器.但是无论使用哪种缓存,接口中的方法都是差不多. ...

  10. 全球领先的redis客户端:SFedis

    零.背景 这个客户端起源于我们一个系统的生产问题. 一.问题的发生 在我们的生产环境上发生了两次redis服务端连接数达到上限(我们配置的单节点连接数上限为8000)导致无法创建连接的情况.由于这个系 ...

随机推荐

  1. Linux删除文件后磁盘目录不释放

    今天测试oracle数据库的时候,把表空间连带内容和数据文件一并删除了,但是删除之后,查看数据文件不存在了,但是目录的带下没有释放 SQL> drop tablespace users incl ...

  2. oracle dataguard搭建

    搭建前环境准备 1.查看主库的oracle的uid和gid并在备库创建用户 # 主库查看oracle $ id oracle uid=54321(oracle) gid=54321(oinstall) ...

  3. BAPI_PO_CHANGE

    这两天用BAPI更改采购订单,遇到了一些问题,最后调试解决了.记录如下吧.要修改的是采购订单的物料号和批次,在网上看到其它人写过关于 BAPI_PO_CHANGE的用法,但是具体问题还要具体分析啊. ...

  4. postgresql-12编译安装

    1 准备环境 修改yum源 mkdir -p /etc/yum.bak mv /etc/yum.repos.d/* /etc/yum.bak/ &&\ curl -o /etc/yum ...

  5. tail -f 在对文件进行动态追踪时失效的问题

    在我是用 tail -f file.txt 对这个文件进行动态追踪时: 我重新打开一个新的终端进行vim编辑这个文件并且保存 这是我们发现,tail -f file.txt'动态追踪的这个文件没有任何 ...

  6. ovs-ofctl命令

    用于监控和管理 OpenFlow 交换机. 1. 交换机管理命令 查看交换机信息: ovs-ofctl show s1  查看交换机流表: ovs-ofctl dump-tables s1 查看端口信 ...

  7. The Garbage Collection Handbook

    The Garbage Collection Handbook The Garbage Collection Handbook http://gchandbook.org/editions.html ...

  8. 石子游戏(nim游戏+按位考虑)

    题意 给\(n\)堆石子,每次最多可以从一堆中取\(x\)个,问你\(x = 1 ... n\)时的答案. 解法 经典\(nim\)游戏,找规律知\(sg[i] = i \ mod \ (x+1)\) ...

  9. python -m http.server 搭建一个简易web下载服务器

    在打vulnhub靶场的时候遇到的一个问题 目录 一.进到需要发送的安装包目录 二.开启http服务 三.访问服务器 一.进到需要发送的安装包目录 比如设置一个专门发送,传输的文件的文件夹,cmd命令 ...

  10. GeoMesa 环境搭建

    GeoMesa 环境搭建 版本 虚拟机安装 os centos7 Centos安装 CentOS安装Jdk并配置环境变量 hadoop.hbase环境部署 geomesa_hbase部署 geoser ...