zoukankan      html  css  js  c++  java
  • spring mvc 中整合redis记录

    1、添加maven包

     1 <dependency>
     2             <groupId>redis.clients</groupId>
     3             <artifactId>jedis</artifactId>
     4             <version>2.8.1</version>
     5         </dependency>
     6         <dependency>
     7             <groupId>org.springframework.data</groupId>
     8             <artifactId>spring-data-redis</artifactId>
     9             <version>1.7.2.RELEASE</version>
    10       </dependency>

    2、添加配置文件redis.properties

    1 redis.maxIdle=300  
    2 redis.maxActive=600  
    3 redis.maxWait=1000  
    4 redis.testOnBorrow=true  
    5 redis.port=6379
    6 redis.pass=
    7 redis.dbIndex=0
    8 redis.host=10.10.10.1

    3、添加配置文件spring-redis.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
     4     xmlns:context="http://www.springframework.org/schema/context"
     5     xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:cache="http://www.springframework.org/schema/cache"
     6     xsi:schemaLocation="http://www.springframework.org/schema/beans      
     7                         http://www.springframework.org/schema/beans/spring-beans-4.2.xsd      
     8                         http://www.springframework.org/schema/context      
     9                         http://www.springframework.org/schema/context/spring-context-4.2.xsd      
    10                         http://www.springframework.org/schema/mvc      
    11                         http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd  
    12                         http://www.springframework.org/schema/cache   
    13                         http://www.springframework.org/schema/cache/spring-cache-4.2.xsd">
    14 
    15 
    16     <!-- 启用缓存注解功能,这个是必须的,否则注解不会生效,另外,该注解一定要声明在spring主配置文件中才会生效 -->
    17 
    18     <!-- redis 相关配置 -->
    19     <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
    20         <property name="maxIdle" value="${redis.maxIdle}" />
    21         <property name="maxTotal" value="${redis.maxActive}" />
    22         <property name="maxWaitMillis" value="${redis.maxWait}" />
    23         <property name="testOnBorrow" value="${redis.testOnBorrow}" />
    24     </bean>
    25 
    26     <bean id="JedisConnectionFactory"
    27         class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
    28         p:host-name="${redis.host}" p:port="${redis.port}" p:password="${redis.pass}"
    29         p:pool-config-ref="poolConfig" p:database="${redis.dbIndex}" />
    30 
    31 
    32     <!-- redis操作模板,这里采用尽量面向对象的模板 -->
    33     <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
    34         <property name="connectionFactory" ref="JedisConnectionFactory" />
    35         <property name="keySerializer">
    36             <bean
    37                 class="org.springframework.data.redis.serializer.StringRedisSerializer" />
    38         </property>
    39         <property name="valueSerializer">
    40             <bean
    41                 class="centaline.small.course.tool.GenericFastJson2JsonRedisSerializer" />
    42         </property>
    43         <property name="hashKeySerializer">
    44             <bean
    45                 class="org.springframework.data.redis.serializer.StringRedisSerializer" />
    46         </property>
    47         <property name="hashValueSerializer">
    48             <bean
    49                 class="centaline.small.course.tool.GenericFastJson2JsonRedisSerializer" />
    50         </property>
    51     </bean>
    52 </beans> 

    4、添加工具类

      1 public class RedisUtil {
      2 
      3     @Autowired
      4     private RedisTemplate<String, Object> redisTemplate;
      5 
      6     public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {
      7         this.redisTemplate = redisTemplate;
      8     }
      9 
     10     
     11     public boolean expire(String key, long time,TimeUnit timeUnit) {
     12         try {
     13             if (time > 0) {
     14                 redisTemplate.expire(key, time, timeUnit);
     15             }
     16             return true;
     17         } catch (Exception e) {
     18             e.printStackTrace();
     19             return false;
     20         }
     21     }
     22 
     23     /**
     24      * 根据key 获取过期时间
     25      * 
     26      * @param key
     27      *            键 不能为null
     28      * @return 时间 返回0代表为永久有效
     29      */
     30     public long getExpire(String key) {
     31         return redisTemplate.getExpire(key, TimeUnit.SECONDS);
     32     }
     33 
     34     /**
     35      * 判断key是否存在
     36      * 
     37      * @param key
     38      *            键
     39      * @return true 存在 false不存在
     40      */
     41     public boolean hasKey(String key) {
     42         try {
     43             return redisTemplate.hasKey(key);
     44         } catch (Exception e) {
     45             e.printStackTrace();
     46             return false;
     47         }
     48     }
     49 
     50     /**
     51      * 删除缓存
     52      * 
     53      * @param key
     54      *            可以传一个值 或多个
     55      */
     56     @SuppressWarnings("unchecked")
     57     public void del(String... key) {
     58         if (key != null && key.length > 0) {
     59             if (key.length == 1) {
     60                 redisTemplate.delete(key[0]);
     61             } else {
     62                 redisTemplate.delete(CollectionUtils.arrayToList(key));
     63             }
     64         }
     65     }
     66 
     67     // ============================String=============================
     68     /**
     69      * 普通缓存获取
     70      * 
     71      * @param key
     72      *            键
     73      * @return 74      */
     75     public Object get(String key) {
     76         return key == null ? null : redisTemplate.opsForValue().get(key);
     77     }
     78 
     79     /**
     80      * 普通缓存放入
     81      * 
     82      * @param key
     83      *            键
     84      * @param value
     85      *            值
     86      * @return true成功 false失败
     87      */
     88     public boolean set(String key, Object value) {
     89         try {
     90             redisTemplate.opsForValue().set(key, value);
     91             return true;
     92         } catch (Exception e) {
     93             e.printStackTrace();
     94             return false;
     95         }
     96 
     97     }
     98 
     99     /**
    100      * 普通缓存放入并设置时间
    101      * 
    102      * @param key
    103      *            键
    104      * @param value
    105      *            值
    106      * @param time
    107      *            时间 time要大于0 如果time小于等于0 将设置无限期
    108      * @return true成功 false 失败
    109      */
    110     public boolean set(String key, Object value, long time,TimeUnit timeUnit) {
    111         try {
    112             if (time > 0) {
    113                 redisTemplate.opsForValue().set(key, value, time,timeUnit);
    114             } else {
    115                 set(key, value);
    116             }
    117             return true;
    118         } catch (Exception e) {
    119             e.printStackTrace();
    120             return false;
    121         }
    122     }
    123 
    124     /**
    125      * 递增
    126      * 
    127      * @param key
    128      *            键
    129      * @param by
    130      *            要增加几(大于0)
    131      * @return
    132      */
    133     public long incr(String key, long delta) {
    134         if (delta < 0) {
    135             throw new RuntimeException("递增因子必须大于0");
    136         }
    137         return redisTemplate.opsForValue().increment(key, delta);
    138     }
    139 
    140     /**
    141      * 递减
    142      * 
    143      * @param key
    144      *            键
    145      * @param by
    146      *            要减少几(小于0)
    147      * @return
    148      */
    149     public long decr(String key, long delta) {
    150         if (delta < 0) {
    151             throw new RuntimeException("递减因子必须大于0");
    152         }
    153         return redisTemplate.opsForValue().increment(key, -delta);
    154     }
    155     
    156     
    157     public boolean setNX(String key,String value, long expire) {
    158         try {
    159             RedisCallback<String> callback = (connection) -> {
    160                 JedisCommands commands = (JedisCommands) connection.getNativeConnection();
    161                 return commands.set(key, value, "NX", "PX", expire);
    162             };
    163             String result = redisTemplate.execute(callback);
    164             
    165             return !StringUtils.isEmpty(result);
    166         } catch (Exception e) {
    167             return false;
    168         }
    169     }
    170     
    171     public String getNX(String key) {
    172         try {
    173             RedisCallback<String> callback = (connection) -> {
    174                 JedisCommands commands = (JedisCommands) connection.getNativeConnection();
    175                 return commands.get(key);
    176             };
    177             String result = redisTemplate.execute(callback);
    178             
    179             return result;
    180         } catch (Exception e) {
    181             return "";
    182         }
    183     }
    184 
    185 
    186     // ================================Map=================================
    187     /**
    188      * HashGet
    189      * 
    190      * @param key
    191      *            键 不能为null
    192      * @param item
    193      *            项 不能为null
    194      * @return195      */
    196     public Object hget(String key, String item) {
    197         return redisTemplate.opsForHash().get(key, item);
    198     }
    199 
    200     /**
    201      * 获取hashKey对应的所有键值
    202      * 
    203      * @param key
    204      *            键
    205      * @return 对应的多个键值
    206      */
    207     public Map<Object, Object> hmget(String key) {
    208         return redisTemplate.opsForHash().entries(key);
    209     }
    210 
    211     /**
    212      * HashSet
    213      * 
    214      * @param key
    215      *            键
    216      * @param map
    217      *            对应多个键值
    218      * @return true 成功 false 失败
    219      */
    220     public boolean hmset(String key, Map<String, Object> map) {
    221         try {
    222             redisTemplate.opsForHash().putAll(key, map);
    223             return true;
    224         } catch (Exception e) {
    225             e.printStackTrace();
    226             return false;
    227         }
    228     }
    229 
    230     /**
    231      * HashSet 并设置时间
    232      * 
    233      * @param key
    234      *            键
    235      * @param map
    236      *            对应多个键值
    237      * @param time
    238      *            时间
    239      * @return true成功 false失败
    240      */
    241     public boolean hmset(String key, Map<String, Object> map, long time,TimeUnit timeUnit) {
    242         try {
    243             redisTemplate.opsForHash().putAll(key, map);
    244             if (time > 0) {
    245                 expire(key, time,timeUnit);
    246             }
    247             return true;
    248         } catch (Exception e) {
    249             e.printStackTrace();
    250             return false;
    251         }
    252     }
    253 
    254     /**
    255      * 向一张hash表中放入数据,如果不存在将创建
    256      * 
    257      * @param key
    258      *            键
    259      * @param item
    260      *            项
    261      * @param value
    262      *            值
    263      * @return true 成功 false失败
    264      */
    265     public boolean hset(String key, String item, Object value) {
    266         try {
    267             redisTemplate.opsForHash().put(key, item, value);
    268             return true;
    269         } catch (Exception e) {
    270             e.printStackTrace();
    271             return false;
    272         }
    273     }
    274 
    275     /**
    276      * 向一张hash表中放入数据,如果不存在将创建
    277      * 
    278      * @param key
    279      *            键
    280      * @param item
    281      *            项
    282      * @param value
    283      *            值
    284      * @param time
    285      *            时间 注意:如果已存在的hash表有时间,这里将会替换原有的时间
    286      * @return true 成功 false失败
    287      */
    288     public boolean hset(String key, String item, Object value, long time,TimeUnit timeUnit) {
    289         try {
    290             redisTemplate.opsForHash().put(key, item, value);
    291             if (time > 0) {
    292                 expire(key, time,timeUnit);
    293             }
    294             return true;
    295         } catch (Exception e) {
    296             e.printStackTrace();
    297             return false;
    298         }
    299     }
    300 
    301     /**
    302      * 删除hash表中的值
    303      * 
    304      * @param key
    305      *            键 不能为null
    306      * @param item
    307      *            项 可以使多个 不能为null
    308      */
    309     public void hdel(String key, Object... item) {
    310         redisTemplate.opsForHash().delete(key, item);
    311     }
    312 
    313     /**
    314      * 判断hash表中是否有该项的值
    315      * 
    316      * @param key
    317      *            键 不能为null
    318      * @param item
    319      *            项 不能为null
    320      * @return true 存在 false不存在
    321      */
    322     public boolean hHasKey(String key, String item) {
    323         return redisTemplate.opsForHash().hasKey(key, item);
    324     }
    325 
    326     /**
    327      * hash递增 如果不存在,就会创建一个 并把新增后的值返回
    328      * 
    329      * @param key
    330      *            键
    331      * @param item
    332      *            项
    333      * @param by
    334      *            要增加几(大于0)
    335      * @return
    336      */
    337     public double hincr(String key, String item, double by) {
    338         return redisTemplate.opsForHash().increment(key, item, by);
    339     }
    340 
    341     /**
    342      * hash递减
    343      * 
    344      * @param key
    345      *            键
    346      * @param item
    347      *            项
    348      * @param by
    349      *            要减少记(小于0)
    350      * @return
    351      */
    352     public double hdecr(String key, String item, double by) {
    353         return redisTemplate.opsForHash().increment(key, item, -by);
    354     }
    355 
    356     // ============================set=============================
    357     /**
    358      * 根据key获取Set中的所有值
    359      * 
    360      * @param key
    361      *            键
    362      * @return
    363      */
    364     public Set<Object> sGet(String key) {
    365         try {
    366             return redisTemplate.opsForSet().members(key);
    367         } catch (Exception e) {
    368             e.printStackTrace();
    369             return null;
    370         }
    371     }
    372 
    373     /**
    374      * 根据value从一个set中查询,是否存在
    375      * 
    376      * @param key
    377      *            键
    378      * @param value
    379      *            值
    380      * @return true 存在 false不存在
    381      */
    382     public boolean sHasKey(String key, Object value) {
    383         try {
    384             return redisTemplate.opsForSet().isMember(key, value);
    385         } catch (Exception e) {
    386             e.printStackTrace();
    387             return false;
    388         }
    389     }
    390 
    391     /**
    392      * 将数据放入set缓存
    393      * 
    394      * @param key
    395      *            键
    396      * @param values
    397      *            值 可以是多个
    398      * @return 成功个数
    399      */
    400     public long sSet(String key, Object... values) {
    401         try {
    402             return redisTemplate.opsForSet().add(key, values);
    403         } catch (Exception e) {
    404             e.printStackTrace();
    405             return 0;
    406         }
    407     }
    408 
    409     /**
    410      * 将set数据放入缓存
    411      * 
    412      * @param key
    413      *            键
    414      * @param time
    415      *            时间
    416      * @param values
    417      *            值 可以是多个
    418      * @return 成功个数
    419      */
    420     public long sSetAndTime(String key, long time,TimeUnit timeUnit, Object... values) {
    421         try {
    422             Long count = redisTemplate.opsForSet().add(key, values);
    423             if (time > 0)
    424                 expire(key, time,timeUnit);
    425             return count;
    426         } catch (Exception e) {
    427             e.printStackTrace();
    428             return 0;
    429         }
    430     }
    431 
    432     /**
    433      * 获取set缓存的长度
    434      * 
    435      * @param key
    436      *            键
    437      * @return
    438      */
    439     public long sGetSetSize(String key) {
    440         try {
    441             return redisTemplate.opsForSet().size(key);
    442         } catch (Exception e) {
    443             e.printStackTrace();
    444             return 0;
    445         }
    446     }
    447 
    448     /**
    449      * 移除值为value的
    450      * 
    451      * @param key
    452      *            键
    453      * @param values
    454      *            值 可以是多个
    455      * @return 移除的个数
    456      */
    457     public long setRemove(String key, Object... values) {
    458         try {
    459             Long count = redisTemplate.opsForSet().remove(key, values);
    460             return count;
    461         } catch (Exception e) {
    462             e.printStackTrace();
    463             return 0;
    464         }
    465     }
    466     // ===============================list=================================
    467 
    468     /**
    469      * 获取list缓存的内容
    470      * 
    471      * @param key
    472      *            键
    473      * @param start
    474      *            开始
    475      * @param end
    476      *            结束 0 到 -1代表所有值
    477      * @return
    478      */
    479     public List<Object> lGet(String key, long start, long end) {
    480         try {
    481             return redisTemplate.opsForList().range(key, start, end);
    482         } catch (Exception e) {
    483             e.printStackTrace();
    484             return null;
    485         }
    486     }
    487 
    488     /**
    489      * 获取list缓存的长度
    490      * 
    491      * @param key
    492      *            键
    493      * @return
    494      */
    495     public long lGetListSize(String key) {
    496         try {
    497             return redisTemplate.opsForList().size(key);
    498         } catch (Exception e) {
    499             e.printStackTrace();
    500             return 0;
    501         }
    502     }
    503 
    504     /**
    505      * 通过索引 获取list中的值
    506      * 
    507      * @param key
    508      *            键
    509      * @param index
    510      *            索引 index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推
    511      * @return
    512      */
    513     public Object lGetIndex(String key, long index) {
    514         try {
    515             return redisTemplate.opsForList().index(key, index);
    516         } catch (Exception e) {
    517             e.printStackTrace();
    518             return null;
    519         }
    520     }
    521 
    522     /**
    523      * 将list放入缓存
    524      * 
    525      * @param key
    526      *            键
    527      * @param value
    528      *            值
    529      * @param time
    530      *            时间
    531      * @return
    532      */
    533     public boolean lSet(String key, Object value) {
    534         try {
    535             redisTemplate.opsForList().rightPush(key, value);
    536             return true;
    537         } catch (Exception e) {
    538             e.printStackTrace();
    539             return false;
    540         }
    541     }
    542 
    543     /**
    544      * 将list放入缓存
    545      * 
    546      * @param key
    547      *            键
    548      * @param value
    549      *            值
    550      * @param time
    551      *            时间
    552      * @return
    553      */
    554     public boolean lSet(String key, Object value, long time,TimeUnit timeUnit) {
    555         try {
    556             redisTemplate.opsForList().rightPush(key, value);
    557             if (time > 0)
    558                 expire(key, time,timeUnit);
    559             return true;
    560         } catch (Exception e) {
    561             e.printStackTrace();
    562             return false;
    563         }
    564     }
    565 
    566     /**
    567      * 将list放入缓存
    568      * 
    569      * @param key
    570      *            键
    571      * @param value
    572      *            值
    573      * @param time
    574      *            时间
    575      * @return
    576      */
    577     public boolean lSet(String key, List<Object> value) {
    578         try {
    579             redisTemplate.opsForList().rightPushAll(key, value);
    580             return true;
    581         } catch (Exception e) {
    582             e.printStackTrace();
    583             return false;
    584         }
    585     }
    586 
    587     /**
    588      * 将list放入缓存
    589      * 
    590      * @param key
    591      *            键
    592      * @param value
    593      *            值
    594      * @param time
    595      *            时间
    596      * @return
    597      */
    598     public boolean lSet(String key, List<Object> value, long time,TimeUnit timeUnit) {
    599         try {
    600             redisTemplate.opsForList().rightPushAll(key, value);
    601             if (time > 0)
    602                 expire(key, time,timeUnit);
    603             return true;
    604         } catch (Exception e) {
    605             e.printStackTrace();
    606             return false;
    607         }
    608     }
    609 
    610     /**
    611      * 根据索引修改list中的某条数据
    612      * 
    613      * @param key
    614      *            键
    615      * @param index
    616      *            索引
    617      * @param value
    618      *            值
    619      * @return
    620      */
    621     public boolean lUpdateIndex(String key, long index, Object value) {
    622         try {
    623             redisTemplate.opsForList().set(key, index, value);
    624             return true;
    625         } catch (Exception e) {
    626             e.printStackTrace();
    627             return false;
    628         }
    629     }
    630 
    631     /**
    632      * 移除N个值为value
    633      * 
    634      * @param key
    635      *            键
    636      * @param count
    637      *            移除多少个
    638      * @param value
    639      *            值
    640      * @return 移除的个数
    641      */
    642     public long lRemove(String key, long count, Object value) {
    643         try {
    644             Long remove = redisTemplate.opsForList().remove(key, count, value);
    645             return remove;
    646         } catch (Exception e) {
    647             e.printStackTrace();
    648             return 0;
    649         }
    650     }
    651     
    652     
    653 }
    工具类

    然后在需要用到redis的地方就直接调用我们的工具类中的方法就好了。

  • 相关阅读:
    element-ui 设置input的只读或禁用
    vue 获取后端数据打印结果undefined问题
    用yaml来编写配置文件
    [LeetCode] 28. 实现strStr()
    [LeetCode] 25. k个一组翻转链表
    [LeetCode] 26. 删除排序数组中的重复项
    [LeetCode] 24. 两两交换链表中的节点
    [LeetCode] 23. 合并K个排序链表
    [LeetCode] 21. 合并两个有序链表
    [LeetCode] 22. 括号生成
  • 原文地址:https://www.cnblogs.com/rolayblog/p/11176341.html
Copyright © 2011-2022 走看看