spring整合redis使用

这里就不说redis官方提供jedis来操作redis

讲spring整合了jedis之后的用法

 

首先pom.xml先加依赖

<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>

<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.7.2.RELEASE</version>
</dependency>

第一个是jedis依赖 第二个是spring整合jedis依赖

然后是spring的配置文件

<!--redis的配置 不是必须的 -->
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
<!--最大空闲数 -->
<property name="maxIdle" value="2" />
<!--最大连接数 -->
<property name="maxTotal" value="100" />
<!--最大等待时间 -->
<property name="maxWaitMillis" value="20000" />
</bean>

 

<!--redis连接工厂对象 通过这个对象 建立和redis的连接 -->
<bean name="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<!--redis的IP地址 如果是本机就是127.0.0.1 -->
<property name="hostName" value="192.168.205.129"></property>
<!-- redis的端口 -->
<property name="port" value="6379"></property>
<!-- redis的密码 如果没有密码 可以省略 -->
<property name="password" value="123456"></property>
<!-- redis配置 不是必须的 -->
<property name="poolConfig" ref="poolConfig"></property>
</bean>

<!--jdk序列化器 可以将存入redis中的值进行序列化 取出会进行反序列化 -->
<bean name="jdkSerializationRedisSerializer" class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer">
</bean>

<!--String序列化器 可以将存入redis中的键 进行序列化 取出会进行反序列化 -->
<bean name="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer">
</bean>

 

<!-- 配置redis模板对象 这是我们操作redis的对象 -->
<bean name="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<!-- 传入redis连接工厂对象 -->
<property name="connectionFactory" ref="connectionFactory"></property>
<!-- 传入 键 序列化器 -->
<property name="keySerializer" ref="stringRedisSerializer"></property>
<!-- 传入 值 序列化器 -->
<property name="valueSerializer" ref="jdkSerializationRedisSerializer"></property>
</bean>

 

以上就是spring整合jedis的配置  后续操作redis  只需要通过spring容器得到redisTemplate对象就可以了

 

/**
 * 使用spring整合redis的 RedisTemplate对象
 * 保存对象到redis和从redis中读取对象
 * 
 * */
public class Test1 {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext xml=new ClassPathXmlApplicationContext("classpath:spring/spring.xml");
          //从spring容器中获得redis模板对象 
        RedisTemplate<String,Object>  redisTemplate=xml.getBean("redisTemplate", RedisTemplate.class);
    
        //创建要保存的对象
     User u=new User();
     u.setUserID(1);
     u.setUserName("张三");
     u.setUserTime(new Date());
     
     //以字符串的格式  将对象序列化后存入redis
     redisTemplate.opsForValue().set("user:1", u);
     
     //从redis中取出指定键的值   并强转成User
     User user=(User)redisTemplate.opsForValue().get("user:1");
     
     
     System.out.println(user);
     
     
    }

}

 

我这是将一个对象 序列化后 以redis的字符串数据类型存储到redis中  然后通过key查询这个值 会自动反序列化  变成存入的对象

这是因为在配置文件中配置了jdk序列化器 和string序列化器  存入redis时都会序列化转成字节数组 以字符串的形式存入,取出会反序列化构建成对象

但是这样我们通过redis客户端查询时  值就是我们读不懂的字节数组  而且就算我们存入的是 普通字符串也会被序列化成字节数组

如果没有存对象的需求  可以不配置jdk序列化器和string序列化器  这样只存取字符串 那通过客户端查询 也是可以看得懂的格式

 

把我这个bean类也贴出来    注意 实现序列化接口是必须的  不然不能将这个类的对象序列化

public class User implements Serializable {
    private static final long serialVersionUID = -8191663210611660061L;
    private Integer userID;
    private String userName;
    private Date   userTime;
    public Integer getUserID() {
        return userID;
    }
    public void setUserID(Integer userID) {
        this.userID = userID;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public Date getUserTime() {
        return userTime;
    }
    public void setUserTime(Date userTime) {
        this.userTime = userTime;
    }
    
    
    @Override
    public String toString() {
        return "User [userID=" + userID + ", userName=" + userName + ", userTime=" + userTime + "]";
    }
    
    

}

 

基本的使用差不多了  这个RedisTemplate 是对jedis的封装  

Redis五大类型:字符串(String)、哈希/散列/字典(Hash)、列表(List)、集合(Set)、有序集合(sorted set)五种
对应的RedisTemplate对象操作这五种数据类型的API 这都是获得redisTemplate里面的内部类对象 在具体的方法 可以自己百度 或者看名字猜 方法不多
redisTemplate.opsForValue();//操作字符串
redisTemplate.opsForHash();//操作hash
redisTemplate.opsForList();//操作list
redisTemplate.opsForSet();//操作set
redisTemplate.opsForZSet();//操作有序set

 

posted @ 2019-05-24 14:16  沙漠里的橘子皮  阅读(241)  评论(0编辑  收藏  举报