本文共 4986 字,大约阅读时间需要 16 分钟。
前面已经写了四篇关于dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3.2整合的文章:
今天继续写一篇关于Spring中spring-data-redis的使用。
Redis是一种特殊的类型的数据库,它被称为一种key-value存储。key-value存储保存的是键值对。实际上,key-value存储于哈希Map有很大的相似。
spring data是一种面向模板的数据访问,能够在使用Redis的时候,为我们提供了帮助。于是就有了spring-data-redis。spring-data-redis包含了多个模板实现,用来完成Redis数据库的存取功能。创建spring-data-redis模板之前,我们首先需要一个Redis连接工厂,spring-data-redis提供了四个连接工厂供我们选择。
redis.clients jedis 2.8.0 org.springframework.data spring-data-redis 1.6.2.RELEASE
Redis连接工厂会生成到Redis数据库服务器的连接。spring-data-redis为四种Redis客户端实现了连接工厂:
SrpConnectionFactory
具体选择哪一种取决于自己。
(1)创建redis.properties:
maxTotal=8#最大空闲时间maxIdle=8#最短空闲时间minIdle=0#最大的等待时间maxWaitMillis=6000#Redis的连接地址hostR=127.0.0.1#端口portR=6379
(2)创建spring-redis.xml
以上是我配置的jedisPoolConfig,jedisConnectionFactory,redisTemplate。
Redis连接工厂会生成到Redis key-value存储的连接(以RedisConnection的形式。)借助RedisConnection,可以存储和读取数据。
spring-redis-data以模板的形式提供了较好等级的数据访问方案。实际上,spring-data-redis提供了两个模板:
其中RedisTemplate使用两个类型进行了参数。第一个参数是key的类型,第二个参数是value的类型,而StringRedisTemplate是RedisTemplate的扩展,只关注String类型,也就是key和vlaue都是String类型。
假设我们想通过RedisTemplate
public class UserRedisDaoImp extends AbstractBaseRedisTempleteimplements IUserRedisDao { @Override public User findById(String key) { return (User) redisTemplate.opsForValue().get(key); } @Override public void saveUser(String key,User user) { redisTemplate.opsForValue().set(key, user); }}
使用List类型的value与之类似,只需要使用opForList()方法,
package com.lidong.core.user.dao;import java.util.List;import com.lidong.model.user.User;import com.lidong.util.AbstractBaseRedisTemplete;public class UserRedisDaoImp extends AbstractBaseRedisTempleteimplements IUserRedisDao { @Override public List getUserList(String key,long start,long end) { return redisTemplate.opsForList().range(key, 0, end); } @Override public Long addUserToUserList(String key, User user) { return redisTemplate.opsForList().leftPush(key, user); }}
除了使用List类型和value类型,我们还可以使用opForSet()的方法操作Set,最为常用的的就是向Set中添加一个元素:
@Override public void saveUser(String key,User user) { redisTemplate.opsForSet().add(key, user); }
在我们有多个Set,并对这些Set集合进行差、交、并的操作。
Setdifference = redisTemplate.opsForSet().difference("users1", "users2"); Set union = redisTemplate.opsForSet().union("users1", "users2"); Set intersect = redisTemplate.opsForSet().intersect("users1", "users2"); //我还可以移除Set中的元素 Long remove = redisTemplate.opsForSet().remove("user1", user);
我们可以将Value、List、Set等可以绑定到指定的key上。这些用个的不太多,但是也简单。这里就不具体写了。
package com.lidong.util;import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework.data.redis.core.RedisTemplate;/** * 基础的RedisTemplete * @author lidong * @param* @date 2017-1-5 */public abstract class AbstractBaseRedisTemplete implements ApplicationContextAware { protected RedisTemplate redisTemplate; /** * @Description RedisTemplate * @param redisTemplate */ public void setRedisTemplate(RedisTemplate redisTemplate) { this.redisTemplate = redisTemplate; } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { @SuppressWarnings("unchecked") RedisTemplate redisTemplate = applicationContext.getBean( "redisTemplate", RedisTemplate.class); setRedisTemplate(redisTemplate); }}
Spring-Data-Redis的使用基本最常用 的就是这三种类型value类型、List类型、Set类型。