springMVC整合jedis+redis
http://www.cnblogs.com/zhengbn/p/4140549.html
前两天写过 springMVC+memcached 的整合,我从这个基础上改造一下,把redis和springmvc整合到一起。
和memcached一样,redis也有java专用的客户端,官网推荐使用的是:jedis。
看了一部分资料,大家推荐使用 spring-data-redis (spring在jedis的基础上又包装了一层),但是实际中感觉写起来有点麻烦,不如原生态的jedis好用。
所以我利用spring的构造注入做了一个springmvc整合jedis的例子。
先了解下redis吧,这些资料袋都是从网上看到的:

Redis使用c语言编写,面向“键/值”对类型数据的分布式NoSql数据库系统。 目前提供五中数据类型 string(字符串) list(链表) Hash(哈希) set(集合) zset(sorted set 有序集合),有2中编码类型:ziplist,skiplist,当zset中数据较多时,将会被重构为skiplist。 默认端口6379先写一个Test类,测一下redis的基本数据类型和jedis的一些常用方法。以下的测试方法也都是从网上看到的,只不过为了验证是否准确以及jar包版本的问题,我自己亲自敲了一遍。
public class Test {
public static void main(String[] args) {// Jedis js = new Jedis("127.0.0.1", 6379);
// js.set("key001", "redis001");// String val = js.get("key001");// System.out.println(val);// js.del("key001");
/**************************测试Redis的数据类型**************************/
/** * list */// js.rpush("list1", "aaaaaaaaaaaaaaaaaaaaaa");// js.rpush("list1", "bbbbbbbbbbbbbbbbbbbbbb");// js.rpush("list1", "ccccccccccccccccccccc");// js.rpush("list1", "dddddddddddddd");// List<String> vals = js.lrange("list1", 0, -1);// for (int i = 0; i < vals.size(); i++) {// System.out.println(vals.get(i));// }
/** * set 无须唯一 */// js.sadd("s1", "顺序3");// js.sadd("s1", "a");// js.sadd("s1", "b");// js.sadd("s1", "1");// js.sadd("s1", "蛤蛤蛤");// js.sadd("s1", "2");// js.sadd("s1", "so waht?");// js.sadd("s1", "%^");// js.sadd("s1", "顺序1");// js.sadd("s1", "乱码吗?");// js.sadd("s1", "顺序2");// Set<String> s = js.smembers("s1");// for (String string : s) {// System.out.println(s);// }// js.srem("s1", "蛤蛤蛤");
/** * zset(sorted set 有序集合) * 有2中编码类型:ziplist,skiplist,当zset中数据较多时,将会被重构为skiplist */// js.zadd("zs", 92, "张三1");// js.zadd("zs", 93, "张三7");// js.zadd("zs", 94, "张三5");// js.zadd("zs", 87, "张三9");// js.zadd("zs", 66, "张三");// js.zadd("zs", 19, "张三0");// Set<String> sets = js.zrange("zs", 0, -1);// for (String string : sets) {// System.out.println(sets);// }
/** * Hash */// Map m = new HashMap();// m.put("1", "t");// m.put("2", "ttt");// m.put("username", "老王");// m.put("password", "123456");// m.put("age", "79");// m.put("sex", "man");// js.hmset("m", m); // List<String> v = js.hmget("m", new String[]{"username","age"});// List<String> v1 = js.hmget("m", "sex");// System.out.println(v);// System.out.println(v1);// js.hdel("m", "username");//删除map中的某一个键的键值对
/**************************事务控制**************************/
/** * 事务方式(Transactions) * 他主要目的是保障,一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令。 * * 我们调用jedis.watch(…)方法来监控key,如果调用后key值发生变化,则整个事务会执行失败。 * 另外,事务中某个操作失败,并不会回滚其他操作。这一点需要注意。 * 还有,我们可以使用discard()方法来取消事务。 */// Jedis js1 = new Jedis("127.0.0.1", 6379);// long s = System.currentTimeMillis();// Transaction tx = js1.multi();// for (int i = 0; i < 99999; i++) {// tx.set("keyttt"+i, "valttt"+i);// }// List<Object> res= tx.exec();// long e = System.currentTimeMillis();// System.out.println((e-s)/1000.0+"秒"); //System.out.println(res);// js1.disconnect();
/**************************管道**************************/ /** * 管道(Pipelining) * 有时,我们需要采用异步方式,一次发送多个指令,不同步等待其返回结果。 * 这样可以取得非常好的执行效率。这就是管道 */// Jedis js2 = new Jedis("127.0.0.1", 6379);// long s = System.currentTimeMillis();// Pipeline pe = js2.pipelined();// for (int i = 0; i < 9999; i++) {// pe.set("keya"+i, "valuea"+i);// }// List<Object> l = pe.syncAndReturnAll();// long e = System.currentTimeMillis();// System.out.println((e-s)/1000.0+"秒");// js2.disconnect();
/**************************管道中调用事务**************************/ /** * 管道中调用事务 * 在用法上看,管道中包含了事务 */
// Jedis js3 = new Jedis("127.0.0.1", 6379);// long s = System.currentTimeMillis();// Pipeline pe = js3.pipelined();// pe.multi();// for (int i = 0; i < 9999; i++) {// pe.set("keybb"+i, "valuebb"+i);// }// pe.exec();// List<Object> l = pe.syncAndReturnAll();// long e = System.currentTimeMillis();// System.out.println((e-s)/1000.0+"秒");// js3.disconnect();
/**************************分布式直连同步调用**************************/ /** * 分布式直连同步调用 * 线程不安全的,不建议在线程池中使用直连 */// List<JedisShardInfo> shards = Arrays.asList(// new JedisShardInfo("localhost",6379),// new JedisShardInfo("localhost",6380));// ShardedJedis sharding = new ShardedJedis(shards);// long start = System.currentTimeMillis();// for (int i = 0; i < 100000; i++) {// String result = sharding.set("sn" + i, "n" + i);// }// long end = System.currentTimeMillis();// System.out.println("Simple@Sharing SET: " + ((end - start)/1000.0) + " seconds");// sharding.disconnect();
/**************************分布式直连同步调用**************************/ /** * 分布式直连异步调用 * 线程不安全的,不建议在线程池中使用直连 */// List<JedisShardInfo> shards = Arrays.asList(// new JedisShardInfo("localhost",6379),// new JedisShardInfo("localhost",6380));// ShardedJedis sharding = new ShardedJedis(shards);// ShardedJedisPipeline pipeline = sharding.pipelined();// long start = System.currentTimeMillis();// for (int i = 0; i < 100000; i++) {// pipeline.set("sp" + i, "p" + i);// }// List<Object> results = pipeline.syncAndReturnAll();// long end = System.currentTimeMillis();// System.out.println("Pipelined@Sharing SET: " + ((end - start)/1000.0) + " seconds");// sharding.disconnect();
/**************************分布式连接池同步调用**************************/ /** * 同步方式 */// List<JedisShardInfo> shards = Arrays.asList(// new JedisShardInfo("localhost",6379),// new JedisShardInfo("localhost",6380));//// ShardedJedisPool pool = new ShardedJedisPool(new JedisPoolConfig(), shards);//// ShardedJedis one = pool.getResource();//// long start = System.currentTimeMillis();// for (int i = 0; i < 100000; i++) {// String result = one.set("spn" + i, "n" + i);// }// long end = System.currentTimeMillis();// pool.returnResource(one);// System.out.println("Simple@Pool SET: " + ((end - start)/1000.0) + " seconds");//// pool.destroy(); //
/**************************分布式连接池异步调用**************************/ /** * 异步方式 */// List<JedisShardInfo> shards = Arrays.asList(// new JedisShardInfo("localhost",6379),// new JedisShardInfo("localhost",6380));//// ShardedJedisPool pool = new ShardedJedisPool(new JedisPoolConfig(), shards);//// ShardedJedis one = pool.getResource();//// ShardedJedisPipeline pipeline = one.pipelined();//// long start = System.currentTimeMillis();// for (int i = 0; i < 100000; i++) {// pipeline.set("sppn" + i, "n" + i);// }// List<Object> results = pipeline.syncAndReturnAll();// long end = System.currentTimeMillis();// pool.returnResource(one);// System.out.println("Pipelined@Pool SET: " + ((end - start)/1000.0) + " seconds");// pool.destroy();
/**************************其他**************************/
/** * 清空所有 */// js.flushAll();
/** * 销毁链接 */// js.disconnect();
}
注意jedis是redis的一个客户端,是个jar包,不要搞混了……
springMVC整合jedis+redis的更多相关文章
- springMVC整合jedis+redis,以注解形式使用
前两天写过 springMVC+memcached 的整合,我从这个基础上改造一下,把redis和springmvc整合到一起. 和memcached一样,redis也有java专用的客户端,官网推荐 ...
- springmvc整合redis架构搭建实例
新换环境,又有新东西可以学习了,哈皮! 抽空学习之余看了一下redis,个人对Springmvc的爱是忠贞不渝,所以整理了一下Springmvc整合redis的环境搭建.分享学习. 第一步: 创建ma ...
- redis集群配置,spring整合jedis,缓存同步
前台的商品数据(图片等加载缓慢)查询,先从redis缓存查询数据. redis是一个nosql数据库,内存版数据库,读取速度11w/s.本身具有内存淘汰机制,是单线程服务器(分时操作系统),线程安全. ...
- springmvc+spring-security+mybatis +redis +solar框架抽取
参考文章:Spring MVC 3 深入总结: 第二章 Spring MVC入门 —— 跟开涛学SpringMVC 参考博客:http://www.cnblogs.com/liukemng/categ ...
- Redis-07.Spring Data整合Jedis
Spring整合Jedis 1.单实例(想节约时间的请直接拖到下面跳过1.2部分) step1:毫无疑问,首先需要在pom.xml中配置Jedis依赖 <dependency> <g ...
- 六:Dubbo与Zookeeper、SpringMvc整合和使用
DUBBO与ZOOKEEPER.SPRINGMVC整合和使用 互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架 ...
- Mybatis整合(Redis、Ehcache)实现二级缓存
目的: Mybatis整合Ehcache实现二级缓存 Mybatis整合Redis实现二级缓存 Mybatis整合ehcache实现二级缓存 ssm中整合ehcache 在POM中导入相关依赖 < ...
- springMVC+Spring+Mybatis+Redis
SPRINGMVC+MYBATIS+SPRING+REDIS 只作参考,以防忘记使用! mybatis的配置文件: <?xml version="1.0" encoding= ...
- (转)Dubbo与Zookeeper、SpringMVC整合和使用
原文地址: https://my.oschina.net/zhengweishan/blog/693163 Dubbo与Zookeeper.SpringMVC整合和使用 osc码云托管地址:http: ...
随机推荐
- 关于 ASP.NET 验证码
Session["CheckCode"] 这个..不懂神马意思.. .创建一个用户控件 用户名:TextBox 密码: TextBox 验证码:TextBox 验证码图片 < ...
- Codeforces 441D Valera and Swaps(置换群)
题意: 给定一个1~n的排列(n<=3000),输出字典序最小且次数最少的交换操作,使得操作后的排列可以通过最少m次交换得到排列[1,2,...n] Solution: 可以将排列的对应关系看做 ...
- 用连接池提高Servlet访问数据库的效率
Java Servlet作为首选的服务器端数据处理技术,正在迅速取代CGI脚本.Servlet超越CGI的优势之一在于,不仅多个请求可以共享公用资源,而且还可以在不同用户请求之间保留持续数据.本文介绍 ...
- 关于点击空白关闭弹窗的js写法推荐?
$(document).mouseup(function(e){ var _con = $(' 目标区域 '); // 设置目标区域 ){ // Mark 1 some code... // 功能代码 ...
- YII 小部件 yii小部件查看方法 小物件做的表单
要使用小部件,可以先到总文件去找 framework/yiilite文件里面搜索“CAtiveForm” (如果觉得小部件的radio布局有点难看,可以在外面定义,具体可以在控制器里面定义) 如下 ...
- Shell 控制并发
方法1: #!/bin/bash c=0 for i in `seq -w 18 31`;do while [ $c -ge 3 ];do c=$(jobs -p |wc -w) sleep 1s d ...
- APUE《UNIX 环境高级编程》读后感
今天终于把APUE前17章全部看完了,基本上主要知识就在这些章节里. 之前看完<unix/linux编程实践教程>时,有一种豁然开朗.心旷神怡的感觉,在代码级别了解了linux很多系统机制 ...
- 写个自己的Xcode4插件
推荐:http://onevcat.com/2013/02/xcode-plugin/ 刚写iOS程序的时候就知道Xcode支持第三方插件,比如ColorSense等很实用的插件,但Xcode的插 ...
- ThinkPHP 3.2 模板使用函数
{$name|md5|strtoupper|substr=0,3} 编译后的结果是: <?php echo (substr(strtoupper(md5($name)),0,3));?> ...
- [待续]Async in C# 1
异步.异步是在.net .45里面提供的一个新的方法 它主要用在.三个方面 1.网络访问 2.磁盘访问 3.延迟很长时间的步骤 它主要有2个关键字 Async Await Async 怎么工作 d ...