zoukankan      html  css  js  c++  java
  • 对redis客户端jedis2.8.0的进一步封装

     jedis2.8.0的进一步封装:

        1.序列化存储对象

        2.结合spring,创建redis连接池

        3.提供了基础的单个实体操作,有序list操作和一对多关系list的操作,对list提供了分页的封装

        4.封装了简单的逻辑(如:重建缓存的场景,排序规则,具体方法需要重写~)

     具体使用的时候,只需要继承符合你的业务的类(ICacheT,ICachtList,ICacheRelated),并重写下排序,重建时需要的具体数据等方法就可以啦

      (1).单个缓存(ICacheT)

    复制代码
    public class CachePerson extends CacheTBase<Integer,Person> {
    
        @Override
        protected Person rebuild(Integer tkey) {
            return null;
        }
    }
    复制代码

     使用时:

        Person p  = new Person();
        cachePerson.deleteByKey(Person.class,1,2);
        cachePerson.get(Person.class, 1);
        cachePerson.delete(p);
        cachePerson.set(p);

      (2).list缓存(ICachtList)

    复制代码
    public class CacheCityList extends CacheListBase<City>{
    
        @Override
        protected String getKey() {
            return "common:city";
        }
    
        @Override
        protected List<City> rebuildList() {
            return null;
        }
    
        @Override
        protected List<City> rebuildPageList(Page page) {
            return null;
        }
    
        @Override
        protected Double score(City item) {
            return (double)item.getId();
        }
    }
    复制代码

      使用时:

    复制代码
        //批量list添加
            list.addTioList(cityList);
            //一个或多个添加
            list.addToList(city1,city2);
            //通过key删除
            list.removeFromListByKey(City.class,"1","2","3","4","5");
            //一个或多个删除
            list.removeFromList(city1,city2);
            //批量list删除
            list.removeFromList(cityList);
            //查找list
            List<City> cityList = list.getList(City.class, true);
            //查找带分页的list
            List<City> cityList = list.getListPage(City.class, page, true);
            //清空list
            list.clearList();
    复制代码

      (3).一对多关系(ICacheRelated)

    复制代码
    public class CacheUserPersonList extends CacheRelatedBase<Person>{
    
        @Override
        protected String getKey(String mainkey) {
            return null;
        }
    
        @Override
        protected List<Person> rebuildList(String mainkey) {
            return null;
        }
    
        @Override
        protected List<Person> rebuildPageList(String mainkey, Page page) {
            return null;
        }
    
        @Override
        protected double score(Person item) {
            return 0;
        }
    }
    复制代码

      使用时:

    复制代码
         //添加
            list.addRelated(person, "qiang");
            //批量list添加方法
            list.addRelateds("qiang", personList);
            //添加一个或多个
            list.addRelateds("qiang",p1,p2,p3,p4,p5);
            //批量删除关系
            list.removeRelated("qiang", personList);
            //删除一个或多个关系
            list.removeRelated("qiang", p1,p2,p3,p4,p5);
            //根据id删除
            list.removeFromListByKey("qiang", Person.class, "2","3");
            //获取list,desc=true 为倒序(score 越大,排序越靠前~)
            list.getRelatedList("qiang", desc)
            //获取带分页的list,desc=true 为倒序
            list.getRelatedListPage("qiang", page, desc);
            //清空
            list.clearList("qiang");
    复制代码

    spring固定配置:

    1.注入:

    复制代码
    <?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:context="http://www.springframework.org/schema/context"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd">
            
    
        <!--序列化 -->
        <bean id="iserializer" class="com.cjdz.test.cache.redis.JsonSerializer"></bean>
        <!--缓存基本操作 -->
        <bean id="redisCache" class="com.cjdz.test.cache.redis.RedisCache">
            <property name="iserializer" ref="iserializer"></property>
        </bean>
        <bean id="cache" class="com.cjdz.test.cache.redis.RedisCache"></bean>
    
        
        <!-- 单个-->
        <bean id="icacheT" class="com.cjdz.test.catchdata.impl.CacheTBase" abstract="true">
            <property name="cache" ref="cache"></property>
        </bean>
        <!-- list-->
        <bean id="icacheList" class="com.cjdz.test.catchdata.impl.CacheListBase" abstract="true">
            <property name="cache" ref="cache"></property>
        </bean>
        <!-- 一对多-->
        <bean id="icacheRelated" class="com.cjdz.test.catchdata.impl.CacheRelatedBase" abstract="true">
            <property name="cache" ref="cache"></property>
        </bean>
    
        <!-- 业务-->
        <bean id="cacheCity" class="com.cjdz.test.catchdata.test.CacheCity" parent="icacheT"></bean>
        <bean id="cachePerson" class="com.cjdz.test.catchdata.test.CachePerson" parent="icacheT"></bean>
        <bean id="cacheCityList" class="com.cjdz.test.catchdata.test.CacheCityList" parent="icacheList"></bean>
        <bean id="cacheUserPersonList" class="com.cjdz.test.catchdata.test.CacheUserPersonList" parent="icacheRelated"></bean>
    
    </beans>
    复制代码

    2.连接池:

    复制代码
    <?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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
            http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-3.2.xsd"
        default-lazy-init="true">
    
        <description>Jedis Configuration</description>
    
        <!-- 加载配置属性文件 -->
        <context:property-placeholder ignore-unresolvable="true" location="classpath:redis.properties" />
        
        <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
            <property name="maxIdle" value="300" /> <!-- 最大能够保持idel状态的对象数  -->
            <property name="maxTotal" value="60000" /> <!-- 最大分配的对象数 -->
            <property name="testOnBorrow" value="true" /> <!-- 当调用borrow Object方法时,是否进行有效性检查 -->
        </bean>
        
        <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
            <constructor-arg index="0" ref="jedisPoolConfig" />
            <constructor-arg index="1" value="${redis.host}" />
            <constructor-arg index="2" value="${redis.port}" type="int" />
            <constructor-arg index="3" value="${redis.timeout}"  type="int" />
            <constructor-arg index="4" value="${redis.auth}"/>
        </bean>
    </beans>
    复制代码

    最后在RedisDesktop看到的大概是这样式滴:

     这个是随便写的一个小东东,类似于helper吧,在使用时,既能规范开发时对缓存的操作,不至于最后缓存都乱掉,也能方便维护缓存。

     有很多的局限性,写的时候,对象在redis中存储时,直接用了(对象类名:id) 的方式作为key,而list和related的key则交给开发者重写。之后慢慢改进吧  :)

      文件地址:http://files.cnblogs.com/files/qiangweikang/reids-client.rar

    我喜欢程序员,他们单纯、固执、容易体会到成就感;面对压力,能够挑灯夜战不眠不休;面对困难,能够迎难而上挑战自我。他 们也会感到困惑与傍徨,但每个程序员的心中都有一个比尔盖茨或是乔布斯的梦想“用智慧开创属于自己的事业”。我想说的是,其 实我是一个程序员
  • 相关阅读:
    184. Department Highest Salary【leetcode】sql,join on
    181. Employees Earning More Than Their Managers【leetcode】,sql,inner join ,where
    178. Rank Scores【leetcode】,sql
    177. Nth Highest Salary【leetcode】,第n高数值,sql,limit,offset
    176. Second Highest Salary【取表中第二高的值】,sql,limit,offset
    118. Pascal's Triangle【LeetCode】,java,算法,杨辉三角
    204. Count Primes【leetcode】java,算法,质数
    202. Happy Number【leetcode】java,hashSet,算法
    41. First Missing Positive【leetcode】寻找第一个丢失的整数,java,算法
    删除
  • 原文地址:https://www.cnblogs.com/kms1989/p/5132535.html
Copyright © 2011-2022 走看看