springMVC+redis+redis自定義工具類 的配置


1.

maven項目,加入這一個依賴包即可,

<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
使用2.9.0版本的原因是穩定,且3以上的版本有問題,部分參數會缺失


2.

 
        

配置文件redis.properties,

 
        
redis.hostname=127.0.0.1
redis.port=6379
redis.database=0
redis.pool.maxActive=600
redis.pool.maxIdle=300
redis.pool.maxWait=3000
redis.pool.testOnBorrow=true
redis.password=853396015
redis.timeout=2000

 

3.

新建一個xml文件,名為 redisSpringContext.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"
 4        xmlns:context="http://www.springframework.org/schema/context"
 5        xsi:schemaLocation="http://www.springframework.org/schema/beans
 6         http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
 7         http://www.springframework.org/schema/context
 8         http://www.springframework.org/schema/context/spring-context-3.2.xsd">
 9 
10     <!--    &lt;!&ndash; 導入redis數據庫配置文件 &ndash;&gt;-->
11     <context:property-placeholder location="classpath:redis.properties"/>
12 
13     <!-- Redis連接池配置 -->
14     <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
15         <!-- 控制一個pool能分配多少個jedis實例 -->
16         <property name="maxTotal" value="${redis.pool.maxActive}"/>
17         <!-- 連接池中最多空閑多少個maxIdle個連接,這里為20,表示即使沒有數據庫連接時依然可以保持20空閑的連接,而不被清除,處於待命狀態,隨時連接 -->
18         <property name="maxIdle" value="${redis.pool.maxIdle}"/>
19         <!-- 最大等待時間,當沒有可用連接時,連接池等待連接被歸還的最大時間(以毫秒計數),超過時間即拋出異常 -->
20         <property name="maxWaitMillis" value="${redis.pool.maxWait}"/>
21         <!-- 在獲取連接時,檢查有效性 -->
22         <property name="testOnBorrow" value="${redis.pool.testOnBorrow}"/>
23     </bean>
24     <!-- 創建Redis連接池,並做相關配置 -->
25     <bean id="jedisWritePool" class="redis.JedisPoolWriper"
26           depends-on="jedisPoolConfig">
27         <constructor-arg index="0" ref="jedisPoolConfig"/>
28         <constructor-arg index="1" value="${redis.hostname}"/>
29         <constructor-arg index="2" value="${redis.port}" type="int"/>
30         <constructor-arg index="3" value="${redis.timeout}" type="int"/>
31         <constructor-arg index="4" value="${redis.password}"/>
32     </bean>
33     <!-- 創建Redis工具類,封裝好Redis的連接以進行相關操作 -->
34     <bean id="jedisUtil" class="redis.JedisUtil"
35     >
36         <property name="jedisPool" ref="jedisWritePool"/>
37     </bean>
38 <!--    這里的紅色下划線提示不是指寫錯了,而是警告,如果使用自動補全修正,會報錯UnsatisfiedDependencyException
39 為什么使用$進行隔開呢,是因為這是兩個類嵌套定義,因為不是文件路徑,無法使用.符號進行區分,故使用$符號時沒問題的
40 -->
41     <bean id="jedisKeys" class="redis.JedisUtil$Keys"
42     >
43         <constructor-arg ref="jedisUtil"/>
44     </bean>
45     <bean id="jedisStrings" class="redis.JedisUtil$Strings"
46     >
47         <constructor-arg ref="jedisUtil"/>
48     </bean>
49     <bean id="jedisLists" class="redis.JedisUtil$Lists"
50     >
51         <constructor-arg ref="jedisUtil"/>
52     </bean>
53     <bean id="jedisSets" class="redis.JedisUtil$Sets"
54     >
55         <constructor-arg ref="jedisUtil"/>
56     </bean>
57     <bean id="jedisHash" class="redis.JedisUtil$Hash"
58           scope="singleton">
59         <constructor-arg ref="jedisUtil"/>
60     </bean>
61 
62 </beans>
redisSpringContext.xml

 

 



記得將該xml文件導入
dispatcher-servlet.xml中

<import resource="redisSpringContext.xml"/>

 

 

4.

新建兩個類,

 

 

 1 package redis;
 2 
 3 import redis.clients.jedis.JedisPool;
 4 import redis.clients.jedis.JedisPoolConfig;
 5 
 6 /**
 7  * 強指定redis的JedisPool接口構造函數,這樣才能在centos成功創建jedispool
 8  *
 9  * @author xiangze
10  *
11  */
12 public class JedisPoolWriper {
13     //連接池對象
14     private JedisPool jedisPool;
15 
16     public JedisPoolWriper(final JedisPoolConfig poolConfig, final String host,
17                            final int port ,final int timeout ,final String password) {
18         try {
19             //通過連接池配置信息,IP,端口構造連接池對象
20             jedisPool = new JedisPool(poolConfig, host, port,timeout,password);
21         } catch (Exception e) {
22             e.printStackTrace();
23         }
24     }
25     //獲取redis連接池對象
26     public JedisPool getJedisPool() {
27         return jedisPool;
28     }
29     //注入redis連接池對象
30     public void setJedisPool(JedisPool jedisPool) {
31         this.jedisPool = jedisPool;
32     }
33 
34 }
JedisPoolWriper
   1 package redis;
   2 
   3 
   4 
   5 import java.util.List;
   6 import java.util.Map;
   7 import java.util.Set;
   8 
   9 import redis.clients.jedis.Jedis;
  10 import redis.clients.jedis.JedisPool;
  11 import redis.clients.jedis.SortingParams;
  12 
  13 import redis.clients.jedis.BinaryClient.LIST_POSITION;
  14 import redis.clients.util.SafeEncoder;
  15 
  16 /*
  17 下面這兩個在高版本的redis.clients依賴包里面沒有,需要降低版本才有,如2.9.0
  18  *import redis.clients.jedis.BinaryClient.LIST_POSITION;
  19 import redis.clients.util.SafeEncoder;
  20  */
  21 
  22 public class JedisUtil {
  23     /**
  24      * 緩存生存時間
  25      */
  26     private final int expire = 60000;
  27     /** 操作Key的方法 */
  28     public Keys KEYS;
  29     /** 對存儲結構為Set類型的操作 */
  30     public Sets SETS;
  31     /** 對存儲結構為HashMap類型的操作 */
  32     public Hash HASH;
  33     /** 對存儲結構為String類型的操作 */
  34     public Strings STRINGS;
  35     /** 對存儲結構為List類型的操作 */
  36     public Lists LISTS;
  37 
  38 
  39 
  40     private JedisPool jedisPool;
  41 
  42     public JedisPool getJedisPool() {
  43         return jedisPool;
  44     }
  45 
  46     public void setJedisPool(JedisPoolWriper jedisPoolWriper) {
  47         this.jedisPool = jedisPoolWriper.getJedisPool();
  48     }
  49 
  50     public JedisPool getPool() {
  51         return jedisPool;
  52     }
  53 
  54     /**
  55      * 從jedis連接池中獲取獲取jedis對象
  56      *
  57      * @return
  58      */
  59     public Jedis getJedis() {
  60         return jedisPool.getResource();
  61     }
  62 
  63     /**
  64      * 設置過期時間
  65      *
  66      * @author ruan 2013-4-11
  67      * @param key
  68      * @param seconds
  69      */
  70     public void expire(String key, int seconds) {
  71         if (seconds <= 0) {
  72             return;
  73         }
  74         Jedis jedis = getJedis();
  75         jedis.expire(key, seconds);
  76         jedis.close();
  77     }
  78 
  79     /**
  80      * 設置默認過期時間
  81      *
  82      * @author ruan 2013-4-11
  83      * @param key
  84      */
  85     public void expire(String key) {
  86         expire(key, expire);
  87     }
  88 
  89     // *******************************************Keys*******************************************//
  90     public class Keys {
  91 
  92 
  93         /**
  94          * 清空所有key
  95          */
  96         public String flushAll() {
  97             Jedis jedis = getJedis();
  98             String stata = jedis.flushAll();
  99             jedis.close();
 100             return stata;
 101         }
 102 
 103         /**
 104          * 更改key
 105          *
 106 //         * @param String
 107          *            oldkey
 108 //         * @param String
 109          *            newkey
 110          * @return 狀態碼
 111          * */
 112         public String rename(String oldkey, String newkey) {
 113             return rename(SafeEncoder.encode(oldkey),
 114                     SafeEncoder.encode(newkey));
 115         }
 116 
 117         /**
 118          * 更改key,僅當新key不存在時才執行
 119          *
 120 //         * @param String
 121          *            oldkey
 122 //         * @param String
 123          *            newkey
 124          * @return 狀態碼
 125          * */
 126         public long renamenx(String oldkey, String newkey) {
 127             Jedis jedis = getJedis();
 128             long status = jedis.renamenx(oldkey, newkey);
 129             jedis.close();
 130             return status;
 131         }
 132 
 133         /**
 134          * 更改key
 135          *
 136 //         * @param String
 137          *            oldkey
 138 //         * @param String
 139          *            newkey
 140          * @return 狀態碼
 141          * */
 142         public String rename(byte[] oldkey, byte[] newkey) {
 143             Jedis jedis = getJedis();
 144             String status = jedis.rename(oldkey, newkey);
 145             jedis.close();
 146             return status;
 147         }
 148 
 149         /**
 150          * 設置key的過期時間,以秒為單位
 151          *
 152 //         * @param String
 153          *            key
 154 //         * @param 時間
 155          *            ,已秒為單位
 156          * @return 影響的記錄數
 157          * */
 158         public long expired(String key, int seconds) {
 159             Jedis jedis = getJedis();
 160             long count = jedis.expire(key, seconds);
 161             jedis.close();
 162             return count;
 163         }
 164 
 165         /**
 166          * 設置key的過期時間,它是距歷元(即格林威治標准時間 1970 年 1 月 1 日的 00:00:00,格里高利歷)的偏移量。
 167          *
 168 //         * @param String
 169          *            key
 170 //         * @param 時間
 171          *            ,已秒為單位
 172          * @return 影響的記錄數
 173          * */
 174         public long expireAt(String key, long timestamp) {
 175             Jedis jedis = getJedis();
 176             long count = jedis.expireAt(key, timestamp);
 177             jedis.close();
 178             return count;
 179         }
 180 
 181         /**
 182          * 查詢key的過期時間
 183          *
 184 //         * @param String
 185          *            key
 186          * @return 以秒為單位的時間表示
 187          * */
 188         public long ttl(String key) {
 189             // ShardedJedis sjedis = getShardedJedis();
 190             Jedis sjedis = getJedis();
 191             long len = sjedis.ttl(key);
 192             sjedis.close();
 193             return len;
 194         }
 195 
 196         /**
 197          * 取消對key過期時間的設置
 198          *
 199          * @param key
 200          * @return 影響的記錄數
 201          * */
 202         public long persist(String key) {
 203             Jedis jedis = getJedis();
 204             long count = jedis.persist(key);
 205             jedis.close();
 206             return count;
 207         }
 208 
 209         /**
 210          * 刪除keys對應的記錄,可以是多個key
 211          *
 212 //         * @param String
 213          *            ... keys
 214          * @return 刪除的記錄數
 215          * */
 216         public long del(String... keys) {
 217             Jedis jedis = getJedis();
 218             long count = jedis.del(keys);
 219             jedis.close();
 220             return count;
 221         }
 222 
 223 //        String…是java5新加入的功能,表示的是一個可變長度的參數列表。
 224 //        其語法就是類型后跟…,表示此處接受的參數為0到多個Object類型的對象,或者是一個Object[]。
 225 //        例如我們有一個方法叫做test(String…strings),那么你還可以寫方法test(),但你不能寫test(String[] strings),
 226 //        這樣會出編譯錯誤,系統提示出現重復的方法。
 227 //        在使用的時候,對於test(String…strings),你可以直接用test()去調用,標示沒有參數,也可以用去test(“aaa”),
 228 //        也可以用test(new String[]{“aaa”,”bbb”})。
 229 //        另外如果既有test(String…strings)函數,又有test()函數,我們在調用test()時,會優先使用test()函數。
 230 //        只有當沒有test()函數式,我們調用test(),程序才會走test(String…strings)。
 231 
 232 
 233         /**
 234          * 刪除keys對應的記錄,可以是多個key
 235          *
 236 //         * @param String
 237          *            ... keys
 238          * @return 刪除的記錄數
 239          * */
 240         public long del(byte[]... keys) {
 241             Jedis jedis = getJedis();
 242             long count = jedis.del(keys);
 243             jedis.close();
 244             return count;
 245         }
 246 
 247         /**
 248          * 判斷key是否存在
 249          *
 250 //         * @param String
 251          *            key
 252          * @return boolean
 253          * */
 254         public boolean exists(String key) {
 255             // ShardedJedis sjedis = getShardedJedis();
 256             Jedis sjedis = getJedis();
 257             boolean exis = sjedis.exists(key);
 258             sjedis.close();
 259             return exis;
 260         }
 261 
 262         /**
 263          * 對List,Set,SortSet進行排序,如果集合數據較大應避免使用這個方法
 264          *
 265 //         * @param String
 266          *            key
 267          * @return List<String> 集合的全部記錄
 268          * **/
 269         public List<String> sort(String key) {
 270             // ShardedJedis sjedis = getShardedJedis();
 271             Jedis sjedis = getJedis();
 272             List<String> list = sjedis.sort(key);
 273             sjedis.close();
 274             return list;
 275         }
 276 
 277         /**
 278          * 對List,Set,SortSet進行排序或limit
 279          *
 280 //         * @param String
 281          *            key
 282 //         * @param SortingParams
 283          *            parame 定義排序類型或limit的起止位置.
 284          * @return List<String> 全部或部分記錄
 285          * **/
 286         public List<String> sort(String key, SortingParams parame) {
 287             // ShardedJedis sjedis = getShardedJedis();
 288             Jedis sjedis = getJedis();
 289             List<String> list = sjedis.sort(key, parame);
 290             sjedis.close();
 291             return list;
 292         }
 293 
 294         /**
 295          * 返回指定key存儲的類型
 296          *
 297 //         * @param String
 298          *            key
 299          * @return String string|list|set|zset|hash
 300          * **/
 301         public String type(String key) {
 302             // ShardedJedis sjedis = getShardedJedis();
 303             Jedis sjedis = getJedis();
 304             String type = sjedis.type(key);
 305             sjedis.close();
 306             return type;
 307         }
 308 
 309         /**
 310          * 查找所有匹配給定的模式的鍵
 311          *
 312 //         * @param String
 313          *            key的表達式,*表示多個,?表示一個
 314          * */
 315         public Set<String> keys(String pattern) {
 316             Jedis jedis = getJedis();
 317             Set<String> set = jedis.keys(pattern);
 318             jedis.close();
 319             return set;
 320         }
 321     }
 322 
 323     // *******************************************Sets*******************************************//
 324     public class Sets {
 325 
 326 
 327         /**
 328          * 向Set添加一條記錄,如果member已存在返回0,否則返回1
 329          *
 330 //         * @param String
 331          *            key
 332 //         * @param String
 333          *            member
 334          * @return 操作碼,0或1
 335          * */
 336         public long sadd(String key, String member) {
 337             Jedis jedis = getJedis();
 338             long s = jedis.sadd(key, member);
 339             jedis.close();
 340             return s;
 341         }
 342 
 343         public long sadd(byte[] key, byte[] member) {
 344             Jedis jedis = getJedis();
 345             long s = jedis.sadd(key, member);
 346             jedis.close();
 347             return s;
 348         }
 349 
 350         /**
 351          * 獲取給定key中元素個數
 352          *
 353 //         * @param String
 354          *            key
 355          * @return 元素個數
 356          * */
 357         public long scard(String key) {
 358             // ShardedJedis sjedis = getShardedJedis();
 359             Jedis sjedis = getJedis();
 360             long len = sjedis.scard(key);
 361             sjedis.close();
 362             return len;
 363         }
 364 
 365         /**
 366          * 返回從第一組和所有的給定集合之間的差異的成員
 367          *
 368 //         * @param String
 369          *            ... keys
 370          * @return 差異的成員集合
 371          * */
 372         public Set<String> sdiff(String... keys) {
 373             Jedis jedis = getJedis();
 374             Set<String> set = jedis.sdiff(keys);
 375             jedis.close();
 376             return set;
 377         }
 378 
 379         /**
 380          * 這個命令等於sdiff,但返回的不是結果集,而是將結果集存儲在新的集合中,如果目標已存在,則覆蓋。
 381          *
 382 //         * @param String
 383          *            newkey 新結果集的key
 384 //         * @param String
 385          *            ... keys 比較的集合
 386          * @return 新集合中的記錄數
 387          * **/
 388         public long sdiffstore(String newkey, String... keys) {
 389             Jedis jedis = getJedis();
 390             long s = jedis.sdiffstore(newkey, keys);
 391             jedis.close();
 392             return s;
 393         }
 394 
 395         /**
 396          * 返回給定集合交集的成員,如果其中一個集合為不存在或為空,則返回空Set
 397          *
 398 //         * @param String
 399          *            ... keys
 400          * @return 交集成員的集合
 401          * **/
 402         public Set<String> sinter(String... keys) {
 403             Jedis jedis = getJedis();
 404             Set<String> set = jedis.sinter(keys);
 405             jedis.close();
 406             return set;
 407         }
 408 
 409         /**
 410          * 這個命令等於sinter,但返回的不是結果集,而是將結果集存儲在新的集合中,如果目標已存在,則覆蓋。
 411          *
 412 //         * @param String
 413          *            newkey 新結果集的key
 414 //         * @param String
 415          *            ... keys 比較的集合
 416          * @return 新集合中的記錄數
 417          * **/
 418         public long sinterstore(String newkey, String... keys) {
 419             Jedis jedis = getJedis();
 420             long s = jedis.sinterstore(newkey, keys);
 421             jedis.close();
 422             return s;
 423         }
 424 
 425         /**
 426          * 確定一個給定的值是否存在
 427          *
 428 //         * @param String
 429          *            key
 430 //         * @param String
 431          *            member 要判斷的值
 432          * @return 存在返回1,不存在返回0
 433          * **/
 434         public boolean sismember(String key, String member) {
 435             // ShardedJedis sjedis = getShardedJedis();
 436             Jedis sjedis = getJedis();
 437             boolean s = sjedis.sismember(key, member);
 438             sjedis.close();
 439             return s;
 440         }
 441 
 442         /**
 443          * 返回集合中的所有成員
 444          *
 445 //         * @param String
 446          *            key
 447          * @return 成員集合
 448          * */
 449         public Set<String> smembers(String key) {
 450             // ShardedJedis sjedis = getShardedJedis();
 451             Jedis sjedis = getJedis();
 452             Set<String> set = sjedis.smembers(key);
 453             sjedis.close();
 454             return set;
 455         }
 456 
 457         public Set<byte[]> smembers(byte[] key) {
 458             // ShardedJedis sjedis = getShardedJedis();
 459             Jedis sjedis = getJedis();
 460             Set<byte[]> set = sjedis.smembers(key);
 461             sjedis.close();
 462             return set;
 463         }
 464 
 465         /**
 466          * 將成員從源集合移出放入目標集合 <br/>
 467          * 如果源集合不存在或不包哈指定成員,不進行任何操作,返回0<br/>
 468          * 否則該成員從源集合上刪除,並添加到目標集合,如果目標集合中成員已存在,則只在源集合進行刪除
 469          *
 470 //         * @param String
 471          *            srckey 源集合
 472 //         * @param String
 473          *            dstkey 目標集合
 474 //         * @param String
 475          *            member 源集合中的成員
 476          * @return 狀態碼,1成功,0失敗
 477          * */
 478         public long smove(String srckey, String dstkey, String member) {
 479             Jedis jedis = getJedis();
 480             long s = jedis.smove(srckey, dstkey, member);
 481             jedis.close();
 482             return s;
 483         }
 484 
 485         /**
 486          * 從集合中刪除成員
 487          *
 488 //         * @param String
 489          *            key
 490          * @return 被刪除的成員
 491          * */
 492         public String spop(String key) {
 493             Jedis jedis = getJedis();
 494             String s = jedis.spop(key);
 495             jedis.close();
 496             return s;
 497         }
 498 
 499         /**
 500          * 從集合中刪除指定成員
 501          *
 502 //         * @param String
 503          *            key
 504 //         * @param String
 505          *            member 要刪除的成員
 506          * @return 狀態碼,成功返回1,成員不存在返回0
 507          * */
 508         public long srem(String key, String member) {
 509             Jedis jedis = getJedis();
 510             long s = jedis.srem(key, member);
 511             jedis.close();
 512             return s;
 513         }
 514 
 515         /**
 516          * 合並多個集合並返回合並后的結果,合並后的結果集合並不保存<br/>
 517          *
 518 //         * @param String
 519          *            ... keys
 520          * @return 合並后的結果集合
 521 //         * @see sunionstore
 522          * */
 523         public Set<String> sunion(String... keys) {
 524             Jedis jedis = getJedis();
 525             Set<String> set = jedis.sunion(keys);
 526             jedis.close();
 527             return set;
 528         }
 529 
 530         /**
 531          * 合並多個集合並將合並后的結果集保存在指定的新集合中,如果新集合已經存在則覆蓋
 532          *
 533 //         * @param String
 534          *            newkey 新集合的key
 535 //         * @param String
 536          *            ... keys 要合並的集合
 537          * **/
 538         public long sunionstore(String newkey, String... keys) {
 539             Jedis jedis = getJedis();
 540             long s = jedis.sunionstore(newkey, keys);
 541             jedis.close();
 542             return s;
 543         }
 544     }
 545 
 546     // *******************************************Hash*******************************************//
 547     public class Hash {
 548 
 549         /**
 550          * 從hash中刪除指定的存儲
 551          *
 552 //         * @param String
 553          *            key
 554 //         * @param String
 555          *            fieid 存儲的名字
 556          * @return 狀態碼,1成功,0失敗
 557          * */
 558         public long hdel(String key, String fieid) {
 559             Jedis jedis = getJedis();
 560             long s = jedis.hdel(key, fieid);
 561             jedis.close();
 562             return s;
 563         }
 564 
 565         public long hdel(String key) {
 566             Jedis jedis = getJedis();
 567             long s = jedis.del(key);
 568             jedis.close();
 569             return s;
 570         }
 571 
 572         /**
 573          * 測試hash中指定的存儲是否存在
 574          *
 575 //         * @param String
 576          *            key
 577 //         * @param String
 578          *            fieid 存儲的名字
 579          * @return 1存在,0不存在
 580          * */
 581         public boolean hexists(String key, String fieid) {
 582             // ShardedJedis sjedis = getShardedJedis();
 583             Jedis sjedis = getJedis();
 584             boolean s = sjedis.hexists(key, fieid);
 585             sjedis.close();
 586             return s;
 587         }
 588 
 589         /**
 590          * 返回hash中指定存儲位置的值
 591          *
 592 //         * @param String
 593          *            key
 594 //         * @param String
 595          *            fieid 存儲的名字
 596          * @return 存儲對應的值
 597          * */
 598         public String hget(String key, String fieid) {
 599             // ShardedJedis sjedis = getShardedJedis();
 600             Jedis sjedis = getJedis();
 601             String s = sjedis.hget(key, fieid);
 602             sjedis.close();
 603             return s;
 604         }
 605 
 606         public byte[] hget(byte[] key, byte[] fieid) {
 607             // ShardedJedis sjedis = getShardedJedis();
 608             Jedis sjedis = getJedis();
 609             byte[] s = sjedis.hget(key, fieid);
 610             sjedis.close();
 611             return s;
 612         }
 613 
 614         /**
 615          * 以Map的形式返回hash中的存儲和值
 616          *
 617 //         * @param String
 618          *            key
 619          * @return Map<Strinig,String>
 620          * */
 621         public Map<String, String> hgetAll(String key) {
 622             // ShardedJedis sjedis = getShardedJedis();
 623             Jedis sjedis = getJedis();
 624             Map<String, String> map = sjedis.hgetAll(key);
 625             sjedis.close();
 626             return map;
 627         }
 628 
 629         /**
 630          * 添加一個對應關系
 631          *
 632 //         * @param String
 633          *            key
 634 //         * @param String
 635          *            fieid
 636 //         * @param String
 637          *            value
 638          * @return 狀態碼 1成功,0失敗,fieid已存在將更新,也返回0
 639          * **/
 640         public long hset(String key, String fieid, String value) {
 641             Jedis jedis = getJedis();
 642             long s = jedis.hset(key, fieid, value);
 643             jedis.close();
 644             return s;
 645         }
 646 
 647         public long hset(String key, String fieid, byte[] value) {
 648             Jedis jedis = getJedis();
 649             long s = jedis.hset(key.getBytes(), fieid.getBytes(), value);
 650             jedis.close();
 651             return s;
 652         }
 653 
 654         /**
 655          * 添加對應關系,只有在fieid不存在時才執行
 656          *
 657 //         * @param String
 658          *            key
 659 //         * @param String
 660          *            fieid
 661 //         * @param String
 662          *            value
 663          * @return 狀態碼 1成功,0失敗fieid已存
 664          * **/
 665         public long hsetnx(String key, String fieid, String value) {
 666             Jedis jedis = getJedis();
 667             long s = jedis.hsetnx(key, fieid, value);
 668             jedis.close();
 669             return s;
 670         }
 671 
 672         /**
 673          * 獲取hash中value的集合
 674          *
 675 //         * @param String
 676          *            key
 677          * @return List<String>
 678          * */
 679         public List<String> hvals(String key) {
 680             // ShardedJedis sjedis = getShardedJedis();
 681             Jedis sjedis = getJedis();
 682             List<String> list = sjedis.hvals(key);
 683             sjedis.close();
 684             return list;
 685         }
 686 
 687         /**
 688          * 在指定的存儲位置加上指定的數字,存儲位置的值必須可轉為數字類型
 689          *
 690 //         * @param String
 691          *            key
 692 //         * @param String
 693          *            fieid 存儲位置
 694 //         * @param String
 695          *            long value 要增加的值,可以是負數
 696          * @return 增加指定數字后,存儲位置的值
 697          * */
 698         public long hincrby(String key, String fieid, long value) {
 699             Jedis jedis = getJedis();
 700             long s = jedis.hincrBy(key, fieid, value);
 701             jedis.close();
 702             return s;
 703         }
 704 
 705         /**
 706          * 返回指定hash中的所有存儲名字,類似Map中的keySet方法
 707          *
 708 //         * @param String
 709          *            key
 710          * @return Set<String> 存儲名稱的集合
 711          * */
 712         public Set<String> hkeys(String key) {
 713             // ShardedJedis sjedis = getShardedJedis();
 714             Jedis sjedis = getJedis();
 715             Set<String> set = sjedis.hkeys(key);
 716             sjedis.close();
 717             return set;
 718         }
 719 
 720         /**
 721          * 獲取hash中存儲的個數,類似Map中size方法
 722          *
 723 //         * @param String
 724          *            key
 725          * @return long 存儲的個數
 726          * */
 727         public long hlen(String key) {
 728             // ShardedJedis sjedis = getShardedJedis();
 729             Jedis sjedis = getJedis();
 730             long len = sjedis.hlen(key);
 731             sjedis.close();
 732             return len;
 733         }
 734 
 735         /**
 736          * 根據多個key,獲取對應的value,返回List,如果指定的key不存在,List對應位置為null
 737          *
 738 //         * @param String
 739          *            key
 740 //         * @param String
 741          *            ... fieids 存儲位置
 742          * @return List<String>
 743          * */
 744         public List<String> hmget(String key, String... fieids) {
 745             // ShardedJedis sjedis = getShardedJedis();
 746             Jedis sjedis = getJedis();
 747             List<String> list = sjedis.hmget(key, fieids);
 748             sjedis.close();
 749             return list;
 750         }
 751 
 752         public List<byte[]> hmget(byte[] key, byte[]... fieids) {
 753             // ShardedJedis sjedis = getShardedJedis();
 754             Jedis sjedis = getJedis();
 755             List<byte[]> list = sjedis.hmget(key, fieids);
 756             sjedis.close();
 757             return list;
 758         }
 759 
 760         /**
 761          * 添加對應關系,如果對應關系已存在,則覆蓋
 762          *
 763 //         * @param Strin
 764          *            key
 765 //         * @param Map
 766          *            <String,String> 對應關系
 767          * @return 狀態,成功返回OK
 768          * */
 769         public String hmset(String key, Map<String, String> map) {
 770             Jedis jedis = getJedis();
 771             String s = jedis.hmset(key, map);
 772             jedis.close();
 773             return s;
 774         }
 775 
 776         /**
 777          * 添加對應關系,如果對應關系已存在,則覆蓋
 778          *
 779 //         * @param Strin
 780          *            key
 781 //         * @param Map
 782          *            <String,String> 對應關系
 783          * @return 狀態,成功返回OK
 784          * */
 785         public String hmset(byte[] key, Map<byte[], byte[]> map) {
 786             Jedis jedis = getJedis();
 787             String s = jedis.hmset(key, map);
 788             jedis.close();
 789             return s;
 790         }
 791 
 792     }
 793 
 794     // *******************************************Strings*******************************************//
 795     public class Strings {
 796 
 797 
 798 
 799         /**
 800          * 根據key獲取記錄
 801          *
 802 //         * @param String
 803          *            key
 804          * @return 805          * */
 806         public String get(String key) {
 807             // ShardedJedis sjedis = getShardedJedis();
 808             Jedis sjedis = getJedis();
 809             String value = sjedis.get(key);
 810             sjedis.close();
 811             return value;
 812         }
 813 
 814         /**
 815          * 根據key獲取記錄
 816          *
 817 //         * @param byte[] key
 818          * @return 819          * */
 820         public byte[] get(byte[] key) {
 821             // ShardedJedis sjedis = getShardedJedis();
 822             Jedis sjedis = getJedis();
 823             byte[] value = sjedis.get(key);
 824             sjedis.close();
 825             return value;
 826         }
 827 
 828         /**
 829          * 添加有過期時間的記錄
 830          *
 831 //         * @param String
 832          *            key
 833 //         * @param int seconds 過期時間,以秒為單位
 834 //         * @param String
 835          *            value
 836          * @return String 操作狀態
 837          * */
 838         public String setEx(String key, int seconds, String value) {
 839             Jedis jedis = getJedis();
 840             String str = jedis.setex(key, seconds, value);
 841             jedis.close();
 842             return str;
 843         }
 844 
 845         /**
 846          * 添加有過期時間的記錄
 847          *
 848 //         * @param String
 849          *            key
 850 //         * @param int seconds 過期時間,以秒為單位
 851 //         * @param String
 852          *            value
 853          * @return String 操作狀態
 854          * */
 855         public String setEx(byte[] key, int seconds, byte[] value) {
 856             Jedis jedis = getJedis();
 857             String str = jedis.setex(key, seconds, value);
 858             jedis.close();
 859             return str;
 860         }
 861 
 862         /**
 863          * 添加一條記錄,僅當給定的key不存在時才插入
 864          *
 865 //         * @param String
 866          *            key
 867 //         * @param String
 868          *            value
 869          * @return long 狀態碼,1插入成功且key不存在,0未插入,key存在
 870          * */
 871         public long setnx(String key, String value) {
 872             Jedis jedis = getJedis();
 873             long str = jedis.setnx(key, value);
 874             jedis.close();
 875             return str;
 876         }
 877 
 878         /**
 879          * 添加記錄,如果記錄已存在將覆蓋原有的value
 880          *
 881 //         * @param String
 882          *            key
 883 //         * @param String
 884          *            value
 885          * @return 狀態碼
 886          * */
 887         public String set(String key, String value) {
 888             return set(SafeEncoder.encode(key), SafeEncoder.encode(value));
 889         }
 890 
 891         /**
 892          * 添加記錄,如果記錄已存在將覆蓋原有的value
 893          *
 894 //         * @param String
 895          *            key
 896 //         * @param String
 897          *            value
 898          * @return 狀態碼
 899          * */
 900         public String set(String key, byte[] value) {
 901             return set(SafeEncoder.encode(key), value);
 902         }
 903 
 904         /**
 905          * 添加記錄,如果記錄已存在將覆蓋原有的value
 906          *
 907 //         * @param byte[] key
 908 //         * @param byte[] value
 909          * @return 狀態碼
 910          * */
 911         public String set(byte[] key, byte[] value) {
 912             Jedis jedis = getJedis();
 913             String status = jedis.set(key, value);
 914             jedis.close();
 915             return status;
 916         }
 917 
 918         /**
 919          * 從指定位置開始插入數據,插入的數據會覆蓋指定位置以后的數據<br/>
 920          * 例:String str1="123456789";<br/>
 921          * 對str1操作后setRange(key,4,0000),str1="123400009";
 922          *
 923 //         * @param String
 924 //         *            key
 925 //         * @param long offset
 926 //         * @param String
 927          *            value
 928          * @return long value的長度
 929          * */
 930         public long setRange(String key, long offset, String value) {
 931             Jedis jedis = getJedis();
 932             long len = jedis.setrange(key, offset, value);
 933             jedis.close();
 934             return len;
 935         }
 936 
 937         /**
 938          * 在指定的key中追加value
 939          *
 940 //         * @param String
 941 //         *            key
 942 //         * @param String
 943          *            value
 944          * @return long 追加后value的長度
 945          * **/
 946         public long append(String key, String value) {
 947             Jedis jedis = getJedis();
 948             long len = jedis.append(key, value);
 949             jedis.close();
 950             return len;
 951         }
 952 
 953         /**
 954          * 將key對應的value減去指定的值,只有value可以轉為數字時該方法才可用
 955          *
 956 //         * @param String
 957 //         *            key
 958 //         * @param long number 要減去的值
 959          * @return long 減指定值后的值
 960          * */
 961         public long decrBy(String key, long number) {
 962             Jedis jedis = getJedis();
 963             long len = jedis.decrBy(key, number);
 964             jedis.close();
 965             return len;
 966         }
 967 
 968         /**
 969          * <b>可以作為獲取唯一id的方法</b><br/>
 970          * 將key對應的value加上指定的值,只有value可以轉為數字時該方法才可用
 971          *
 972 //         * @param String
 973 //         *            key
 974 //         * @param long number 要減去的值
 975          * @return long 相加后的值
 976          * */
 977         public long incrBy(String key, long number) {
 978             Jedis jedis = getJedis();
 979             long len = jedis.incrBy(key, number);
 980             jedis.close();
 981             return len;
 982         }
 983 
 984         /**
 985          * 對指定key對應的value進行截取
 986          *
 987 //         * @param String
 988 //         *            key
 989 //         * @param long startOffset 開始位置(包含)
 990 //         * @param long endOffset 結束位置(包含)
 991          * @return String 截取的值
 992          * */
 993         public String getrange(String key, long startOffset, long endOffset) {
 994             // ShardedJedis sjedis = getShardedJedis();
 995             Jedis sjedis = getJedis();
 996             String value = sjedis.getrange(key, startOffset, endOffset);
 997             sjedis.close();
 998             return value;
 999         }
1000 
1001         /**
1002          * 獲取並設置指定key對應的value<br/>
1003          * 如果key存在返回之前的value,否則返回null
1004          *
1005 //         * @param String
1006 //         *            key
1007 //         * @param String
1008          *            value
1009          * @return String 原始value或null
1010          * */
1011         public String getSet(String key, String value) {
1012             Jedis jedis = getJedis();
1013             String str = jedis.getSet(key, value);
1014             jedis.close();
1015             return str;
1016         }
1017 
1018         /**
1019          * 批量獲取記錄,如果指定的key不存在返回List的對應位置將是null
1020          *
1021 //         * @param String
1022          *            keys
1023          * @return List<String> 值得集合
1024          * */
1025         public List<String> mget(String... keys) {
1026             Jedis jedis = getJedis();
1027             List<String> str = jedis.mget(keys);
1028             jedis.close();
1029             return str;
1030         }
1031 
1032         /**
1033          * 批量存儲記錄
1034          *
1035 //         * @param String
1036          *            keysvalues 例:keysvalues="key1","value1","key2","value2";
1037          * @return String 狀態碼
1038          * */
1039         public String mset(String... keysvalues) {
1040             Jedis jedis = getJedis();
1041             String str = jedis.mset(keysvalues);
1042             jedis.close();
1043             return str;
1044         }
1045 
1046         /**
1047          * 獲取key對應的值的長度
1048          *
1049 //         * @param String
1050          *            key
1051          * @return value值得長度
1052          * */
1053         public long strlen(String key) {
1054             Jedis jedis = getJedis();
1055             long len = jedis.strlen(key);
1056             jedis.close();
1057             return len;
1058         }
1059     }
1060 
1061     // *******************************************Lists*******************************************//
1062     public class Lists {
1063 
1064 
1065         /**
1066          * List長度
1067          *
1068 //         * @param String
1069          *            key
1070          * @return 長度
1071          * */
1072         public long llen(String key) {
1073             return llen(SafeEncoder.encode(key));
1074         }
1075 
1076         /**
1077          * List長度
1078          *
1079 //         * @param byte[] key
1080          * @return 長度
1081          * */
1082         public long llen(byte[] key) {
1083             // ShardedJedis sjedis = getShardedJedis();
1084             Jedis sjedis = getJedis();
1085             long count = sjedis.llen(key);
1086             sjedis.close();
1087             return count;
1088         }
1089 
1090         /**
1091          * 覆蓋操作,將覆蓋List中指定位置的值
1092          *
1093 //         * @param byte[] key
1094 //         * @param int index 位置
1095 //         * @param byte[] value 值
1096          * @return 狀態碼
1097          * */
1098         public String lset(byte[] key, int index, byte[] value) {
1099             Jedis jedis = getJedis();
1100             String status = jedis.lset(key, index, value);
1101             jedis.close();
1102             return status;
1103         }
1104 
1105         /**
1106          * 覆蓋操作,將覆蓋List中指定位置的值
1107          *
1108 //         * @param key
1109 //         * @param int index 位置
1110 //         * @param String
1111          *            value 值
1112          * @return 狀態碼
1113          * */
1114         public String lset(String key, int index, String value) {
1115             return lset(SafeEncoder.encode(key), index,
1116                     SafeEncoder.encode(value));
1117         }
1118 
1119         /**
1120          * 在value的相對位置插入記錄
1121          *
1122 //         * @param key
1123 //         * @param LIST_POSITION
1124 //         *            前面插入或后面插入
1125 //         * @param String
1126 //         *            pivot 相對位置的內容
1127 //         * @param String
1128 //         *            value 插入的內容
1129          * @return 記錄總數
1130          * */
1131         public long linsert(String key, LIST_POSITION where, String pivot,
1132                             String value) {
1133             return linsert(SafeEncoder.encode(key), where,
1134                     SafeEncoder.encode(pivot), SafeEncoder.encode(value));
1135         }
1136 
1137         /**
1138          * 在指定位置插入記錄
1139          *
1140 //         * @param String
1141 //         *            key
1142 //         * @param LIST_POSITION
1143 //         *            前面插入或后面插入
1144 //         * @param byte[] pivot 相對位置的內容
1145 //         * @param byte[] value 插入的內容
1146          * @return 記錄總數
1147          * */
1148         public long linsert(byte[] key, LIST_POSITION where, byte[] pivot,
1149                             byte[] value) {
1150             Jedis jedis = getJedis();
1151             long count = jedis.linsert(key, where, pivot, value);
1152             jedis.close();
1153             return count;
1154         }
1155 
1156         /**
1157          * 獲取List中指定位置的值
1158          *
1159 //         * @param String
1160 //         *            key
1161 //         * @param int index 位置
1162          * @return1163          * **/
1164         public String lindex(String key, int index) {
1165             return SafeEncoder.encode(lindex(SafeEncoder.encode(key), index));
1166         }
1167 
1168         /**
1169          * 獲取List中指定位置的值
1170          *
1171 //         * @param byte[] key
1172 //         * @param int index 位置
1173 //         * @return1174          * **/
1175         public byte[] lindex(byte[] key, int index) {
1176             // ShardedJedis sjedis = getShardedJedis();
1177             Jedis sjedis = getJedis();
1178             byte[] value = sjedis.lindex(key, index);
1179             sjedis.close();
1180             return value;
1181         }
1182 
1183         /**
1184          * 將List中的第一條記錄移出List
1185          *
1186 //         * @param String
1187          *            key
1188          * @return 移出的記錄
1189          * */
1190         public String lpop(String key) {
1191             return SafeEncoder.encode(lpop(SafeEncoder.encode(key)));
1192         }
1193 
1194         /**
1195          * 將List中的第一條記錄移出List
1196          *
1197 //         * @param byte[] key
1198          * @return 移出的記錄
1199          * */
1200         public byte[] lpop(byte[] key) {
1201             Jedis jedis = getJedis();
1202             byte[] value = jedis.lpop(key);
1203             jedis.close();
1204             return value;
1205         }
1206 
1207         /**
1208          * 將List中最后第一條記錄移出List
1209          *
1210 //         * @param byte[] key
1211          * @return 移出的記錄
1212          * */
1213         public String rpop(String key) {
1214             Jedis jedis = getJedis();
1215             String value = jedis.rpop(key);
1216             jedis.close();
1217             return value;
1218         }
1219 
1220         /**
1221          * 向List尾部追加記錄
1222          *
1223 //         * @param String
1224 //         *            key
1225 //         * @param String
1226          *            value
1227          * @return 記錄總數
1228          * */
1229         public long lpush(String key, String value) {
1230             return lpush(SafeEncoder.encode(key), SafeEncoder.encode(value));
1231         }
1232 
1233         /**
1234          * 向List頭部追加記錄
1235          *
1236 //         * @param String
1237 //         *            key
1238 //         * @param String
1239          *            value
1240          * @return 記錄總數
1241          * */
1242         public long rpush(String key, String value) {
1243             Jedis jedis = getJedis();
1244             long count = jedis.rpush(key, value);
1245             jedis.close();
1246             return count;
1247         }
1248 
1249         /**
1250          * 向List頭部追加記錄
1251          *
1252 //         * @param String
1253 //         *            key
1254 //         * @param String
1255          *            value
1256          * @return 記錄總數
1257          * */
1258         public long rpush(byte[] key, byte[] value) {
1259             Jedis jedis = getJedis();
1260             long count = jedis.rpush(key, value);
1261             jedis.close();
1262             return count;
1263         }
1264 
1265         /**
1266          * 向List中追加記錄
1267          *
1268 //         * @param byte[] key
1269 //         * @param byte[] value
1270          * @return 記錄總數
1271          * */
1272         public long lpush(byte[] key, byte[] value) {
1273             Jedis jedis = getJedis();
1274             long count = jedis.lpush(key, value);
1275             jedis.close();
1276             return count;
1277         }
1278 
1279         /**
1280          * 獲取指定范圍的記錄,可以做為分頁使用
1281          *
1282 //         * @param String
1283 //         *            key
1284 //         * @param long start
1285 //         * @param long end
1286          * @return List
1287          * */
1288         public List<String> lrange(String key, long start, long end) {
1289             // ShardedJedis sjedis = getShardedJedis();
1290             Jedis sjedis = getJedis();
1291             List<String> list = sjedis.lrange(key, start, end);
1292             sjedis.close();
1293             return list;
1294         }
1295 
1296         /**
1297          * 獲取指定范圍的記錄,可以做為分頁使用
1298          *
1299 //         * @param byte[] key
1300 //         * @param int start
1301 //         * @param int end 如果為負數,則尾部開始計算
1302          * @return List
1303          * */
1304         public List<byte[]> lrange(byte[] key, int start, int end) {
1305             // ShardedJedis sjedis = getShardedJedis();
1306             Jedis sjedis = getJedis();
1307             List<byte[]> list = sjedis.lrange(key, start, end);
1308             sjedis.close();
1309             return list;
1310         }
1311 
1312         /**
1313          * 刪除List中c條記錄,被刪除的記錄值為value
1314          *
1315 //         * @param byte[] key
1316 //         * @param int c 要刪除的數量,如果為負數則從List的尾部檢查並刪除符合的記錄
1317 //         * @param byte[] value 要匹配的值
1318          * @return 刪除后的List中的記錄數
1319          * */
1320         public long lrem(byte[] key, int c, byte[] value) {
1321             Jedis jedis = getJedis();
1322             long count = jedis.lrem(key, c, value);
1323             jedis.close();
1324             return count;
1325         }
1326 
1327         /**
1328          * 刪除List中c條記錄,被刪除的記錄值為value
1329          *
1330 //         * @param String
1331 //         *            key
1332 //         * @param int c 要刪除的數量,如果為負數則從List的尾部檢查並刪除符合的記錄
1333 //         * @param String
1334          *            value 要匹配的值
1335          * @return 刪除后的List中的記錄數
1336          * */
1337         public long lrem(String key, int c, String value) {
1338             return lrem(SafeEncoder.encode(key), c, SafeEncoder.encode(value));
1339         }
1340 
1341         /**
1342          * 算是刪除吧,只保留start與end之間的記錄
1343          *
1344 //         * @param byte[] key
1345 //         * @param int start 記錄的開始位置(0表示第一條記錄)
1346 //         * @param int end 記錄的結束位置(如果為-1則表示最后一個,-2,-3以此類推)
1347          * @return 執行狀態碼
1348          * */
1349         public String ltrim(byte[] key, int start, int end) {
1350             Jedis jedis = getJedis();
1351             String str = jedis.ltrim(key, start, end);
1352             jedis.close();
1353             return str;
1354         }
1355 
1356         /**
1357          * 算是刪除吧,只保留start與end之間的記錄
1358          *
1359 //         * @param String
1360 //         *            key
1361 //         * @param int start 記錄的開始位置(0表示第一條記錄)
1362 //         * @param int end 記錄的結束位置(如果為-1則表示最后一個,-2,-3以此類推)
1363          * @return 執行狀態碼
1364          * */
1365         public String ltrim(String key, int start, int end) {
1366             return ltrim(SafeEncoder.encode(key), start, end);
1367         }
1368     }
1369 
1370 }
JedisUtil

5.

spring 的 controller層,可以通過@Autowired注入 后直接調用方法,

但是有缺陷,

如果redisSpringContext.xml導入dispatcher-servlet.xml中,會導致

//    @Autowired
// private JedisUtil.Strings jedisString;
只能在controller層注入,不可以在service層注入,否則會報錯,無法編譯,具體原因不知,猜測是因為我把servlet層和service層的配置文件分開設置了,想要
在service層注入使用,只需要把redisSpringContext.xml導入springcontext-service.xml文件即可,當然,redisSpringContext.xml文件寫法有部分改動
在我的另一篇博客有記載:點擊訪問

 1 package controller;
 2 
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.stereotype.Controller;
 5 import org.springframework.web.bind.annotation.RequestMapping;
 6 import org.springframework.web.bind.annotation.ResponseBody;
 7 import redis.JedisUtil;
 8 
 9 
10 @Controller
11 public class RedisController {
12 
13 
14     @RequestMapping("/toRedis")
15     public String toRedis() {
16         return "redis";
17     }
18 
19 
20 
21 
22 //    /** 操作Key的方法 */
23 //    public Keys KEYS;
24 //    /** 對存儲結構為String類型的操作 */
25 //    public Strings STRINGS;
26 //    /** 對存儲結構為List類型的操作 */
27 //    public Lists LISTS;
28 //    /** 對存儲結構為Set類型的操作 */
29 //    public Sets SETS;
30 //    /** 對存儲結構為HashMap類型的操作 */
31 //    public Hash HASH;
32     @Autowired
33     private JedisUtil.Keys jedisKeys;
34 
35     @Autowired
36     private JedisUtil.Strings jedisString;
37 
38     @RequestMapping("getRedis1")
39     @ResponseBody
40     public String getRedis1() {
41         String str = "";
42         try{
43 //            jedisString.set("name","loveyou999"+System.currentTimeMillis());
44 //            str = jedisString.get("name");
45 //            System.out.println(str);
46             long start = System.currentTimeMillis();
47             for (int i = 0; i < 100000; i++) {
48                 //返回的是個字符串
49                 String res = jedisString.set("n" + i, "n" + i);
50                 System.out.println("返回的結果:" + res);
51                 //返回的結果:OK
52             }
53             long end = System.currentTimeMillis();
54             System.out.println("普通同步寫入:" + ((end - start) / 1000.0) + "秒");
55         }catch (Exception e){
56             e.printStackTrace();
57         }
58 //        (int)(Math.random() * (end-start+1) + start)
59         int num = (int)(Math.random() * (99999) + 1);
60         System.out.println(" num="+num);
61         //獲取字符型鍵值對
62         str = jedisString.get("n"+num );
63         System.out.println(str);
64         return str;
65     }
66 
67 
68 }
View Code

 



參考博客原址:https://www.cnblogs.com/lyq-biu/p/10987812.html










免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM