java三大框架项目和Redis组合使用
已知一个已有的Struts+Spring+Hibernate项目,以前使用MySQL数据库,现在想把Redis也整合进去。
1. 相关Jar文件
 下载并导入以下3个Jar文件:
 commons-pool2-2.4.2.jar、jedis-2.3.1.jar、spring-data-redis-1.3.4.RELEASE.jar。
2. Redis配置文件
 在src文件夹下面新建一个redis.properties文件,设置连接Redis的一些属性。
 redis.host=127.0.0.1   
 redis.port=6379
 redis.default.db=1  
 redis.timeout=100000  
 redis.maxActive=300  
 redis.maxIdle=100  
 redis.maxWait=1000  
 redis.testOnBorrow=true
再新建一个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"   
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd   
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">  
     <context:property-placeholder location="classpath:redis.properties"/>
     <bean id="propertyConfigurerRedis"  
         class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
         <property name="order" value="1" />  
         <property name="ignoreUnresolvablePlaceholders" value="true" />  
         <property name="systemPropertiesMode" value="1" />  
         <property name="searchSystemEnvironment" value="true" />  
         <property name="locations">  
         <list>  
             <value>classpath:redis.properties</value>  
         </list>  
         </property>  
     </bean>
     <bean id="jedisPoolConfig"  
         class="redis.clients.jedis.JedisPoolConfig">  
         <property name="maxIdle" value="${redis.maxIdle}" />  
         <property name="testOnBorrow" value="${redis.testOnBorrow}" />  
     </bean>
     <bean id="jedisConnectionFactory"  
         class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">  
         <property name="usePool" value="true"></property>  
         <property name="hostName" value="${redis.host}" />  
         <property name="port" value="${redis.port}" />  
         <property name="timeout" value="${redis.timeout}" />  
         <property name="database" value="${redis.default.db}"></property>  
         <constructor-arg index="0" ref="jedisPoolConfig" />  
     </bean>
     <bean id="redisTemplate"  
         class="org.springframework.data.redis.core.StringRedisTemplate"  
         p:connectionFactory-ref="jedisConnectionFactory"
     </bean>
     <bean id="redisBase" abstract="true">  
         <property name="template" ref="redisTemplate"/>  
     </bean>
     <context:component-scan base-package="com.school.redisclient" />
< /beans>
3. Redis类
新建一个com.school.redisclient包,结构如下:
接口IRedisService:
 public interface IRedisService<K, V> {       
     public void set(K key, V value, long expiredTime);  
     public V get(K key);
     public Object getHash(K key, String name);
     public void del(K key);           
 }
抽象类AbstractRedisService,主要是对RedisTemplate进行操作:
 public abstract class AbstractRedisService<K, V> implements IRedisService<K, V> {  
        @Autowired  
         private RedisTemplate<K, V> redisTemplate;  
         public RedisTemplate<K, V> getRedisTemplate() {  
             return redisTemplate;  
         }  
         public void setRedisTemplate(RedisTemplate<K, V> redisTemplate) {  
             this.redisTemplate = redisTemplate;  
         }  
         @Override  
         public void set(final K key, final V value, final long expiredTime) {  
             BoundValueOperations<K, V> valueOper = redisTemplate.boundValueOps(key);  
             if (expiredTime <= 0) {  
                 valueOper.set(value);  
             } else {  
                 valueOper.set(value, expiredTime, TimeUnit.MILLISECONDS);  
             }  
         }  
         @Override  
         public V get(final K key) {  
             BoundValueOperations<K, V> valueOper = redisTemplate.boundValueOps(key);  
             return valueOper.get();  
         }
         @Override
         public Object getHash(K key, String name){
             Object res = redisTemplate.boundHashOps(key).get(name);
             return res;
         }
         @Override  
         public void del(K key) {  
             if (redisTemplate.hasKey(key)) {  
                 redisTemplate.delete(key);  
             }  
         }   
     }
实现类RedisService:
 @Service("redisService")  
 public class RedisService extends AbstractRedisService<String, String> {  
 }
工具类RedisTool:
 public class RedisTool {
     private static ApplicationContext factory;
     private static RedisService redisService;
     public static ApplicationContext getFactory(){
         if (factory == null){
             factory = new ClassPathXmlApplicationContext("classpath:redis.xml");
         }
         return factory;
     }
     public static RedisService getRedisService(){
         if (redisService == null){
             redisService = (RedisService) getFactory().getBean("redisService");
         }        
         return redisService;
     }
 }
4. 查询功能的实现
新建一个Action:RClasQueryAction,返回Redis里面所有的课程数据。
 @SuppressWarnings("serial")
 public class RClasQueryAction extends ActionSupport {
     RedisService rs = RedisTool.getRedisService();
     List<Clas> claslist = new ArrayList<Clas>();
     Clas c;
     public String execute(){
         if (rs != null){
             System.out.println("RedisService : " + rs);
             getAllClas();
         }
         ServletActionContext.getRequest().setAttribute("claslist", claslist);
         return SUCCESS;
     }
     private void getAllClas(){
         claslist = new ArrayList<Clas>();        
         int num = Integer.parseInt(rs.get("clas:count"));
         for (int i=0; i<num; i++){
             String cid = "clas:" + (i+1);
             c = new Clas();
             int id = Integer.parseInt(String.valueOf(rs.getHash(cid, "ID")));
             c.setId(id);
             System.out.println("ID:" + id);
             String name = (String) rs.getHash(cid, "NAME");
             c.setName(name);
             System.out.println("NAME:" + name);
             String comment = (String) rs.getHash(cid, "COMMENT");
             c.setComment(comment);
             System.out.println("COMMENT:" + comment);
             claslist.add(c);
         }
     }
 }
 Struts的设置和jsp文件就不用说了啊,大家都会。
5. Redis数据库
 Redis数据库里面的内容(使用的是Redis Desktop Manager客户端):
 最后是运行结果:
 当然,这只是实现了从Redis查询数据,还没有实现将Redis作为MySQL的缓存。
本文来自博客园,作者:小珍珠在河里敲代码,转载请注明原文链接:https://www.cnblogs.com/Jansens520/p/7825744.html
 

 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号