【轉】ring-data-redis1.8簡單封裝(支持geo)

  • 其實spring-data-redis中的RedisTemplate更強大全面,應公司要求,稍微簡化
  • Java代碼  
    1. package com.ybdc.yy.base.basis.service.impl;  
    2.   
    3. import java.util.List;  
    4. import java.util.Map;  
    5. import java.util.Set;  
    6. import java.util.concurrent.TimeUnit;  
    7.   
    8. import org.slf4j.Logger;  
    9. import org.slf4j.LoggerFactory;  
    10. import org.springframework.data.domain.Sort.Direction;  
    11. import org.springframework.data.geo.Circle;  
    12. import org.springframework.data.geo.Distance;  
    13. import org.springframework.data.geo.GeoResults;  
    14. import org.springframework.data.geo.Point;  
    15. import org.springframework.data.redis.connection.RedisGeoCommands.DistanceUnit;  
    16. import org.springframework.data.redis.connection.RedisGeoCommands.GeoLocation;  
    17. import org.springframework.data.redis.connection.RedisGeoCommands.GeoRadiusCommandArgs;  
    18. import org.springframework.data.redis.core.GeoOperations;  
    19. import org.springframework.data.redis.core.HashOperations;  
    20. import org.springframework.data.redis.core.ListOperations;  
    21. import org.springframework.data.redis.core.RedisTemplate;  
    22. import org.springframework.data.redis.core.SetOperations;  
    23. import org.springframework.data.redis.core.ValueOperations;  
    24.   
    25. /** 
    26.  *  
    27.  * @ClassName:RedisService 
    28.  * @Description:redis操作Dao:依賴spring-data-redis1.8.3,jedis2.9.0 
    29.  * @Author:chenchuanliang 
    30.  * @Date:2017年5月18日下午1:03:03 
    31.  * @version:1.0.0 
    32.  */  
    33. public class RedisService {  
    34.     /** 
    35.      * 日誌記錄 
    36.      */  
    37.     private static final Logger logger = LoggerFactory.getLogger(RedisService.class);  
    38.       
    39.     public RedisTemplate<String, String> redisTemplate;  
    40.       
    41.     public RedisTemplate<String, String> getRedisTemplate() {  
    42.         return redisTemplate;  
    43.     }  
    44.   
    45.     public void setRedisTemplate(RedisTemplate<String, String> redisTemplate) {  
    46.         this.redisTemplate = redisTemplate;  
    47.     }  
    48.   
    49.     /** 
    50.      * 前綴 
    51.      */  
    52.     public static final String KEY_PREFIX_VALUE = "yb:value:";  
    53.     public static final String KEY_PREFIX_SET = "yb:set:";  
    54.     public static final String KEY_PREFIX_LIST = "yb:list:";  
    55.     public static final String KEY_PREFIX_HASH = "yb:hash:";  
    56.     public static final String KEY_PREFIX_GEO = "yb:geo:";  
    57.   
    58.   /** 
    59.    *  
    60.    * @MethodName:cacheValue 
    61.    * @param k 
    62.    * @param v 
    63.    * @param time(單位秒)  <=0 不過期 
    64.    * @return 
    65.    * @ReturnType:boolean 
    66.    * @Description:緩存value操作 
    67.    * @Creator:chenchuanliang 
    68.    * @CreateTime:2017年5月18日上午11:24:56 
    69.    * @Modifier: 
    70.    * @ModifyTime: 
    71.    */  
    72.     public boolean cacheValue(String k, String v, long time) {  
    73.         String key = KEY_PREFIX_VALUE + k;  
    74.         try {  
    75.             ValueOperations<String, String> valueOps =  redisTemplate.opsForValue();  
    76.             valueOps.set(key, v);  
    77.             if (time > 0) redisTemplate.expire(key, time, TimeUnit.SECONDS);  
    78.             return true;  
    79.         } catch (Throwable t) {  
    80.             logger.error("緩存[" + key + "]失敗, value[" + v + "]", t);  
    81.         }  
    82.         return false;  
    83.     }  
    84.   
    85.   /** 
    86.    *  
    87.    * @MethodName:cacheValue 
    88.    * @param k 
    89.    * @param v 
    90.    * @return 
    91.    * @ReturnType:boolean 
    92.    * @Description:緩存value操作 
    93.    * @Creator:chenchuanliang 
    94.    * @CreateTime:2017年5月18日上午11:24:43 
    95.    * @Modifier: 
    96.    * @ModifyTime: 
    97.    */  
    98.     public boolean cacheValue(String k, String v) {  
    99.         return cacheValue(k, v, -1);  
    100.     }  
    101.   
    102.     /** 
    103.      *  
    104.      * @MethodName:getValue 
    105.      * @param k 
    106.      * @return 
    107.      * @ReturnType:String 
    108.      * @Description:獲取緩存 
    109.      * @Creator:chenchuanliang 
    110.      * @CreateTime:2017年5月18日上午11:21:37 
    111.      * @Modifier: 
    112.      * @ModifyTime: 
    113.      */  
    114.     public String getValue(String k) {  
    115.         String key = KEY_PREFIX_VALUE + k;  
    116.         try {  
    117.             ValueOperations<String, String> valueOps =  redisTemplate.opsForValue();  
    118.             return valueOps.get(key);  
    119.         } catch (Throwable t) {  
    120.             logger.error("獲取緩存失敗key[" + key + ", error[" + t + "]");  
    121.         }  
    122.         return null;  
    123.     }  
    124.     
    125.     /** 
    126.     *  
    127.     * @MethodName:cacheSet 
    128.     * @param k 
    129.     * @param v 
    130.     * @param time 
    131.     * @return 
    132.     * @ReturnType:boolean 
    133.     * @Description:緩存set操作 
    134.     * @Creator:chenchuanliang 
    135.     * @CreateTime:2017年5月18日上午11:20:00 
    136.     * @Modifier: 
    137.     * @ModifyTime: 
    138.     */  
    139.     public boolean cacheSet(String k, String v, long time) {  
    140.         String key = KEY_PREFIX_SET + k;  
    141.         try {  
    142.             SetOperations<String, String> valueOps =  redisTemplate.opsForSet();  
    143.             valueOps.add(key, v);  
    144.             if (time > 0) redisTemplate.expire(key, time, TimeUnit.SECONDS);  
    145.         } catch (Throwable t) {  
    146.             logger.error("緩存[" + key + "]失敗, value[" + v + "]", t);  
    147.         }  
    148.         return true;  
    149.     }  
    150.   
    151.    /** 
    152.     *  
    153.     * @MethodName:cacheSet 
    154.     * @param k 
    155.     * @param v 
    156.     * @return 
    157.     * @ReturnType:boolean 
    158.     * @Description:緩存set 
    159.     * @Creator:chenchuanliang 
    160.     * @CreateTime:2017年5月18日上午11:19:00 
    161.     * @Modifier: 
    162.     * @ModifyTime: 
    163.     */  
    164.     public boolean cacheSet(String k, String v) {  
    165.         return cacheSet(k, v, -1);  
    166.     }  
    167.   
    168.    /** 
    169.     *  
    170.     * @MethodName:cacheSet 
    171.     * @param k 
    172.     * @param v 
    173.     * @param time 
    174.     * @return 
    175.     * @ReturnType:boolean 
    176.     * @Description:緩存set 
    177.     * @Creator:chenchuanliang 
    178.     * @CreateTime:2017年5月18日上午11:18:48 
    179.     * @Modifier: 
    180.     * @ModifyTime: 
    181.     */  
    182.     public boolean cacheSet(String k, Set<String> v, long time) {  
    183.         String key = KEY_PREFIX_SET + k;  
    184.         try {  
    185.             SetOperations<String, String> setOps =  redisTemplate.opsForSet();  
    186.             setOps.add(key, v.toArray(new String[v.size()]));  
    187.             if (time > 0) redisTemplate.expire(key, time, TimeUnit.SECONDS);  
    188.             return true;  
    189.         } catch (Throwable t) {  
    190.             logger.error("緩存[" + key + "]失敗, value[" + v + "]", t);  
    191.         }  
    192.         return false;  
    193.     }  
    194.   
    195.     /** 
    196.      *  
    197.      * @MethodName:cacheSet 
    198.      * @param k 
    199.      * @param v 
    200.      * @return 
    201.      * @ReturnType:boolean 
    202.      * @Description:緩存set 
    203.      * @Creator:chenchuanliang 
    204.      * @CreateTime:2017年5月18日上午11:18:34 
    205.      * @Modifier: 
    206.      * @ModifyTime: 
    207.      */  
    208.     public boolean cacheSet(String k, Set<String> v) {  
    209.         return cacheSet(k, v, -1);  
    210.     }  
    211.   
    212.   /** 
    213.    *  
    214.    * @MethodName:getSet 
    215.    * @param k 
    216.    * @return 
    217.    * @ReturnType:Set<String> 
    218.    * @Description:獲取緩存set數據 
    219.    * @Creator:chenchuanliang 
    220.    * @CreateTime:2017年5月18日上午11:17:45 
    221.    * @Modifier: 
    222.    * @ModifyTime: 
    223.    */  
    224.     public Set<String> getSet(String k) {  
    225.         String key = KEY_PREFIX_SET + k;  
    226.         try {  
    227.             SetOperations<String, String> setOps = redisTemplate.opsForSet();  
    228.             return setOps.members(key);  
    229.         } catch (Throwable t) {  
    230.             logger.error("獲取set緩存失敗key[" + key + ", error[" + t + "]");  
    231.         }  
    232.         return null;  
    233.     }  
    234.   
    235.    /** 
    236.     *  
    237.     * @MethodName:cacheList 
    238.     * @param k 
    239.     * @param v 
    240.     * @param time 
    241.     * @return 
    242.     * @ReturnType:boolean 
    243.     * @Description:list緩存 
    244.     * @Creator:chenchuanliang 
    245.     * @CreateTime:2017年5月18日上午11:17:23 
    246.     * @Modifier: 
    247.     * @ModifyTime: 
    248.     */  
    249.     public boolean cacheList(String k, String v, long time) {  
    250.         String key = KEY_PREFIX_LIST + k;  
    251.         try {  
    252.             ListOperations<String, String> listOps =  redisTemplate.opsForList();  
    253.             listOps.rightPush(key, v);  
    254.             if (time > 0) redisTemplate.expire(key, time, TimeUnit.SECONDS);  
    255.             return true;  
    256.         } catch (Throwable t) {  
    257.             logger.error("緩存[" + key + "]失敗, value[" + v + "]", t);  
    258.         }  
    259.         return false;  
    260.     }  
    261.   
    262.    /** 
    263.     *  
    264.     * @MethodName:cacheList 
    265.     * @param k 
    266.     * @param v 
    267.     * @return 
    268.     * @ReturnType:boolean 
    269.     * @Description:緩存list 
    270.     * @Creator:chenchuanliang 
    271.     * @CreateTime:2017年5月18日上午11:17:10 
    272.     * @Modifier: 
    273.     * @ModifyTime: 
    274.     */  
    275.     public boolean cacheList(String k, String v) {  
    276.         return cacheList(k, v, -1);  
    277.     }  
    278.   
    279.   /** 
    280.    *  
    281.    * @MethodName:cacheList 
    282.    * @param k 
    283.    * @param v 
    284.    * @param time 
    285.    * @return 
    286.    * @ReturnType:boolean 
    287.    * @Description:緩存list 
    288.    * @Creator:chenchuanliang 
    289.    * @CreateTime:2017年5月18日上午11:15:47 
    290.    * @Modifier: 
    291.    * @ModifyTime: 
    292.    */  
    293.     public boolean cacheList(String k, List<String> v, long time) {  
    294.         String key = KEY_PREFIX_LIST + k;  
    295.         try {  
    296.             ListOperations<String, String> listOps =  redisTemplate.opsForList();  
    297.             listOps.rightPushAll(key, v);  
    298.             if (time > 0) redisTemplate.expire(key, time, TimeUnit.SECONDS);  
    299.             return true;  
    300.         } catch (Throwable t) {  
    301.             logger.error("緩存[" + key + "]失敗, value[" + v + "]", t);  
    302.         }  
    303.         return false;  
    304.     }  
    305.   
    306.     /** 
    307.      *  
    308.      * @MethodName:cacheList 
    309.      * @param k 
    310.      * @param v 
    311.      * @return 
    312.      * @ReturnType:boolean 
    313.      * @Description:緩存list 
    314.      * @Creator:chenchuanliang 
    315.      * @CreateTime:2017年5月18日上午11:15:05 
    316.      * @Modifier: 
    317.      * @ModifyTime: 
    318.      */  
    319.     public boolean cacheList(String k, List<String> v) {  
    320.        return cacheList(k, v, -1);  
    321.     }  
    322.   
    323.    /** 
    324.     *  
    325.     * @MethodName:getList 
    326.     * @param k 
    327.     * @param start 
    328.     * @param end 
    329.     * @return 
    330.     * @ReturnType:List<String> 
    331.     * @Description:獲取list緩存 
    332.     * @Creator:chenchuanliang 
    333.     * @CreateTime:2017年5月18日上午11:14:45 
    334.     * @Modifier: 
    335.     * @ModifyTime: 
    336.     */  
    337.     public List<String> getList(String k, long start, long end) {  
    338.         String key = KEY_PREFIX_LIST + k;  
    339.         try {  
    340.             ListOperations<String, String> listOps =  redisTemplate.opsForList();  
    341.             return listOps.range(key, start, end);  
    342.         } catch (Throwable t) {  
    343.             logger.error("獲取list緩存失敗key[" + key + "]" + ", error[" + t + "]");  
    344.         }  
    345.         return null;  
    346.     }  
    347.   
    348.     /** 
    349.      *  
    350.      * @MethodName:getListSize 
    351.      * @param k 
    352.      * @return 
    353.      * @ReturnType:long 
    354.      * @Description:獲取總條數 
    355.      * @Creator:chenchuanliang 
    356.      * @CreateTime:2017年5月18日上午11:13:39 
    357.      * @Modifier: 
    358.      * @ModifyTime: 
    359.      */  
    360.     public long getListSize(String k) {  
    361.         String key = KEY_PREFIX_LIST + k;  
    362.         try {  
    363.             ListOperations<String, String> listOps =  redisTemplate.opsForList();  
    364.             return listOps.size(key);  
    365.         } catch (Throwable t) {  
    366.             logger.error("獲取list長度失敗key[" + key + "], error[" + t + "]");  
    367.         }  
    368.         return 0;  
    369.     }  
    370.   
    371.    /** 
    372.     *  
    373.     * @MethodName:removeOneOfList 
    374.     * @param k 
    375.     * @return 
    376.     * @ReturnType:boolean 
    377.     * @Description:移除list緩存 
    378.     * @Creator:chenchuanliang 
    379.     * @CreateTime:2017年5月18日上午11:11:16 
    380.     * @Modifier: 
    381.     * @ModifyTime: 
    382.     */  
    383.     public boolean removeOneOfList(String k) {  
    384.         String key = KEY_PREFIX_LIST + k;  
    385.         try {  
    386.             ListOperations<String, String> listOps =  redisTemplate.opsForList();  
    387.             listOps.rightPop(key);  
    388.             return true;  
    389.         } catch (Throwable t) {  
    390.             logger.error("移除list緩存失敗key[" + key + ", error[" + t + "]");  
    391.         }  
    392.         return false;  
    393.     }  
    394.       
    395.     /** 
    396.      *  
    397.      * @MethodName:cacheGeo 
    398.      * @param key 
    399.      * @param x 
    400.      * @param y 
    401.      * @param member 
    402.      * @param time(單位秒)  <=0 不過期 
    403.      * @return 
    404.      * @ReturnType:boolean 
    405.      * @Description:緩存地理位置信息 
    406.      * @Creator:chenchuanliang 
    407.      * @CreateTime:2017年5月18日上午11:30:23 
    408.      * @Modifier: 
    409.      * @ModifyTime: 
    410.      */  
    411.     public boolean cacheGeo(String k, double x, double y, String member, long time) {  
    412.         String key = KEY_PREFIX_GEO + k;  
    413.         try {  
    414.             GeoOperations<String, String> geoOps = redisTemplate.opsForGeo();  
    415.             geoOps.geoAdd(key, new Point(x, y) , member);  
    416.             if (time > 0) redisTemplate.expire(key, time, TimeUnit.SECONDS);  
    417.         } catch (Throwable t) {  
    418.             logger.error("緩存[" + key +"]" + "失敗, point["+ x + "," +   
    419.                     y + "], member[" + member + "]" +", error[" + t + "]");  
    420.         }  
    421.         return true;  
    422.     }  
    423.       
    424.     /** 
    425.      *  
    426.      * @MethodName:cacheGeo 
    427.      * @param key 
    428.      * @param locations 
    429.      * @param time(單位秒)  <=0 不過期 
    430.      * @return 
    431.      * @ReturnType:boolean 
    432.      * @Description: 
    433.      * @Creator:chenchuanliang 
    434.      * @CreateTime:2017年5月18日上午11:31:33 
    435.      * @Modifier: 
    436.      * @ModifyTime: 
    437.      */  
    438.     public boolean cacheGeo(String k, Iterable<GeoLocation<String>> locations, long time) {  
    439.         try {  
    440.             for (GeoLocation<String> location : locations) {  
    441.                 cacheGeo(k, location.getPoint().getX(), location.getPoint().getY(), location.getName(), time);  
    442.             }  
    443.         } catch (Throwable t) {  
    444.             logger.error("緩存[" + KEY_PREFIX_GEO + k + "]" + "失敗" +", error[" + t + "]");  
    445.         }  
    446.         return true;  
    447.     }  
    448.       
    449.     /** 
    450.      *  
    451.      * @MethodName:removeGeo 
    452.      * @param key 
    453.      * @param members 
    454.      * @return 
    455.      * @ReturnType:boolean 
    456.      * @Description:移除地理位置信息 
    457.      * @Creator:chenchuanliang 
    458.      * @CreateTime:2017年5月18日上午10:53:01 
    459.      * @Modifier: 
    460.      * @ModifyTime: 
    461.      */  
    462.     public boolean removeGeo(String k, String...members) {  
    463.         String key = KEY_PREFIX_GEO + k;  
    464.         try {  
    465.             GeoOperations<String, String> geoOps = redisTemplate.opsForGeo();  
    466.             geoOps.geoRemove(key, members);  
    467.         } catch (Throwable t) {  
    468.             logger.error("移除[" + key +"]" + "失敗" +", error[" + t + "]");  
    469.         }  
    470.         return true;  
    471.     }  
    472.       
    473.     /** 
    474.      *  
    475.      * @MethodName:distanceGeo 
    476.      * @param key 
    477.      * @param member1 
    478.      * @param member2 
    479.      * @return Distance 
    480.      * @ReturnType:Distance 
    481.      * @Description:根據兩個成員計算兩個成員之間距離 
    482.      * @Creator:chenchuanliang 
    483.      * @CreateTime:2017年5月18日上午10:58:33 
    484.      * @Modifier: 
    485.      * @ModifyTime: 
    486.      */  
    487.     public Distance distanceGeo(String k, String member1, String member2) {  
    488.         String key = KEY_PREFIX_GEO + k;  
    489.         try {  
    490.             GeoOperations<String, String> geoOps = redisTemplate.opsForGeo();  
    491.             return geoOps.geoDist(key, member1, member2);  
    492.         } catch (Throwable t) {  
    493.             logger.error("計算距離[" + key +"]" + "失敗, member[" + member1 + "," + member2 +"], error[" + t + "]");  
    494.         }  
    495.         return null;  
    496.     }  
    497.       
    498.     /** 
    499.      *  
    500.      * @MethodName:getGeo 
    501.      * @param key 
    502.      * @param members 
    503.      * @return 
    504.      * @ReturnType:List<Point> 
    505.      * @Description:根據key和member獲取這些member的座標信息 
    506.      * @Creator:chenchuanliang 
    507.      * @CreateTime:2017年5月18日上午11:02:01 
    508.      * @Modifier: 
    509.      * @ModifyTime: 
    510.      */  
    511.     public List<Point> getGeo(String k, String...members) {  
    512.         String key = KEY_PREFIX_GEO + k;  
    513.         try {  
    514.             GeoOperations<String, String> geoOps = redisTemplate.opsForGeo();  
    515.             return geoOps.geoPos(key, members);  
    516.         } catch (Throwable t) {  
    517.             logger.error("獲取座標[" + key +"]" + "失敗]" + ", error[" + t + "]");  
    518.         }  
    519.         return null;  
    520.     }  
    521.       
    522.     /** 
    523.      *  
    524.      * @MethodName:radiusGeo 
    525.      * @param key 
    526.      * @param x 
    527.      * @param y 
    528.      * @param distance km 
    529.      * @return 
    530.      * @ReturnType:GeoResults<GeoLocation<String>> 
    531.      * @Description:通過給定的座標和距離(km)獲取範圍類其它的座標信息 
    532.      * @Creator:chenchuanliang 
    533.      * @CreateTime:2017年5月18日上午11:09:10 
    534.      * @Modifier: 
    535.      * @ModifyTime: 
    536.      */  
    537.     public GeoResults<GeoLocation<String>> radiusGeo(String key, double x, double y, double distance, Direction direction, long limit) {  
    538.         try {  
    539.             String k = KEY_PREFIX_GEO + key;  
    540.             GeoOperations<String, String> geoOps = redisTemplate.opsForGeo();  
    541.               
    542.             //設置geo查詢參數  
    543.             GeoRadiusCommandArgs geoRadiusArgs = GeoRadiusCommandArgs.newGeoRadiusArgs();  
    544.             geoRadiusArgs = geoRadiusArgs.includeCoordinates().includeDistance();//查詢返回結果包括距離和座標  
    545.             if (Direction.ASC.equals(direction)) {//按查詢出的座標距離中心座標的距離進行排序  
    546.                 geoRadiusArgs.sortAscending();  
    547.             } else if (Direction.DESC.equals(direction)) {  
    548.                 geoRadiusArgs.sortDescending();  
    549.             }  
    550.             geoRadiusArgs.limit(limit);//限制查詢數量  
    551.             GeoResults<GeoLocation<String>> radiusGeo = geoOps.geoRadius(k, new Circle(new Point(x, y), new Distance(distance, DistanceUnit.METERS)), geoRadiusArgs);  
    552.               
    553.             return radiusGeo;  
    554.         } catch (Throwable t) {  
    555.             logger.error("通過座標[" + x + "," + y +"]獲取範圍[" + distance + "km的其它座標失敗]" + ", error[" + t + "]");  
    556.         }  
    557.         return null;  
    558.     }  
    559.       
    560.     /** 
    561.      *  
    562.      * @MethodName:containsListKey 
    563.      * @param k 
    564.      * @return 
    565.      * @ReturnType:boolean 
    566.      * @Description:判斷緩存是否存在 
    567.      * @Creator:chenchuanliang 
    568.      * @CreateTime:2017年5月18日上午11:23:37 
    569.      * @Modifier: 
    570.      * @ModifyTime: 
    571.      */  
    572.     public boolean containsValueKey(String k) {  
    573.         return containsKey(KEY_PREFIX_VALUE + k);  
    574.     }  
    575.   
    576.     /** 
    577.      *  
    578.      * @MethodName:containsListKey 
    579.      * @param k 
    580.      * @return 
    581.      * @ReturnType:boolean 
    582.      * @Description:判斷緩存是否存在 
    583.      * @Creator:chenchuanliang 
    584.      * @CreateTime:2017年5月18日上午11:23:37 
    585.      * @Modifier: 
    586.      * @ModifyTime: 
    587.      */  
    588.     public boolean containsSetKey(String k) {  
    589.         return containsKey(KEY_PREFIX_SET + k);  
    590.     }  
    591.   
    592.    /** 
    593.     *  
    594.     * @MethodName:containsListKey 
    595.     * @param k 
    596.     * @return 
    597.     * @ReturnType:boolean 
    598.     * @Description:判斷緩存是否存在 
    599.     * @Creator:chenchuanliang 
    600.     * @CreateTime:2017年5月18日上午11:23:37 
    601.     * @Modifier: 
    602.     * @ModifyTime: 
    603.     */  
    604.     public boolean containsListKey(String k) {  
    605.         return containsKey(KEY_PREFIX_LIST + k);  
    606.     }  
    607.       
    608.     /** 
    609.      *  
    610.      * @MethodName:containsGeoKey 
    611.      * @param k 
    612.      * @return 
    613.      * @ReturnType:boolean 
    614.      * @Description:判斷緩存是否存在 
    615.      * @Creator:chenchuanliang 
    616.      * @CreateTime:2017年5月18日上午11:34:14 
    617.      * @Modifier: 
    618.      * @ModifyTime: 
    619.      */  
    620.     public boolean containsGeoKey(String k) {  
    621.         return containsKey(KEY_PREFIX_GEO + k);  
    622.     }  
    623.   
    624.     private boolean containsKey(String key) {  
    625.         try {  
    626.             return redisTemplate.hasKey(key);  
    627.         } catch (Throwable t) {  
    628.             logger.error("判斷緩存存在失敗key[" + key + ", error[" + t + "]");  
    629.         }  
    630.         return false;  
    631.     }  
    632.       
    633.     /** 
    634.      *  
    635.      * @MethodName:remove 
    636.      * @param key 
    637.      * @return 
    638.      * @ReturnType:boolean 
    639.      * @Description:移除key中所有緩存 
    640.      * @Creator:chenchuanliang 
    641.      * @CreateTime:2017年5月18日上午11:20:19 
    642.      * @Modifier: 
    643.      * @ModifyTime: 
    644.      */  
    645.     public boolean removeValue(String k) {  
    646.         return remove(KEY_PREFIX_VALUE + k);  
    647.     }  
    648.       
    649.     /** 
    650.      *  
    651.      * @MethodName:remove 
    652.      * @param key 
    653.      * @return 
    654.      * @ReturnType:boolean 
    655.      * @Description:移除key中所有緩存 
    656.      * @Creator:chenchuanliang 
    657.      * @CreateTime:2017年5月18日上午11:20:19 
    658.      * @Modifier: 
    659.      * @ModifyTime: 
    660.      */  
    661.     public boolean removeSet(String k) {  
    662.         return remove(KEY_PREFIX_SET + k);  
    663.     }  
    664.       
    665.     /** 
    666.      *  
    667.      * @MethodName:remove 
    668.      * @param key 
    669.      * @return 
    670.      * @ReturnType:boolean 
    671.      * @Description:移除key中所有緩存 
    672.      * @Creator:chenchuanliang 
    673.      * @CreateTime:2017年5月18日上午11:20:19 
    674.      * @Modifier: 
    675.      * @ModifyTime: 
    676.      */  
    677.     public boolean removeList(String k) {  
    678.         return remove(KEY_PREFIX_LIST + k);  
    679.     }  
    680.       
    681.     /** 
    682.      *  
    683.      * @MethodName:removeGeo 
    684.      * @param k 
    685.      * @return 
    686.      * @ReturnType:boolean 
    687.      * @Description:移除key中所有緩存 
    688.      * @Creator:chenchuanliang 
    689.      * @CreateTime:2017年5月18日上午11:36:23 
    690.      * @Modifier: 
    691.      * @ModifyTime: 
    692.      */  
    693.     public boolean removeGeo(String k) {  
    694.         return remove(KEY_PREFIX_GEO + k);  
    695.     }  
    696.       
    697.     private boolean remove(String key) {  
    698.         try {  
    699.             redisTemplate.delete(key);  
    700.             return true;  
    701.         } catch (Throwable t) {  
    702.             logger.error("移除緩存失敗key[" + key + ", error[" + t + "]");  
    703.         }  
    704.         return false;  
    705.     }  
    706.       
    707.     /** 
    708.      * 緩存一個hash鍵值對到hash表 
    709.      * @MethodName:cacheHash 
    710.      * @param key 
    711.      * @param hashKey 
    712.      * @param value 
    713.      * @param time 
    714.      * @return 
    715.      * @ReturnType:boolean 
    716.      * @Description: 
    717.      * @Creator:chenchuanliang 
    718.      * @CreateTime:2017年6月27日上午10:43:25 
    719.      * @Modifier: 
    720.      * @ModifyTime: 
    721.      */  
    722.     public boolean cacheHash(String key, String hashKey, String value, long time){  
    723.         try {  
    724.             key = KEY_PREFIX_HASH + key;  
    725.             HashOperations<String, String, String> opsForHash = redisTemplate.opsForHash();  
    726.             opsForHash.put(key, hashKey, value);  
    727.             if (time > 0) redisTemplate.expire(key, time, TimeUnit.SECONDS);  
    728.             return true;  
    729.         } catch (Exception e) {  
    730.             logger.error("緩存失敗key[" + key + ", error[" + e + "]");  
    731.         }  
    732.         return false;  
    733.     }  
    734.       
    735.     /** 
    736.      * 緩存一個map到hash表 
    737.      * @MethodName:cacheHash 
    738.      * @param key 
    739.      * @param map 
    740.      * @param time 
    741.      * @return 
    742.      * @ReturnType:boolean 
    743.      * @Description: 
    744.      * @Creator:chenchuanliang 
    745.      * @CreateTime:2017年6月27日上午10:45:27 
    746.      * @Modifier: 
    747.      * @ModifyTime: 
    748.      */  
    749.     public boolean cacheHash(String key, Map<String, String> map, long time){  
    750.         try {  
    751.             key = KEY_PREFIX_HASH + key;  
    752.             HashOperations<String, String, String> opsForHash = redisTemplate.opsForHash();  
    753.             opsForHash.putAll(key, map);  
    754.             if (time > 0) redisTemplate.expire(key, time, TimeUnit.SECONDS);  
    755.             return true;  
    756.         } catch (Exception e) {  
    757.             logger.error("緩存失敗key[" + key + ", error[" + e + "]");  
    758.         }  
    759.         return false;  
    760.     }  
    761.       
    762.     /** 
    763.      * 通過key獲取一個map 
    764.      * @MethodName:getHash 
    765.      * @param key 
    766.      * @return 
    767.      * @ReturnType:Map<String,String> 
    768.      * @Description: 
    769.      * @Creator:chenchuanliang 
    770.      * @CreateTime:2017年6月27日上午10:48:21 
    771.      * @Modifier: 
    772.      * @ModifyTime: 
    773.      */  
    774.     public Map<String, String> getHash(String key){  
    775.         try {  
    776.             key = KEY_PREFIX_HASH + key;  
    777.             HashOperations<String, String, String> opsForHash = redisTemplate.opsForHash();  
    778.             return opsForHash.entries(key);  
    779.         } catch (Exception e) {  
    780.             logger.error("獲取緩存失敗key[" + key + ", error[" + e + "]");  
    781.         }  
    782.         return null;  
    783.     }  
    784.       
    785.     /** 
    786.      * 獲取key對應map中所有的keys 
    787.      * @MethodName:getHashKey 
    788.      * @param key 
    789.      * @return 
    790.      * @ReturnType:Set<String> 
    791.      * @Description: 
    792.      * @Creator:chenchuanliang 
    793.      * @CreateTime:2017年6月27日上午10:49:16 
    794.      * @Modifier: 
    795.      * @ModifyTime: 
    796.      */  
    797.     public Set<String> getHashKey(String key){  
    798.         try {  
    799.             key = KEY_PREFIX_HASH + key;  
    800.             HashOperations<String, String, String> opsForHash = redisTemplate.opsForHash();  
    801.             return opsForHash.keys(key);  
    802.         } catch (Exception e) {  
    803.             logger.error("獲取緩存失敗key[" + key + ", error[" + e + "]");  
    804.         }  
    805.         return null;  
    806.     }  
    807.       
    808.     /** 
    809.      * 獲取key對應map中所有的values 
    810.      * @MethodName:getHashValues 
    811.      * @param key 
    812.      * @return 
    813.      * @ReturnType:List<String> 
    814.      * @Description: 
    815.      * @Creator:chenchuanliang 
    816.      * @CreateTime:2017年6月27日上午10:49:55 
    817.      * @Modifier: 
    818.      * @ModifyTime: 
    819.      */  
    820.     public List<String> getHashValues(String key){  
    821.         try {  
    822.             key = KEY_PREFIX_HASH + key;  
    823.             HashOperations<String, String, String> opsForHash = redisTemplate.opsForHash();  
    824.             return opsForHash.values(key);  
    825.         } catch (Exception e) {  
    826.             logger.error("獲取緩存失敗key[" + key + ", error[" + e + "]");  
    827.         }  
    828.         return null;  
    829.     }  
    830.       
    831.     /** 
    832.      * 刪除key對應hashMap中key的值.或刪除整個key對應map 
    833.      * @MethodName:delete 
    834.      * @param key 
    835.      * @param hashKeys 
    836.      * @return 
    837.      * @ReturnType:List<String> 
    838.      * @Description: 
    839.      * @Creator:chenchuanliang 
    840.      * @CreateTime:2017年6月27日上午10:51:22 
    841.      * @Modifier: 
    842.      * @ModifyTime: 
    843.      */  
    844.     public boolean deleteHash(String key, String... hashKeys){  
    845.         try {  
    846.             key = KEY_PREFIX_HASH + key;  
    847.             if (hashKeys == null || hashKeys.length == 0) {  
    848.                 redisTemplate.delete(key);  
    849.             } else {  
    850.                 HashOperations<String, String, String> opsForHash = redisTemplate.opsForHash();  
    851.                 opsForHash.delete(key, hashKeys);  
    852.             }  
    853.             return true;  
    854.         } catch (Exception e) {  
    855.             logger.error("獲取緩存失敗key[" + key + ", error[" + e + "]");  
    856.         }  
    857.         return false;  
    858.     }  
    859.   
    860.     /** 
    861.      * 獲取key對應的過期時間, 秒 
    862.      * @MethodName:getExpireTime 
    863.      * @param key 
    864.      * @return 
    865.      * @ReturnType:Long 
    866.      * @Description: 
    867.      * @Creator:yangbiao 
    868.      * @CreateTime:2017年7月10日上午9:51:22 
    869.      * @Modifier: 
    870.      * @ModifyTime: 
    871.      */  
    872.     public Long getExpireTimeValue(String key){  
    873.         key = KEY_PREFIX_VALUE + key;  
    874.         Long expire = -2L;  
    875.         try {  
    876.             expire = redisTemplate.getExpire(key);  
    877.   
    878.         }catch (Exception e){  
    879.             logger.error("獲取緩存剩餘時間失敗key[" + key + ", error[" + e + "]");  
    880.         }  
    881.         return expire;  
    882.     }  
    883.       
    884. }  
    原文出自:http://mygodccl.iteye.com/blog/2374978(感謝原創)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章