首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Spring-data-redis: 事宜与pipeline

2013-06-25 
Spring-data-redis: 事务与pipeline??? 本文主要展示如何使用spring-data-redis编写事务和pipeline:?1.配

Spring-data-redis: 事务与pipeline

??? 本文主要展示如何使用spring-data-redis编写事务和pipeline:

?

1.配置文件:

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" default-autowire="byName"><bean id="jedisPoolConfig" value="32"></property><property name="maxIdle" value="6"></property><property name="maxWait" value="15000"></property><property name="minEvictableIdleTimeMillis" value="300000"></property><property name="numTestsPerEvictionRun" value="3"></property><property name="timeBetweenEvictionRunsMillis" value="60000"></property><property name="whenExhaustedAction" value="1"></property></bean><bean id="jedisConnectionFactory" destroy-method="destroy"><property name="poolConfig" ref="jedisPoolConfig"></property><property name="hostName" value="127.0.0.1"></property><property name="port" value="6379"></property><property name="password" value="0123456"></property><property name="timeout" value="15000"></property><property name="usePool" value="true"></property></bean><bean id="jedisTemplate" ref="jedisConnectionFactory"></property><property name="keySerializer"><bean name="code">package com.sample.redis.sdr;public class RedisClientTest {//private JsonRedisSeriaziler seriaziler;private RedisTemplate redisTemplate;public void setRedisTemplate(RedisTemplate redisTemplate) {this.redisTemplate = redisTemplate;}public void valueOperationSample(){ValueOperations<String, User> valueOper = redisTemplate.opsForValue();User suser = new User(1,"zhangsan",12);valueOper.set("user:" + suser.getId(),suser);System.out.println(valueOper.get("user:" + suser.getId()).getName());}public void listOperationSample(){User suser = new User(1,"zhangsan",12);ListOperations<String, User> listOper = redisTemplate.opsForList();listOper.leftPush("user:list", suser);//lpush,headlistOper.rightPush("user:list", suser);//rpush,tail}public void boundValueOperationSample(){User suser = new User(1,"zhangsan",12);BoundValueOperations<String, User> bvo = redisTemplate.boundValueOps("user:" + suser.getId());bvo.set(suser);bvo.expire(60, TimeUnit.MINUTES);}/** * 非连接池环境下,事务操作;对于sdr而言,每次操作(例如,get,set)都有会从pool中获取connection; * 因此在连接池环境下,使用事务需要注意。 */public void txUnusedPoolSample(){User suser = new User(1,"zhangsan",12);redisTemplate.watch("user:" + suser.getId());redisTemplate.multi();ValueOperations<String, User> tvo = redisTemplate.opsForValue();tvo.set("user:" + suser.getId(), suser);redisTemplate.exec();}/** * 在连接池环境中,需要借助sessionCallback来绑定connection */public void txUsedPoolSample(){SessionCallback<User> sessionCallback = new SessionCallback<User>() {@Overridepublic User execute(RedisOperations operations) throws DataAccessException {operations.multi();User user = new User(2,"lisi",32);String key = "user:" + user.getId();BoundValueOperations<String, User> oper = operations.boundValueOps(key);oper.set(user);oper.expire(60, TimeUnit.MINUTES);operations.exec();return user;}};redisTemplate.execute(sessionCallback);}/** * pipeline : 1,正确使用方式 */public void pipelineSample(){final byte[] rawKey = redisTemplate.getKeySerializer().serialize("user_total");//pipelineRedisCallback<List<Object>> pipelineCallback = new RedisCallback<List<Object>>() {@Overridepublic List<Object> doInRedis(RedisConnection connection) throws DataAccessException {connection.openPipeline();connection.incr(rawKey);connection.incr(rawKey);return connection.closePipeline();}};List<Object> results = (List<Object>)redisTemplate.execute(pipelineCallback);for(Object item : results){System.out.println(item.toString());}}//pipeline:备用方式public void pipelineSampleX(){byte[] rawKey = redisTemplate.getKeySerializer().serialize("user_total");RedisConnectionFactory factory = redisTemplate.getConnectionFactory();RedisConnection redisConnection = RedisConnectionUtils.getConnection(factory);List<Object> results;try{redisConnection.openPipeline();redisConnection.incr(rawKey);results = redisConnection.closePipeline();}finally{RedisConnectionUtils.releaseConnection(redisConnection, factory);}if(results == null){return;}for(Object item : results){System.out.println(item.toString());}}/** * list/set排序,注意排序是根据value值的“字符”特性排序,如果value是java-object字节流,将不会有效 */public void sort(){ListOperations<String, String> listOper = redisTemplate.opsForList();String listKey = "user:list";listOper.leftPush(listKey, "zhangsan");listOper.leftPush(listKey, "lisi");listOper.leftPush(listKey, "wanger");SortQueryBuilder<String> builder = SortQueryBuilder.sort(listKey);builder.alphabetical(true);//对字符串使用“字典顺序”builder.order(Order.DESC);//倒序builder.limit(0, 2);//builder.limit(new Range(0, 2));List<String> results = redisTemplate.sort(builder.build());for(String item : results){System.out.println(item);}}}

?

热点排行