`
kanpiaoxue
  • 浏览: 1789596 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Spring data redis的简单应用

 
阅读更多

这里给出了一个简单封装的 RedisService 服务类。

package com.wanmei.redis.test.service;

import java.util.Collection;
import java.util.Set;

/**
 * <pre>
 * @author xuepeng<br>
 * @date 2013年12月25日<br>
 * @Copyright wanmei.com [2004-2013]<br>
 * @Description redis 的服务接口
 * </pre>
 */
public interface RedisService {
	/**
	 * <pre>
	 * 通过key删除
	 * @param keys
	 * @return 被删除的记录数
	 * </pre>
	 */
	public long delete(String... keys);

	/**
	 * <pre>
	 * 通过keys删除
	 * @param keys
	 * @return 被删除的记录数
	 * </pre>
	 */
	public long delete(Collection<String> keys);

	/**
	 * <pre>
	 *  @param key
	 *  @param value
	 *  @param activeTime 秒
	 *  @return 添加key value 并且设置存活时间
	 * </pre>
	 */
	public boolean set(byte[] key, byte[] value, long activeTime);

	/**
	 * <pre>
	 * @param key
	 * @param value
	 * @param activeTime 秒
	 * @return 添加key value 并且设置存活时间
	 * </pre>
	 */
	public boolean set(String key, String value, long activeTime);

	/**
	 * <pre>
	 *  @param key
	 *  @param value
	 *  @return 添加key value
	 * </pre>
	 */
	public boolean set(String key, String value);

	/**
	 * <pre>
	 *  @param key
	 *  @param value
	 *  @return 添加key value
	 * </pre>
	 */
	public boolean set(byte[] key, byte[] value);

	/**
	 * <pre>
	 * @param key
	 * @return 获得value
	 * </pre>
	 */
	public String get(String key);

	/**
	 * <pre>
	 * @param pattern
	 * @return 通过正则匹配keys
	 * </pre>
	 */
	public Set<String> matchKeys(String pattern);

	/**
	 * <pre>
	 * @param key
	 * @return 检查key是否已经存在
	 * </pre>
	 */
	public boolean exists(String key);

	/**
	 * <pre>
	 * @return 清空所有数据
	 * </pre>
	 */
	public boolean flushDB();

}

 

 

package com.wanmei.redis.test.service.impl;

import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Set;

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.wanmei.redis.test.service.RedisService;

/**
 * <pre>
 * @author xuepeng<br>
 * @date 2013年12月25日<br>
 * @Copyright wanmei.com [2004-2013]<br>
 * @Description Redis 服务实现类
 * </pre>
 */
@Service(value = "redisService")
public class RedisServiceImpl implements RedisService {

	private static final String CHARSET = "UTF8";

	@Autowired
	private RedisTemplate<String, Serializable> redisTemplate;

	public void setRedisTemplate(
			RedisTemplate<String, Serializable> redisTemplate) {
		this.redisTemplate = redisTemplate;
	}

	@Override
	public boolean set(final byte[] key, final byte[] value,
			final long activeTime) {
		return redisTemplate.execute(new RedisCallback<Boolean>() {
			public Boolean doInRedis(RedisConnection connection)
					throws DataAccessException {
				boolean rs = true;
				connection.set(key, value);
				if (activeTime > 0) {
					rs = connection.expire(key, activeTime);
				}
				return rs;
			}
		});
	}

	@Override
	public boolean set(String key, String value, long activeTime) {
		return this.set(key.getBytes(), value.getBytes(), activeTime);
	}

	@Override
	public boolean set(String key, String value) {
		return this.set(key, value, 0L);
	}

	@Override
	public boolean set(byte[] key, byte[] value) {
		return this.set(key, value, 0L);
	}

	@Override
	public String get(final String key) {
		return redisTemplate.execute(new RedisCallback<String>() {
			public String doInRedis(RedisConnection connection)
					throws DataAccessException {
				try {
					byte[] value = connection.get(key.getBytes());
					return value == null ? "" : new String(value, CHARSET);
				} catch (UnsupportedEncodingException e) {
					e.printStackTrace();
				}
				return "";
			}
		});
	}

	@Override
	public Set<String> matchKeys(String pattern) {
		return redisTemplate.keys(pattern);

	}

	@Override
	public boolean exists(final String key) {
		return redisTemplate.execute(new RedisCallback<Boolean>() {
			public Boolean doInRedis(RedisConnection connection)
					throws DataAccessException {
				return connection.exists(key.getBytes());
			}
		});
	}

	@Override
	public boolean flushDB() {
		return redisTemplate.execute(new RedisCallback<Boolean>() {
			public Boolean doInRedis(RedisConnection connection)
					throws DataAccessException {
				connection.flushDb();
				return true;
			}
		});
	}

	@Override
	public long delete(final Collection<String> keys) {
		return redisTemplate.execute(new RedisCallback<Long>() {
			public Long doInRedis(RedisConnection connection)
					throws DataAccessException {
				long result = 0;
				for (String key : keys) {
					result = connection.del(key.getBytes());
				}
				return result;
			}
		});
	}

	@Override
	public long delete(final String... keys) {
		Collection<String> cols = new ArrayList<String>();
		for (String key : keys) {
			cols.add(key);
		}
		return this.delete(cols);
	}

}

 

 

package com.wanmei.redis;

import static org.junit.Assert.assertEquals;

import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.alibaba.fastjson.JSON;
import com.google.common.base.Strings;
import com.wanmei.redis.test.bean.User;
import com.wanmei.redis.test.service.RedisService;

/**
 * <pre>
 * @author xuepeng<br>
 * @date 2013年12月25日<br>
 * @Copyright wanmei.com [2004-2013]<br>
 * @Description 单元测试类
 * </pre>
 */
public class UserServiceTest {
	private ApplicationContext app;
	private RedisService redisService;

	@Before
	public void before() throws Exception {
		app = new ClassPathXmlApplicationContext(
				"com/wanmei/redis/spring-ctx-application.xml");
		redisService = (RedisService) app.getBean("redisService");
	}

	@Test
	public void crud() {
		for (;;) {
			System.out.println(Strings.repeat("-", 50));
			// -------------- Create ---------------
			String address1 = Strings.repeat("上海", 50);
			User user = new User();
			user.setAddress(address1);
			user.setUid("u123456");

			String key = toJSONString(user);
			String value = key;

			long beforeSave = System.currentTimeMillis();
			redisService.set(key, value);
			System.out.println("save consumes : "
					+ (System.currentTimeMillis() - beforeSave));

			// ---------------Read ---------------
			long beforeRead = System.currentTimeMillis();
			String r1 = redisService.get(key);
			System.out.println("read consumes : "
					+ (System.currentTimeMillis() - beforeRead));
			user = parse(r1, User.class);
			System.out.println("address1=" + user.getAddress());
			assertEquals(address1, user.getAddress());

			// --------------Update ------------
			String address2 = "北京";
			user.setAddress(address2);
			final String key1 = toJSONString(user);
			String value1 = key1;
			redisService.set(key1, value1);
			String r2 = redisService.get(key1);
			user = parse(r2, User.class);
			System.out.println("address2Save=" + user.getAddress());
			assertEquals(address2, user.getAddress());

			// --------------Delete ------------
			long beforeDelete = System.currentTimeMillis();
			long rs = redisService.delete(key1);
			System.out.println("delete record's count : " + rs);

			System.out.println("delete consumes : "
					+ (System.currentTimeMillis() - beforeDelete));
			String r3 = redisService.get(key1);
			System.out.println("addressdel=" + r3);
			assertEquals("", r3);

			// -------------exist----------------
			user.setAddress("呵呵");
			user.setUid("哈哈哈");
			String lastKey = user.toString();
			redisService.set(lastKey, lastKey);
			boolean r4 = redisService.exists(lastKey);
			assertEquals(true, r4);

			// -------------flushDB----------------
			System.out.println("flushDB:" + redisService.flushDB());
			String r5 = redisService.get(lastKey);
			assertEquals("", r5);

		}
	}

	private static String toJSONString(Object t) {
		return JSON.toJSONString(t);
	}

	private static <T> T parse(String text, Class<T> clazz) {
		return JSON.parseObject(text, clazz);
	}
}

下面是Spring的XML配置:

   spring-ctx-application.xml

<?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:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee"
	xmlns:jms="http://www.springframework.org/schema/jms" xmlns:lang="http://www.springframework.org/schema/lang"
	xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:oxm="http://www.springframework.org/schema/oxm"
	xmlns:p="http://www.springframework.org/schema/p" xmlns:sec="http://www.springframework.org/schema/security"
	xmlns:task="http://www.springframework.org/schema/task" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:util="http://www.springframework.org/schema/util" xmlns:cache="http://www.springframework.org/schema/cache"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
		http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
		http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
		http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-3.0.xsd
		http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-3.0.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
		http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-3.0.xsd
		http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd
		http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
		http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd">

	<context:annotation-config />
	<context:component-scan base-package="com.wanmei.redis"></context:component-scan>
	<context:property-placeholder
		location="classpath:com/wanmei/redis/test/config/redis.properties" />
	<!-- 对象池配置: -->
	<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
		<property name="maxActive" value="${redis.pool.maxActive}" />
		<property name="maxIdle" value="${redis.pool.maxIdle}" />
		<property name="maxWait" value="${redis.pool.maxWait}" />
	</bean>
	<!-- 工厂实现: -->
	<bean id="jedisConnectionFactory"
		class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
		<property name="hostName" value="${redis.ip}" />
		<property name="port" value="${redis.port}" />
		<property name="poolConfig" ref="jedisPoolConfig" />
	</bean>

	<!--模板类: -->
	<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"
		p:connection-factory-ref="jedisConnectionFactory" />


</beans>

 

     redis.properties

redis.pool.maxActive=1000
redis.pool.maxIdle=100
redis.pool.maxWait=500

redis.ip=test-server
redis.port=6379

 

 

分享到:
评论

相关推荐

    SpringDataRedis的jar包.rar

    Spring Data Redis提供了丰富的API,使得在Spring应用程序中操作Redis变得非常便捷。 首先,让我们了解Spring Data Redis的核心特性: 1. **自动配置**:Spring Boot通过自动配置类`RedisAutoConfiguration`和`...

    spring data redis api jar

    10. **Spring整合**:Spring Data Redis与Spring框架深度集成,支持Spring Boot自动配置,可以快速搭建Redis相关的应用。 使用Spring Data Redis API,开发者可以极大地简化Redis的编程模型,通过面向对象的方式...

    Spring Data Redis API(Spring Data Redis 开发文档).CHM

    Spring Data Redis。 Spring Data Redis 开发文档。 官网 Spring Data Redis API。

    spring data redis 小例子

    Spring Data Redis是一个强大的Java库,它为开发人员提供了一种简单的方式来利用Redis内存数据存储进行数据操作。在本文中,我们将深入探讨Spring Data Redis的基本概念、功能和如何通过一个小例子来实现其应用。 ...

    spring data for redis

    Spring Data for Redis 提供了丰富的API,使得在Java应用程序中使用Redis数据库变得简单高效。Redis是一个高性能的键值存储系统,常用于缓存、消息队列以及作为数据持久化存储。 ### 1. Spring Data Redis的核心...

    Spring Data Redis中文参考文档

    ### Spring Data Redis中文参考文档知识点总结 #### 一、Spring Data Redis概述 **Spring Data Redis** 是...这些知识点涵盖了Spring Data Redis的主要特性和使用方法,可以帮助开发人员快速了解并应用到实际项目中。

    spring data redis 官方文档

    Spring Data Redis 是 Spring Data 项目的一部分,旨在简化 Redis 在 Spring 应用中的集成与使用。该技术文档版本为 1.7.2.RELEASE,发布日期为 2016 年 6 月 15 日,由 Costin Leau、Jennifer Hickey、Christoph ...

    spring-data-redis 1.7.6

    Spring Data Redis使得在Java应用中集成和操作Redis变得简单而优雅。 在1.7.6版本中,Spring Data Redis提供了一系列的改进和优化,以提升开发者的使用体验。以下将从几个关键点详细阐述这一版本的核心特性: 1. *...

    spring-data-redis-2.3.9.RELEASE-API文档-中文版.zip

    赠送jar包:spring-data-redis-2.3.9.RELEASE.jar; 赠送原API文档:spring-data-redis-2.3.9.RELEASE-javadoc.jar; 赠送源代码:spring-data-redis-2.3.9.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-...

    Spring Data Redis Demo

    Spring Data Redis是一个强大的框架,它简化了在Java应用中使用Redis这一高性能键值数据库的过程。这个"Spring Data Redis Demo"示例将引导我们了解如何利用Spring Data Redis进行数据存储和检索。下面,我们将深入...

    SpringDataRedis对Redis的数据类型的常用操作API的使用代码举例.zip

    这个压缩包文件“SpringDataRedis对Redis的数据类型的常用操作API的使用代码举例.zip”显然包含了关于如何利用Spring Data Redis进行Redis数据类型操作的示例代码。下面我们将深入探讨Spring Data Redis对Redis主要...

    SpringDataRedis.rar

    通过SpringDataRedis,开发者可以快速地在Spring应用中实现对Redis的高效管理,无论是简单的键值操作还是复杂的分布式数据结构操作,都能够得到优雅的解决方案。这个库大大降低了与Redis交互的复杂性,提高了开发...

    springboot_SpringDataRedis_redis.zip

    本项目"springboot_SpringDataRedis_redis.zip"正是关于如何在Spring Boot应用中集成Redis,并利用Spring Data Redis库进行数据操作的示例。 首先,让我们深入理解Spring Boot与Redis的集成。Spring Boot通过其...

    maven版spring-data-redis简单示例

    基于spring的子项目spring-data-redis写的一个基于hash类型的用户CRUD,经过简单的封装,可以实现通用CRUD,请事先安装好redis,配置文件redis.properties请做相应修改,希望对你有帮助。

    Spring Data Redis

    Spring Data Redis 纯英文文档,介绍spring操作redis的一些用法

    spring-data-redis-2.5.5-API文档-中文版.zip

    赠送jar包:spring-data-redis-2.5.5.jar; 赠送原API文档:spring-data-redis-2.5.5-javadoc.jar; 赠送源代码:spring-data-redis-2.5.5-sources.jar; 赠送Maven依赖信息文件:spring-data-redis-2.5.5.pom; ...

    spring-data-redis-2.6.1-API文档-中文版.zip

    赠送jar包:spring-data-redis-2.6.1.jar; 赠送原API文档:spring-data-redis-2.6.1-javadoc.jar; 赠送源代码:spring-data-redis-2.6.1-sources.jar; 赠送Maven依赖信息文件:spring-data-redis-2.6.1.pom; ...

    Spring-data-redis使用指南

    ### Spring Data Redis 使用指南知识点详解 #### 一、Spring Data Redis 概览 **Spring Data Redis** 是 **Spring Data** 家族中的一个模块,它为 **Redis** 提供了一套方便的操作接口,使得开发人员可以更加高效...

    SpringData与Redis集成

    SpringData与Redis集成是现代Java应用中常见的数据存储和缓存解决方案。SpringData是一个强大的框架,它简化了数据库访问,并提供了对多种数据存储技术的统一API。而Redis是一款开源、高性能的键值对数据存储系统,...

Global site tag (gtag.js) - Google Analytics