Srping Data Redis 四:Srping Data Redis 入门

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/congcong68/article/details/52750049

一、Spring Data Redis                                                                                                                                                  

            Spring Data Redis  提供JedisJredis,rjc等客户端的封装,可以根据需求更换换客服端,使业务代码比较稳定性。 以及提供对连接池管理 timeoutmaxActivemaxIdle等参数),org.springframework.data.redis.connection包中的RedisConnectionRedisConnectionFactory类来获取Redis连接,Spring Data Redis 提供RedisTemplate是对RedisConnection进行封装,提供了连接管理,序列化等功能,它对Redis的交互进行了更高层次的抽象,对调用做了封装,省去了建立连接,释放连接等繁琐代码。


二、RedisTemplate                                                                                                                                                       

        Spring Data Redis hibernate等一样提供了模板,Spring Data Redis提供了RedisTemplateStringRedisTemplate这两种模板,我们可以通过Spring容器进行管理:

                 

 <bean id="stringRedisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">  
        <property name="connectionFactory"   ref="connectionFactory" />  
    </bean>  
    <bean id="jedisTemplate" class="org.springframework.data.redis.core.RedisTemplate">  
        <property name="connectionFactory" ref="jedisConnectionFactory"></property>  
        <property name="keySerializer">  
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>  
        </property>  
        <property name="valueSerializer">  
            <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>  
        </property>  
    </bean>  


        Jedis的客户端API接受的数据类型为Stringbyte。我们有时保存对象时,需要转换为byte或者String

      

        1RedisSerializer

 

                Org.springframework.data.redis.serializer包下提供了几种系列化

                   


                           JdkSerializationRedisSerializer:是JDK自带的系列化,通过对实体类ObjectInputStream/ObjectOutputStream进行序列化操作。实体类必须实现Serializable不然会报错。

                     Jackson2JsonRedisSerializer:是将实体类转换为JSON在进行系列化

                    OxmSerializer:是将实体类转换为XML在进行系列化。

                     StringRedisSerializerstring.getBytes(charset)通过String提供的方法获取二进制数组。


       2StringRedisTemplate

              StringRedisTemplate extends RedisTemplate<String, String>,默认使用StringRedisSerializervalue进行系列化。


         3RedisTemplate

                      提供了对keyvaluehashKeyhashValue进行系列化方式:

                                   private RedisSerializer keySerializer = null;

                                   private RedisSerializer valueSerializer = null;

                                   private RedisSerializer hashKeySerializer = null;

                                  private RedisSerializer hashValueSerializer = null;

                   

                       默认使用 JdkSerializationRedisSerializer对对象进行系列化。

        总结:

                      JSON或者XML转换为字符串进行存储由StringRedisTemplate来操作。

                       有些不转换字符串的对象需要系列化进行存储RedisTemplate来操作 。  

三、API概述                                                                                 

           Spring Data Redis 提供RedisTemplate操作Redis,能方便我们开发,RedisTemplate提供的操作视图(从Redis命令参考分组),提供丰富的,泛型接口的工作对key类型(通过按key类型绑定接口)操作。还可以对key设置过期时间

        1、区别

                Key类型操作:可以在一个连接上可以同时操作多个key

                key绑定操作:在一个连接上绑定具体的key,只能对这个key进行操作。

                通过例子能理解区别在哪里:

             

     2、接口说明

             Org.springframework.data.redis.core  包中定义了接口以及对接口的实现。

 

            Key类型操作提供的接口:

 

               ValueOperations  Redis String/Value操作

               ListOperations    Redis List 操作

               SetOperations   Redis Set 操作

                ZSetOperations Redis Sort Set 操作

               HashOperations Redis Hash 操作

 

          key绑定操作提供的接口:

             BoundValueOperations Redis String/Value key绑定操作

             BoundListOperations Redis List key绑定操作

             BoundSetOperations Redis Set key 绑定操作

            BoundZSetOperations Redis Sort Set key绑定操作

           BoundHashOperations Redis Hash key 绑定操作

       3key设置过期时间

             可以给key设置过期时间,时间到了自动删除key,这样对不需要存储太长的数据进行清除,以免占用内存空间。设置key过期有两种方式:

            1set(K key, V value, final longtimeout, final TimeUnit unit)


            2expire(K key, final long timeout, final TimeUnit unit)

五、简单例子                                                                                                                                                                  

        
              第一步:redis.properties
                         
         redis.host=192.168.1.100
         redis.port=6379
 
          第二步:applicationContext-redis.xml
 
                 
         <!-- 获取配置资源 -->
	<context:property-placeholder location="classpath:redis.properties" />

	 <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
	p:host-name="${redis.host}" p:port="${redis.port}"
	 />  
    <bean id="stringRedisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">  
        <property name="connectionFactory"   ref="jedisConnectionFactory" />  
    </bean>  
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">  
        <property name="connectionFactory" ref="jedisConnectionFactory"></property>  
        <property name="keySerializer">  
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>  
        </property>  
        <property name="valueSerializer">  
            <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>  
        </property>  
    </bean>  

        第三步:代码实现
   

             
	@Autowired
	private  StringRedisTemplate  stringRedisTemplate;
	@Autowired
	private RedisTemplate  redisTemplate;
	
	@Override
	public void set(String key, String value) {
		stringRedisTemplate.opsForValue().set(key, value);
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public void setObject(Object key, Object value) {
		redisTemplate.opsForValue().set(key, value);
	}


         第四步:测试类
                
              
 @Test   
    public void testAdd()  
    {  
    	User user=new User();
    	user.setCzry("name");
    	user.setMm("mm");
    	redisStringDao.set("test1", JSONObject.toJSONString(user));
    	redisStringDao.setObject("test2", user);
    	
    }

          第五步:测试结果
 
                



                  同样对实体进行保存,第一种采用转换为JSON字符串,第二种对对象进行系列化进行保存, 第二种方式当实体字段改变 时,反系列化时就会报错,而且第二种占用内存比较多。
       
              

猜你喜欢

转载自blog.csdn.net/congcong68/article/details/52750049
今日推荐