1.Redis Java client
关于Redis Java客户端的demo可以参考我的例子:http://blog.csdn.net/caicongyang/article/details/50642979
2.Redis事务(测试结论)
1). 在Redis事务中的所有命令都将会被串行化的顺序执行(既单线程),事务执行期间,Redis不会再为其它客户端的请求提供任何服务,从而保证了事物中的所有命令被原子的执行。
2). 和关系型数据库中的事务相比,在Redis事务中如果有某一条命令执行失败,其后的命令仍然会被继续执行。
2). 和关系型数据库中的事务相比,在Redis事务中如果有某一条命令执行失败,其后的命令仍然会被继续执行。
3).调用jedis.watch(…)方法来监控key,如果调用后key值发生变化,则整个事务会执行失败。
3.命令行测试
MULTI/EXEC/DISCARD/WATCH
2.1成功执行事务
#初始化值 127.0.0.1:6379> set num 20 OK #开启事务 127.0.0.1:6379> multi OK #将num增加1,可以看到redis并没有立即执行,而是加入了队列中 127.0.0.1:6379> incr num QUEUED #将num减去1,同样可以看到redis并没有立即执行,而是加入了队列中 127.0.0.1:6379> decr num QUEUED #提交执行,看到两次执行的结果 127.0.0.1:6379> exec 1) (integer) 21 2) (integer) 20 #最终确认数值正确为20 127.0.0.1:6379> get num "20"
2.2失败执行事务
#初始化值 127.0.0.1:6379> set num 15 OK #开启事务 127.0.0.1:6379> multi OK #将caicongyang减去1,可以看到redis并没有立即执行,而是加入了队列中 127.0.0.1:6379> decr caicongyang QUEUED #此命令为list的命令,执行应该报错! 127.0.0.1:6379> lpop caicongyang QUEUED #将caicongyang增加1,可以看到redis并没有立即执行,而是加入了队列中 127.0.0.1:6379> incr caicongyang QUEUED #执行结果,看到lpop 命令出错,其他的都正常执行 127.0.0.1:6379> exec 1) (integer) 14 2) (error) WRONGTYPE Operation against a key holding the wrong kind of value 3) (integer) 15 #最终结果也符合预期 127.0.0.1:6379> get caicongyang "15"
2.3回滚
#初始化 127.0.0.1:6379> set num 10 OK #开启事务 127.0.0.1:6379> multi OK #自增加 127.0.0.1:6379> incr num QUEUED #回滚 127.0.0.1:6379> discard OK #最终结果正确 127.0.0.1:6379> get num "10" 127.0.0.1:6379>
3.Jedis测试demo
package com.caicongyang.redis; import java.util.List; import org.junit.Test; import redis.clients.jedis.Jedis; import redis.clients.jedis.Pipeline; import redis.clients.jedis.Transaction; public class JedisAdvanceFeaturesDemo { /** * 回滚测试 */ @Test public void testTransaction(){ Jedis jedis = new Jedis("192.168.150.137",6379); //---exec 执行事务队列内命令------------- Transaction t = jedis.multi();//开始事务 t.set("husband", "Tom"); t.set("wife", "Mary"); t.exec();//执行事务 //------discard 取消执行事务内命令--------- Transaction t2 = jedis.multi(); t2.set("test", "0"); t2 = jedis.multi(); t2.set("test", "1"); t2.discard(); String husband = jedis.get("husband"); String wife = jedis.get("wife"); String test = jedis.get("test"); System.out.println("husband:" + husband); System.out.println("wife:" + wife); System.out.println("test:" + test); //null 原因:开启事务后未提交,则无结果 jedis.close(); } /** * 测试watch * @throws Exception */ @Test public void testWatch() throws Exception{ Jedis jedis = new Jedis("192.168.150.137",6379); jedis.set("caicongyang", "goodboy"); jedis.watch("caicongyang"); Thread.sleep(3000L); new Thread(new Runnable() { @Override public void run() { Jedis j1 = new Jedis("192.168.150.137",6379); Transaction multi = j1.multi(); multi.set("caicongyang", "good"); multi.exec(); System.out.println(j1.get("caicongyang"));//结果是:boy j1.close(); } }).start(); //未执行下面的事务;原因:我们调用jedis.watch(…)方法来监控key,如果调用后key值发生变化,则整个事务不会执行。 Transaction multi = jedis.multi(); multi.set("caicongyang", "boy"); List<Object> list = multi.exec(); //事务结果:异常应该上面的提交没有执行 System.out.println(list.get(0).toString()); //NullPointerExecption String result = jedis.get("caicongyang"); System.out.println(result); //结果是:boy } /** * 持久化测试 */ @Test public void testPersis(){ Jedis jedis = new Jedis("192.168.150.137",6379); jedis.set("ccy", "handsome boy"); jedis.persist("ccy"); //重新启动机器依然存在 String value = jedis.get("ccy"); System.out.println(value); jedis.close(); } /** * 测试管道 */ @Test public void testPipelined(){ Jedis jedis = new Jedis("192.168.150.137",6379); Pipeline pipeline = jedis.pipelined(); long start = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { pipeline.set("p" + i, "p" + i); } //异步返回结果 List<Object> results = pipeline.syncAndReturnAll(); long end = System.currentTimeMillis(); System.out.println("Pipelined SET: " + ((end - start)/1000.0) + " seconds"); //10000次插入仅需不到1秒 System.out.println(results.size()); jedis.disconnect(); } }
更多多线程精彩内容请继续关注我的博客:http://blog.csdn.net/caicongyang
记录与分享,你我共成长 -fromcaicongyang
相关推荐
此外,Redis还提供了事务(Transactions)、发布/订阅(Pub/Sub)模式、主从复制、持久化(包括RDB和AOF两种方式)以及地理空间索引等高级功能。 在"redis缓存知识分享.pptx"中,可能详细介绍了如何利用Redis的缓存...
2. **Pipeline与Transaction**:为了提高批量操作的性能,Redis支持Pipeline(管道)和Transaction(事务)。Pipeline允许一次性发送多个命令,减少网络往返时间;Transaction则确保一组命令的原子性执行。测试时,...
4. **事务处理**:Redis支持事务,可以通过`multi()`, `exec()`来开始和执行一个事务。 5. **发布/订阅**:如果使用Redis作为消息中间件,可以使用`publish()`和`subscribe()`进行消息的发布和订阅。 6. **关闭...
【Redis事务】 Redis事务是Redis数据库中提供的一种确保数据操作原子性的机制,它允许用户在一个操作序列中执行多条命令,这些命令会被串行化并按顺序执行,以保证在并发环境下的数据一致性。事务的开启是通过`MULTI...
以下是对"redis简单测试"这一主题的详细说明。 1. **Redis简介** Redis是一个开源(BSD许可),内存中的数据结构存储系统,可以作为数据库、缓存和消息中间件使用。它支持多种数据结构,如字符串、哈希、列表、...
在描述中提到的"java测试代码"是指利用Java语言编写的示例代码,这些代码通常包含连接Redis、执行命令、读写数据等操作,有助于学习者快速理解和应用Redis。Java的Jedis是常用的Redis客户端库,它提供了一系列API,...
2. **Jedis的使用**:Jedis作为Java语言与Redis交互的客户端,提供了连接管理、命令执行、事务处理等功能。使用Jedis,开发者可以通过简单的Java代码执行Redis的各种操作,例如设置和获取键值、执行pipeline、订阅...
在本文中,我们将深入探讨Redis的性能测试,同时与CoolHash和SqlServer进行对比,以了解它们在不同场景下的表现。我们将通过一个小例子来展示测试过程,并提供相关的源码和jar包供读者参考。 1. Redis性能特性: ...
此外,Redis还支持事务、发布/订阅、lua脚本等功能,可以根据需求灵活使用。 在测试部分,我们可以创建JUnit测试类,模拟真实环境下的存取数据和查询,确保Redis集成功能的正确性。例如: ```java @Test public ...
在本文中,我们将深入探讨Redis的基础知识,测试代码的重要性以及如何进行有效的Redis测试。 Redis作为一个内存数据存储系统,其主要特点是速度快,支持丰富的数据结构如字符串、哈希、列表、集合和有序集合。这些...
6. **事务处理**:Redis支持简单的事务,通过`MULTI`、`EXEC`命令组合可以保证一组操作的原子性。 7. **发布/订阅模式**:Redis还提供了发布/订阅(Pub/Sub)功能,可以实现消息传递,适合构建实时消息系统。 8. *...
7. **Redis的并发控制**:虽然Redis是单线程模型,但可以通过事务(Transaction)、Lua脚本等机制实现一定程度的并发控制。比如,使用Lua脚本可以在服务器端原子性地执行一系列操作,避免了客户端的多次网络通信。 ...
`jedis-2.7.3`是Java操作Redis的客户端库,它支持多种Redis命令,包括数据结构如字符串、哈希、列表、集合、有序集合的操作,以及发布/订阅、事务、lua脚本等功能。Jedis提供了丰富的API,让开发者能够方便地在Java...
除了基本的数据交互功能,"jmeter-plugins-redis2"可能还提供了其他高级特性,如事务处理、管道传输等,这些都能进一步提高测试效率和数据一致性。同时,为了方便日志记录和结果分析,插件可能也支持将测试结果直接...
在 `redis测试` 文件中,可能包含了使用 Redistemplate 进行的各种测试,比如设置和获取键值、检查数据类型、执行事务、测试过期时间等功能的测试用例。这些测试有助于确保 Redis 操作的正确性和性能。 总结来说,...
Redis 的优点是高性能、低延迟、支持事务、支持 Pub/Sub 消息队列等。 Redis 和 Memcached 都是高性能的缓存系统,但是它们在设计理念和实现机制上有所不同。Memcached 是一个简单的键值存储系统,使用哈希表来存储...
Java连接Redis是一个常见的任务,特别是在开发分布式应用时。Redis是一个高性能的键值数据库,而Java作为后端开发的主流语言,提供了多种方式来与Redis进行交互。本篇将详细介绍如何在Java项目中使用jar包来连接...
6. **命令行模拟**:虽然以图形界面为主,但可能还包含一个命令行模拟器,允许用户输入Redis命令,方便测试和调试。 7. **性能监控**:高级版本的RedisClient可能提供服务器状态监视,包括内存使用、命令执行速率、...
24、怎么测试 Redis 的连通性? 25、Redis 中的管道有什么用? 26、怎么理解 Redis 事务? 27、Redis 事务相关的命令有哪几个? 28、Redis key 的过期时间和永久有效分别怎么设置? 29、Redis 如何做内存优化? 30、...
3. **Redis事务**:Redis提供了一种简单的事务机制,允许用户在一个操作序列中执行多个命令,并确保它们要么全部成功,要么全部失败。这通过`MULTI`、`EXEC`命令实现。 4. **Redis持久化**:为了防止数据丢失,...