javaee论坛
金科官网
关闭此广告

普通会员

4

帖子

0

回复

12

积分

楼主
发表于 2017-09-05 22:20:56 | 查看: 234 | 回复: 0



Spring4整合Redis

    各位大牛!小弟小白一个,只是喜欢将自己整合的一些东西分享给同僚们如果有不对的地方欢迎批评指导,如果你觉得我写的东西不入流可以右上角点×,给小白一些机会我不可能一直白下去,我也在努力学习,把更好的东西分享给大家,我们一起努力!!!


一.导入相关的jar包(如果是Maven项目则导入依赖)  

        <!-- spring-redis实现 -->

        <dependency>

            <groupId>org.springframework.data</groupId>

            <artifactId>spring-data-redis</artifactId>

            <version>1.6.2.RELEASE</version>

        </dependency>

        <!-- redis客户端jar -->

        <dependency>

            <groupId>redis.clients</groupId>

            <artifactId>jedis</artifactId>

            <version>2.8.0</version>

        </dependency>

二.在web.xml中配置Spring监听(注意扫描配置文件是用通配符*)

  <!--  spring监听器-->

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:spring-*.xml</param-value>  

</context-param>

三.在我们的springMvc配置文件中映射redis配置文件

        

         <!-- 映射到redis配置文件 -->

        <import resource="spring-redis.xml"/>

四.新建spring-redis.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:p="http://www.springframework.org/schema/p"

                xmlns:context="http://www.springframework.org/schema/context"

                xmlns:mvc="http://www.springframework.org/schema/mvc"

                  xmlns:cache="http://www.springframework.org/schema/cache"

                xsi:schemaLocation="http://www.springframework.org/schema/beans  

                                    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  

                                    http://www.springframework.org/schema/context  

                                    http://www.springframework.org/schema/context/spring-context-4.0.xsd  

                                    http://www.springframework.org/schema/mvc  

                                    http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd

                                    http://www.springframework.org/schema/cache 

                                    http://www.springframework.org/schema/cache/spring-cache-4.0.xsd">

              <!-- 设置当前连接工厂  设置   redis  IP   端口  密码 -->

             <bean id="jedisConnectionFactory"                                 class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" destroy-method="destroy"> 

              <property name="hostName" value="localhost"></property> 

              <property name="port" value="6379"></property>

              <property name="password" value=""></property>

             </bean> 

             <!-- 将 redis  的 连接 工厂 转交给 RedisTemplate -->

             <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> 


            <!-- 将redis模板工具类“RedisTemplate”注入到SimpleCacheManager -->

            <!-- SimpleCacheManager 是一个Spring4的注解 用来缓存 -->

               <bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">    

                     <property name="caches">    

                        <set> 

                             <!-- 这是工具类全路径 -->

                             <bean class="com.jk.oa.util.RedisCache">  

                                 <!-- 将redis模板工具类“RedisTemplate”注入到SimpleCacheManager -->

                                 <property name="redisTemplate" ref="jedisTemplate" />  

                                   <!-- @Cacheable注解的value值 -->  

                                 <property name="name" value="redis"/>  

                                 <!-- common名称要在类或方法的注解中使用 -->

                            </bean>

                        </set>    

                     </property>    

                 </bean>

                <!-- 将cacheManager变为注解的形式使用 -->    

               <cache:annotation-driven cache-manager="cacheManager" />    

            </beans>

五.@Cacheable工具类的创建  

        package com.jk.oa.util;

        import java.io.ByteArrayInputStream;

        import java.io.ByteArrayOutputStream;

        import java.io.IOException;

        import java.io.ObjectInputStream;

        import java.io.ObjectOutputStream;

        

        import org.springframework.cache.Cache;

        import org.springframework.cache.support.SimpleValueWrapper;

        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;

        public class RedisCache implements Cache{

        

private RedisTemplate<String, Object> redisTemplate;  

    private String name;  

    public RedisTemplate<String, Object> getRedisTemplate() {

   return redisTemplate;  

}

 

public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {

   this.redisTemplate = redisTemplate;  

}

 

public void setName(String name) {

   this.name = name;  

    }

 

    @Override  

    public String getName() {

       // TODO Auto-generated method stub  

        return this.name;  

    }


    @Override  

    public Object getNativeCache() {

      // TODO Auto-generated method stub  

        return this.redisTemplate;  

    }

 

    @Override  

    public ValueWrapper get(Object key) {

      // TODO Auto-generated method stub

      System.out.println("get key");

      final String keyf =  key.toString();

      Object object = null;

      object = redisTemplate.execute(new RedisCallback<Object>() {

      public Object doInRedis(RedisConnection connection)  

                  throws DataAccessException {

          byte[] key = keyf.getBytes();

          byte[] value = connection.get(key);

          if (value == null) {

             return null;

            }

          return toObject(value);

          }

       });

        return (object != null ? new SimpleValueWrapper(object) : null);

      }

  

     @Override  

     public void put(Object key, Object value) {

       // TODO Auto-generated method stub

       System.out.println("put key");

       final String keyf = key.toString();  

       final Object valuef = value;  

       final long liveTime = 86400;  

       redisTemplate.execute(new RedisCallback<Long>() {  

           public Long doInRedis(RedisConnection connection)  

                   throws DataAccessException {  

                byte[] keyb = keyf.getBytes();  

           byte[] valueb = toByteArray(valuef);  

           connection.set(keyb, valueb);  

           if (liveTime > 0) {  

               connection.expire(keyb, liveTime);  

                 }  

                return 1L;  

             }  

         });  

      }


      private byte[] toByteArray(Object obj) {  

         byte[] bytes = null;  

         ByteArrayOutputStream bos = new ByteArrayOutputStream();  

         try {  

           ObjectOutputStream oos = new ObjectOutputStream(bos);  

           oos.writeObject(obj);  

           oos.flush();  

           bytes = bos.toByteArray();  

           oos.close();  

           bos.close();  

     }catch (IOException ex) {  

          ex.printStackTrace();  

     }  

     return bytes;  

   }  


  private Object toObject(byte[] bytes) {

         Object obj = null;  

      try {

          ByteArrayInputStream bis = new ByteArrayInputStream(bytes);  

          ObjectInputStream ois = new ObjectInputStream(bis);  

          obj = ois.readObject();  

          ois.close();  

          bis.close();  

      } catch (IOException ex) {  

          ex.printStackTrace();  

       } catch (ClassNotFoundException ex) {  

          ex.printStackTrace();  

       }  

       return obj;  

        }

       @Override  

       public void evict(Object key) {  

         // TODO Auto-generated method stub  

    System.out.println("del key");

         final String keyf = key.toString();  

         redisTemplate.execute(new RedisCallback<Long>() {  

         public Long doInRedis(RedisConnection connection)  

                   throws DataAccessException {  

             return connection.del(keyf.getBytes());  

            }  

          });  

        }

 

   @Override  

   public void clear() {  

      // TODO Auto-generated method stub  

    System.out.println("clear key");

      redisTemplate.execute(new RedisCallback<String>() {  

           public String doInRedis(RedisConnection connection)  

                   throws DataAccessException {  

             connection.flushDb();  

               return "ok";  

          }  

      });  

   }


@Override

public <T> T get(Object arg0, Class<T> arg1) {

// TODO Auto-generated method stub

return null;

}

    }

超出文字限制了预知后事如何,请听下回分解!!!!!


                                                                                                                                                     -------金科教育,联系电话:010-8044-3291

普通会员

0

帖子

0

回复

4

积分
沙发
发表于 2017-09-05 23:27:21

很不错,加油

普通会员

0

帖子

0

回复

9

积分
板凳
发表于 2017-09-05 23:29:22

大哥  666

普通会员

0

帖子

1029

回复

50

积分
地板
发表于 2017-09-07 14:18:45

看我头像

普通会员

0

帖子

0

回复

46

积分
4#
发表于 2017-09-13 08:29:22

6666666666

普通会员

0

帖子

0

回复

46

积分
5#
发表于 2017-09-13 08:29:22

6666666666

普通会员

0

帖子

0

回复

46

积分
6#
发表于 2017-09-13 08:29:23

6666666666

普通会员

0

帖子

0

回复

46

积分
7#
发表于 2017-09-13 08:29:23

6666666666

普通会员

0

帖子

0

回复

46

积分
8#
发表于 2017-09-13 08:29:23

6666666666

普通会员

0

帖子

0

回复

46

积分
9#
发表于 2017-09-13 08:29:23

6666666666

普通会员

0

帖子

0

回复

46

积分
10#
发表于 2017-09-13 08:29:23

6666666666

您需要登录后才可以回帖 登录 | 立即注册

技术链接: csdneye51cto

技术支持 金科教育 V1.0 © 2016-2017

 京ICP备17040661号-2