spring-data-redis_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > spring-data-redis

spring-data-redis

 2017/9/18 15:33:34  jiandequn  程序员俱乐部  我要评论(0)
  • 摘要:Spring-data-redis使用1、maven依赖<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>${redis.client.version}</version></dependency><dependency><groupId>org
  • 标签:Spring
Spring-data-redis使用
1、maven依赖
class="java" name="code">
 <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>${redis.client.version}</version>
        </dependency>
<dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
            <version>${spring.data.redis}</version>
        </dependency>

2、spring配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
		<property name="hostName" value="${redis.host}" />
		<property name="port" value="${redis.port}" />
		<property name="poolConfig" ref="jedisPoolConfig" />
	</bean>
	<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
		<property name="maxTotal" value="10000" />
		<property name="maxIdle" value="100" />
		<property name="maxWaitMillis" value="10000" />
		<property name="testOnBorrow" value="true" />
	</bean>
	<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"
		p:connection-factory-ref="connectionFactory">
		<property name="keySerializer">
			<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
		</property>
		<property name="valueSerializer">
			<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
		</property>
	</bean>
	<bean id="stringRedisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate"
		p:connection-factory-ref="connectionFactory">
		<property name="keySerializer">
			<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
		</property>
		<property name="valueSerializer">
			<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
		</property>
	</bean>
</beans>	

3、redis引用代码:
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import com.ppfuns.video.core.util.ExceptionEnum;
import com.ppfuns.video.core.util.ExceptionGlobal;
import com.ppfuns.video.core.util.MessageUtil;


@Service
public class RedisService {

	@Autowired
	private RedisTemplate<String, String> redisTemplate;

	private Lock lock = new ReentrantLock();

	//******************************************String Ops **********************************************
	/**
	 * 
	* @Title: set 
	* @Description: 添加数据 
	* @param key
	* @param value   
	* @return void   
	* @throws
	 */
	public void set(final String key, final String value) {
		this.redisTemplate.execute(new RedisCallback<Long>() {
			@Override
			public Long doInRedis(RedisConnection connection) throws DataAccessException {
				connection.set(key.getBytes(), value.getBytes());
				return null;
			}
		});
	}

	/**
	 * 
	* @Title: append 
	* @Description: 追加数据 
	* @param key
	* @param value
	* @return   
	* @return long   
	* @throws
	 */
	public long append(final String key, final String value) {
		long sum = this.redisTemplate.execute(new RedisCallback<Long>() {
			@Override
			public Long doInRedis(RedisConnection connection) throws DataAccessException {
				return connection.append(key.getBytes(), value.getBytes());
			}
		});

		return sum;
	}

	/**
	 * 
	* @Title: set 
	* @Description: 添加带有过期时间的数据 
	* @param key
	* @param value
	* @param seconds   
	* @return void   
	* @throws
	 */
	public void set(final String key, final String value, final long seconds){
		this.redisTemplate.execute(new RedisCallback<Long>() {
			@Override
			public Long doInRedis(RedisConnection connection) throws DataAccessException {
				connection.setEx(key.getBytes(), seconds, value.getBytes());
				return null;
			}
		});
	}

	/***
	 * 
	* @Title: del 
	* @Description: 删除key下数据 
	* @param key
	* @return   
	* @return long   
	* @throws
	 */
	public long del(final String key) {
		long s = this.redisTemplate.execute(new RedisCallback<Long>() {
			@Override
			public Long doInRedis(RedisConnection connection) throws DataAccessException {
				long sum = connection.del(key.getBytes());
				return sum;
			}
		});

		return s;
	}

	/**
	 * 
	* @Title: del 
	* @Description: 删除数据keys数据 
	* @param keys
	* @return 返回删除数据size  
	* @return long   
	* @throws
	 */
	public long del(final String... keys){
		long s = this.redisTemplate.execute(new RedisCallback<Long>() {
			@Override
			public Long doInRedis(RedisConnection connection) throws DataAccessException {
				long sum = 0;
				for (String key : keys) {
					sum = sum + connection.del(key.getBytes());
				}

				return sum;
			}
		});

		return s;
	}

	/**
	 * 
	* @Title: get 
	* @Description: 获取数据 
	* @param key
	* @return   
	* @return String   
	* @throws
	 */
	public String get(final String key){
		String value = this.redisTemplate.execute(new RedisCallback<String>() {
			@Override
			public String doInRedis(RedisConnection connection) throws DataAccessException {
				if (connection.exists(key.getBytes())) {
					byte[] values = connection.get(key.getBytes());
					return redisTemplate.getStringSerializer().deserialize(values);
				}
				return null;
			}
		});
		return value;
	}

	/**
	 * 
	* @Title: size 
	* @Description: 获取key下size 
	* @param key
	* @return   
	* @return long   
	* @throws
	 */
	public long size(final String key){
		long s = this.redisTemplate.execute(new RedisCallback<Long>() {

			@Override
			public Long doInRedis(RedisConnection connection) throws DataAccessException {
				long sum = connection.sCard(key.getBytes());
				return sum;
			}
		});
		return s;

	}

	/**
	 * 
	* @Title: exist 
	* @Description: 是否存在key 
	* @param key
	* @return true/false  
	* @return boolean   
	* @throws
	 */
	public boolean exist(final String key){

		boolean b = this.redisTemplate.execute(new RedisCallback<Boolean>() {

			@Override
			public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
				boolean bool = connection.exists(key.getBytes());
				return bool;
			}
		});

		return b;
	}

	/**
	 * 
	* @Title: keys 
	* @Description: 获取keys 
	* @param pattern
	* @return   
	* @return Set<byte[]>   
	* @throws
	 */
	public List<String> keys(final String pattern){
		return this.redisTemplate.execute(new RedisCallback<List<String>>() {
			@Override
			public List<String> doInRedis(RedisConnection connection) throws DataAccessException {
				Set<byte[]> set = connection.keys(pattern.getBytes());
				List<String> list = new ArrayList<String>();
				for (byte[] b : set) {
					list.add(new String(b));
				}
				return list;
			}
		});
	}

	//******************************************List Ops**************************************************

	/**
	 * 
	* @Title: listSetR 
	* @Description: 左添加数据 
	* @param key
	* @param value
	* @return 添加数据size  
	* @return long   
	* @throws
	 */
	public long listSetR(final String key, final String value){
		return this.redisTemplate.boundListOps(key).rightPush(value);
	}

	/**
	 * 
	* @Title: listSetR 
	* @Description: 添加带有过期时间的数据 
	* @param key
	* @param value
	* @param seconds
	* @return   
	* @return long   
	* @throws
	 */
	public long listSetR(final String key, final String value, final long seconds){
		long sum = this.redisTemplate.boundListOps(key).rightPush(value);
		boolean bool = this.redisTemplate.boundListOps(key).expire(seconds, TimeUnit.SECONDS);
		if (bool) {
			return sum;
		}
		return 0;
	}

	/**
	 * 
	* @Title: listSetR 
	* @Description: 批量添加数据 
	* @param key
	* @param values
	* @return   
	* @return long   
	* @throws InterruptedException
	 */
	public long listSetR(final String key, final String... values) {
		try {
			lock.lockInterruptibly();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			return this.redisTemplate.opsForList().rightPushAll(key, values);
		} finally {
			lock.unlock();
		}

	}

	/**
	 * 
	* @Title: listSetR 
	* @Description: 带有过期时间的批量数据添加 
	* @param key
	* @param seconds
	* @param values
	* @return
	* @throws InterruptedException   
	* @return long   
	* @throws
	 */
	public long listSetR(final String key, final long seconds, final String... values) {
		try {
			lock.lockInterruptibly();
			long sum = 0;
			try {
				sum = this.redisTemplate.boundListOps(key).rightPushAll(values);
				boolean bool = this.redisTemplate.boundListOps(key).expire(seconds, TimeUnit.SECONDS);
				if (bool) {
					return sum;
				}
			} finally {
				lock.unlock();
			}
		} catch (InterruptedException e) {
			MessageUtil.sendMessage(ExceptionEnum.ERROR, "BlueRayCore.RedisService.listSetR", ExceptionGlobal.getExceptionInfo(e));
		}
		return 0;
	}

	/**
	 * 
	* @Title: listDel 
	* @Description: 删除数据 
	* @param key
	* @return   
	* @return boolean   
	* @throws
	 */
	public boolean listDel(final String key){
		this.redisTemplate.boundListOps(key).expire(1, TimeUnit.MILLISECONDS);
		try {
			Thread.sleep(2);
		} catch (InterruptedException e) {
			MessageUtil.sendMessage(ExceptionEnum.ERROR, "BlueRayCore.RedisService.listDel", ExceptionGlobal.getExceptionInfo(e));
		} finally {

		}
		return this.redisTemplate.boundListOps(key).persist();
	}

	/**
	 * 
	* @Title: listGet 
	* @Description: 获取集合数据 
	* @param key
	* @return   
	* @return String   
	* @throws
	 */
	public String listGet(final String key){
		return this.redisTemplate.boundListOps(key).leftPop();

	}

	/**
	 * 
	* @Title: listSize 
	* @Description: 获取集合大小 
	* @param key
	* @return   
	* @return long   
	* @throws
	 */
	public long listSize(final String key){
		return this.redisTemplate.boundListOps(key).size();
	}

}

发表评论
用户名: 匿名