这里给出了一个简单封装的 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
相关推荐
Spring Data Redis提供了丰富的API,使得在Spring应用程序中操作Redis变得非常便捷。 首先,让我们了解Spring Data Redis的核心特性: 1. **自动配置**:Spring Boot通过自动配置类`RedisAutoConfiguration`和`...
10. **Spring整合**:Spring Data Redis与Spring框架深度集成,支持Spring Boot自动配置,可以快速搭建Redis相关的应用。 使用Spring Data Redis API,开发者可以极大地简化Redis的编程模型,通过面向对象的方式...
Spring Data Redis。 Spring Data Redis 开发文档。 官网 Spring Data Redis API。
Spring Data Redis是一个强大的Java库,它为开发人员提供了一种简单的方式来利用Redis内存数据存储进行数据操作。在本文中,我们将深入探讨Spring Data 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 应用中的集成与使用。该技术文档版本为 1.7.2.RELEASE,发布日期为 2016 年 6 月 15 日,由 Costin Leau、Jennifer Hickey、Christoph ...
Spring Data Redis使得在Java应用中集成和操作Redis变得简单而优雅。 在1.7.6版本中,Spring Data Redis提供了一系列的改进和优化,以提升开发者的使用体验。以下将从几个关键点详细阐述这一版本的核心特性: 1. *...
赠送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是一个强大的框架,它简化了在Java应用中使用Redis这一高性能键值数据库的过程。这个"Spring Data Redis Demo"示例将引导我们了解如何利用Spring Data Redis进行数据存储和检索。下面,我们将深入...
这个压缩包文件“SpringDataRedis对Redis的数据类型的常用操作API的使用代码举例.zip”显然包含了关于如何利用Spring Data Redis进行Redis数据类型操作的示例代码。下面我们将深入探讨Spring Data Redis对Redis主要...
通过SpringDataRedis,开发者可以快速地在Spring应用中实现对Redis的高效管理,无论是简单的键值操作还是复杂的分布式数据结构操作,都能够得到优雅的解决方案。这个库大大降低了与Redis交互的复杂性,提高了开发...
本项目"springboot_SpringDataRedis_redis.zip"正是关于如何在Spring Boot应用中集成Redis,并利用Spring Data Redis库进行数据操作的示例。 首先,让我们深入理解Spring Boot与Redis的集成。Spring Boot通过其...
基于spring的子项目spring-data-redis写的一个基于hash类型的用户CRUD,经过简单的封装,可以实现通用CRUD,请事先安装好redis,配置文件redis.properties请做相应修改,希望对你有帮助。
Spring Data Redis 纯英文文档,介绍spring操作redis的一些用法
赠送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; ...
赠送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** 提供了一套方便的操作接口,使得开发人员可以更加高效...
SpringData与Redis集成是现代Java应用中常见的数据存储和缓存解决方案。SpringData是一个强大的框架,它简化了数据库访问,并提供了对多种数据存储技术的统一API。而Redis是一款开源、高性能的键值对数据存储系统,...