四、Java内存数据库实践之深入浅出Redis - Java Client - Jedis的使用

出处:http://josh-persistence.iteye.com/blog/2080745


一、使用Maven导入Jedis的相关jar包。

 

 

Xml代码  收藏代码

  1. <dependencies>  

  2.     <dependency>  

  3.         <groupId>redis.clients</groupId>  

  4.         <artifactId>jedis</artifactId>  

  5.         <version>2.2.0</version>  

  6.         <type>jar</type>  

  7.         <scope>compile</scope>  

  8.     </dependency>  

  9.   </dependencies>  

 

 

二、配置Redis的pool以从pool中获取redis的对象:

Java代码  收藏代码

  1. #最大分配的对象数  

  2. redis.pool.maxActive=1024  

  3.   

  4. #最大能够保持idel状态的对象数  

  5. redis.pool.maxIdle=200  

  6.   

  7. #当池内没有返回对象时,最大等待时间  

  8. redis.pool.maxWait=1000  

  9.   

  10. #当调用borrow Object方法时,是否进行有效性检查  

  11. redis.pool.testOnBorrow=false  

  12.   

  13. #当调用return Object方法时,是否进行有效性检查  

  14. redis.pool.testOnReturn=true  

  15.   

  16. #IP  

  17. redis.ip=192.168.1.155  

  18.   

  19. #Port  

  20. redis.port=6379  

 

三、相关的Java代码:

1、创建一个Java类用于管理Redis的Pool以产生Redis对象

Java代码  收藏代码

  1. package com.chuanliu.platform.activity.cache;  

  2.   

  3. import java.util.ResourceBundle;  

  4.   

  5.   

  6.   

  7. import redis.clients.jedis.Jedis;  

  8. import redis.clients.jedis.JedisPool;  

  9. import redis.clients.jedis.JedisPoolConfig;  

  10.   

  11. /** 

  12.  * Get the Redis Object from the Pool, 

  13.  * Redis using commons-pool to manage its own pool 

  14.  *  

  15.  * @author Josh Wang(Sheng) 

  16.  * 

  17.  * @email  [email protected] 

  18.  * 

  19.  */  

  20. public class RedisPoolManager {  

  21.   

  22.     private static JedisPool pool;  

  23.       

  24.     static {  

  25.         ResourceBundle bundle = ResourceBundle.getBundle("redis");  

  26.         if (bundle == null)   

  27.             throw new IllegalArgumentException("[redis.properties] is not found");  

  28.           

  29.         JedisPoolConfig config = new JedisPoolConfig();  

  30.         config.setMaxActive(Integer.valueOf(bundle.getString("redis.pool.maxActive")));  

  31.         config.setMaxIdle(Integer.valueOf(bundle.getString("redis.pool.maxIdle")));  

  32.         config.setMaxWait(Long.valueOf(bundle.getString("redis.pool.maxWait")));  

  33.         config.setTestOnBorrow(Boolean.valueOf(bundle.getString("redis.pool.testOnBorrow")));  

  34.         config.setTestOnReturn(Boolean.valueOf(bundle.getString("redis.pool.testOnReturn")));  

  35.           

  36.         pool = new JedisPool(config, bundle.getString("redis.ip"), Integer.valueOf(bundle.getString("redis.port")));  

  37.     }  

  38.       

  39.     /** 

  40.      * Get Jedis resource from the pool 

  41.      * @return 

  42.      */  

  43.     public static Jedis createInstance() {  

  44.         Jedis jedis = pool.getResource();  

  45.         jedis.auth("diandi");  

  46.         return jedis;  

  47.     }  

  48.       

  49.     /** 

  50.      * Return the resource to pool 

  51.      * @param jedis 

  52.      */  

  53.     public static void returnResource(Jedis jedis) {  

  54.         pool.returnResource(jedis);  

  55.     }  

  56. }  

 

2. 定义一个Java类用于使用获取到的Redis对象往内存中进行CRUD基本操作。

Java代码  收藏代码

  1. p/** 

  2.  *  

  3.  */  

  4. package com.chuanliu.platform.activity.cache;  

  5.   

  6. import java.util.List;  

  7. import java.util.Map;  

  8. import java.util.Set;  

  9.   

  10. import org.springframework.stereotype.Component;  

  11.   

  12. import com.sun.jersey.spi.resource.Singleton;  

  13.   

  14. import redis.clients.jedis.Jedis;  

  15. import redis.clients.jedis.SortingParams;  

  16.   

  17. /** 

  18.  * @author Josh Wang(Sheng) 

  19.  * 

  20.  * @email  [email protected] 

  21.  * 

  22.  */  

  23. @Singleton  

  24. @Component("cacheManager")  

  25. public class CacheManager {  

  26.   

  27.     private Jedis jedis = RedisPoolManager.createInstance();  

  28.       

  29.     ////////////////////Basic Functions(String related) - Start /////////////////////////////  

  30.     /** 

  31.      * If the value existed, will override the value 

  32.      * @param entries 

  33.      */  

  34.     public void set(Map<String, String> entries) {  

  35.         for (Map.Entry<String, String> entry : entries.entrySet()) {  

  36.             jedis.set(entry.getKey(), entry.getValue());  

  37.         }  

  38.     }  

  39.       

  40.     /** 

  41.      * If the key exited, will override the value 

  42.      * @param key 

  43.      * @param value 

  44.      */  

  45.     public void set(String key, String value) {  

  46.         jedis.set(key, value);  

  47.     }  

  48.       

  49.     /** 

  50.      *  

  51.      * @param entries 

  52.      */  

  53.     public void setnx(Map<String, String> entries) {  

  54.         for (Map.Entry<String, String> entry : entries.entrySet()) {  

  55.             jedis.setnx(entry.getKey(), entry.getValue());  

  56.         }  

  57.     }  

  58.       

  59.     /** 

  60.      * Only set the value when the key not exist 

  61.      * @param key 

  62.      * @param value 

  63.      */  

  64.     public void setnx(String key, String value) {  

  65.         jedis.setnx(key, value);  

  66.     }  

  67.       

  68.     /** 

  69.      * Set the value to the key and specify the key's life cycle as seconds. 

  70.      * @param key 

  71.      * @param live 

  72.      * @param value 

  73.      */  

  74.     public void setKeyLive(String key, int live, String value) {  

  75.         jedis.setex(key, live, value);  

  76.     }  

  77.       

  78.     /** 

  79.      * Append the value to an existing key 

  80.      * @param key 

  81.      * @param value 

  82.      */  

  83.     public void append(String key, String value) {  

  84.         jedis.append(key, value);  

  85.     }  

  86.       

  87.     /** 

  88.      * Get the value by the given key 

  89.      * @param key 

  90.      * @return 

  91.      */  

  92.     public String getValue(String key) {  

  93.         return jedis.get(key);  

  94.     }  

  95.       

  96.     /** 

  97.      * Get the values of the specified keys 

  98.      * @param keys 

  99.      * @return 

  100.      */  

  101.     public List<String> getValues(String... keys) {  

  102.         return jedis.mget(keys);  

  103.     }  

  104.       

  105.     /** 

  106.      * remove the value by the key from the cache 

  107.      * @param key 

  108.      * @return 

  109.      */  

  110.     public Long removeValue(String key) {  

  111.         return jedis.del(key);  

  112.     }  

  113.       

  114.     /** 

  115.      * Delete the expected values from the cache 

  116.      * @param keys 

  117.      * @return 

  118.      */  

  119.     public Long removeValues(String... keys) {  

  120.         return jedis.del(keys);  

  121.     }  

  122.       

  123.     /** 

  124.      * Identify whether the key in the cache or not 

  125.      * @param key 

  126.      * @return 

  127.      */  

  128.     public boolean exists(String key) {  

  129.         return jedis.exists(key);  

  130.     }  

  131.       

  132.     /** 

  133.      * Release the resource  

  134.      */  

  135.     public void returnSource() {  

  136.         RedisPoolManager.returnResource(jedis);  

  137.     }  

  138.       

  139.     /** 

  140.      * Clear the cache 

  141.      */  

  142.     public String clear() {  

  143.         return jedis.flushDB();  

  144.     }  

  145.       

  146.     /** 

  147.      * Calculate the size of the cache 

  148.      * @return 

  149.      */  

  150.     public long calculateSize() {  

  151.         return jedis.dbSize();  

  152.     }  

  153.       

  154.     /** 

  155.      * Get and update the member by the key in the cache 

  156.      * @param key 

  157.      * @param value 

  158.      * @return 

  159.      */  

  160.     public String getSet(String key, String value) {  

  161.         return jedis.getSet(key, value);  

  162.     }  

  163.       

  164.     /** 

  165.      *  

  166.      * @param key 

  167.      * @param startOffset 

  168.      * @param endOffset 

  169.      * @return 

  170.      */  

  171.     public String getRange(String key, int startOffset, int endOffset) {  

  172.         return jedis.getrange(key, startOffset, endOffset);  

  173.     }  

  174.       

  175.     ////////////////////Basic Functions(String related) - End /////////////////////////////  

  176.       

  177.       

  178.       

  179.     ////////////////////List Functions - Start /////////////////////////////  

  180.     /** 

  181.      * push the value to the given list 

  182.      *  

  183.      * 将一个或多个值 value 插入到列表 key 的表头 

  184.  

  185.      *如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表头:  

  186.      *比如说,对空列表 mylist 执行命令 LPUSH mylist a b c ,列表的值将是 c b a , 

  187.      *这等同于原子性地执行 LPUSH mylist a 、 LPUSH mylist b 和 LPUSH mylist c 三个命令。 

  188.  

  189.      *如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。 

  190.  

  191.      *当 key 存在但不是列表类型时,返回一个错误。 

  192.      *  

  193.      * @param listName 

  194.      * @param value 

  195.      * @return 

  196.      */  

  197.     public long add2List(String listName, String... values) {  

  198.         return jedis.lpush(listName, values);  

  199.     }  

  200.       

  201.     /** 

  202.      * get the list size 

  203.      * @param listName 

  204.      * @return 

  205.      */  

  206.     public long getListSize(String listName) {  

  207.         return jedis.llen(listName);  

  208.     }  

  209.       

  210.     /** 

  211.      * Update the member on the index 

  212.      * @param listName 

  213.      * @param index 

  214.      * @param value 

  215.      */  

  216.     public void updateList(String listName, int index, String value) {  

  217.         jedis.lset(listName, index, value);  

  218.     }  

  219.       

  220.     /** 

  221.      * Get the value on the index 

  222.      * @param listName 

  223.      * @param index 

  224.      * @return 

  225.      */  

  226.     public String getIndexValue(String listName, int index) {  

  227.         return jedis.lindex(listName, index);  

  228.     }  

  229.       

  230.     /** 

  231.      * 根据参数 count 的值,移除列表中与参数 value 相等的元素。 

  232.      * count 的值可以是以下几种: 

  233.  

  234.      *count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。 

  235.      *count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。 

  236.      *count = 0 : 移除表中所有与 value 相等的值。 

  237.  

  238.      *  

  239.      * @param listName 

  240.      * @param count 

  241.      * @param value 

  242.      * @return 

  243.      */  

  244.     public long removeLValue(String listName, int count, String value) {  

  245.         return jedis.lrem(listName, count, value);  

  246.     }  

  247.       

  248.     /** 

  249.      * Remove the value out side of the range 

  250.      *  

  251.      * @param listName 

  252.      * @param start 

  253.      * @param end 

  254.      * @return 

  255.      */  

  256.     public String removeOutterValue(String listName, int start, int end) {  

  257.         return jedis.ltrim(listName, start, end);  

  258.     }  

  259.       

  260.     /** 

  261.      * Pop the lists 

  262.      * @param listName 

  263.      * @return 

  264.      */  

  265.     public String popList(String listName) {  

  266.         return jedis.lpop(listName);  

  267.     }  

  268.       

  269.     /** 

  270.      * Get the specified list values 

  271.      *  

  272.      * 返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定。 

  273.  

  274.      * 下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。 

  275.       

  276.      * 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推 

  277.      *  

  278.      * 注意LRANGE命令和编程语言区间函数的区别 

  279.  

  280.             假如你有一个包含一百个元素的列表,对该列表执行 LRANGE list 0 10 ,结果是一个包含11个元素的列表, 

  281.             这表明 stop 下标也在 LRANGE 命令的取值范围之内(闭区间),  这和某些语言的区间函数可能不一致, 

  282.             比如Ruby的 Range.new 、 Array#slice 和Python的 range() 函数 

  283.      *  

  284.      * @param listName 

  285.      * @param start 

  286.      * @param end 

  287.      * @return 

  288.      */  

  289.     public List<String> getListValues(String listName, long start, long end) {  

  290.         return jedis.lrange(listName, start, end);  

  291.     }  

  292.       

  293.     /** 

  294.      * Get all of the values of the list 

  295.      *  

  296.      * @param listName 

  297.      * @return 

  298.      */  

  299.     public List<String> getAllListValues(String listName) {  

  300.         return jedis.lrange(listName, 0, -1);  

  301.     }  

  302.       

  303.     /** 

  304.      * Sort the list 

  305.      * @param listName 

  306.      * @return 

  307.      */  

  308.     public List<String> sort(String listName) {  

  309.         return jedis.sort(listName);  

  310.     }  

  311.       

  312.     /** 

  313.      *  

  314.      * @param key 

  315.      * @param params 

  316.      * @param dstKey 

  317.      * @return 

  318.      */  

  319.     public Long sort(String key, SortingParams params, String dstKey) {  

  320.         return jedis.sort(key, params, dstKey);  

  321.     }  

  322.       

  323.     ////////////////////List Functions - End /////////////////////////////  

  324.       

  325.       

  326.     ////////////////////Set Functions - Start /////////////////////////////  

  327.     /** 

  328.      * Identify whether the member in the given set or not 

  329.      * @param setName 

  330.      * @param member 

  331.      * @return 

  332.      */  

  333.     public boolean exists(String setName, String member) {  

  334.         return jedis.sismember(setName, member);  

  335.     }  

  336.       

  337.     /** 

  338.      * Add the members to set 

  339.      * @param setName 

  340.      * @param members 

  341.      * @return 

  342.      */  

  343.     public long add2Set(String setName, String... members) {  

  344.         return jedis.sadd(setName, members);  

  345.     }  

  346.       

  347.     /** 

  348.      * Get all of the values of the set 

  349.      *  

  350.      * @param setName 

  351.      * @return 

  352.      */  

  353.     public Set<String> getAllSetValues(String setName) {  

  354.         return jedis.smembers(setName);  

  355.     }  

  356.       

  357.     /** 

  358.      * Remove members from the set 

  359.      *  

  360.      * @param setName 

  361.      * @param members 

  362.      * @return 

  363.      */  

  364.     public Long removeSValues(String setName, String ... members) {  

  365.         return jedis.srem(setName, members);  

  366.     }  

  367.       

  368.     /** 

  369.      * Set Pop 

  370.      * @param setName 

  371.      * @return 

  372.      */  

  373.     public String popSet(String setName) {  

  374.         return jedis.spop(setName);  

  375.     }  

  376.       

  377.     /** 

  378.      * 交集 

  379.      * Get the intersection  

  380.      * @param sets 

  381.      * @return 

  382.      */  

  383.     public Set<String> intersection(String... sets) {  

  384.         return jedis.sinter(sets);  

  385.     }  

  386.       

  387.     /** 

  388.      * 并集 

  389.      * Get the union set of the given sets 

  390.      * @param sets 

  391.      * @return 

  392.      */  

  393.     public Set<String> union(String... sets) {  

  394.         return jedis.sunion(sets);  

  395.     }  

  396.       

  397.     /** 

  398.      * 差集 

  399.      * Get the difference set of the given sets 

  400.      *  

  401.      * @param sets 

  402.      * @return 

  403.      */  

  404.     public Set<String> diff(String... sets) {  

  405.         return jedis.sdiff(sets);  

  406.     }  

  407.       

  408.     ////////////////////Set Functions - End /////////////////////////////  

  409.       

  410.       

  411.     ////////////////////Sorted Set Functions - Start /////////////////////////////  

  412.     /** 

  413.      * 将一个或多个 member 元素及其 score 值加入到有序集 key 当中。 

  414.      * 如果某个 member 已经是有序集的成员,那么更新这个 member 的 score 值,并通过重新插入这个 member 元素, 

  415.      * 来保证该 member 在正确的位置上。 

  416.      *  

  417.      *  

  418.      * @param ssetName - 如果 ssetName 不存在,则创建一个空的有序集并执行 ZADD 操作。 

  419.      *                     当 ssetName 存在但不是有序集类型时,返回一个错误。 

  420.      * @param score - 可以是整数值或者双精度浮点数,用于排序 

  421.      * @param member 

  422.      * @return 

  423.      */  

  424.     public long add2SSet(String ssetName, double score, String member) {  

  425.         return jedis.zadd(ssetName, score, member);  

  426.     }  

  427.       

  428.     /** 

  429.      * Return the size of the sorted set 

  430.      * @param sset 

  431.      * @return 

  432.      */  

  433.     public long card(String sset) {  

  434.         return jedis.zcard(sset);  

  435.     }  

  436.       

  437.     /** 

  438.      * Get the sub set  

  439.      * @param sset 

  440.      * @param start 

  441.      * @param end 

  442.      * @return 

  443.      */  

  444.     public Set<String> getSubSet(String sset, long start, long end) {  

  445.         return jedis.zrange(sset, start, end);  

  446.     }  

  447.       

  448.     /** 

  449.      * Get the index of the member 

  450.      * @param sset 

  451.      * @param member 

  452.      * @return 

  453.      */  

  454.     public Double getIndex(String sset, String member) {  

  455.         return jedis.zscore(sset, member);  

  456.     }  

  457.       

  458.     /** 

  459.      * Remove the members  

  460.      * @param sset 

  461.      * @param members 

  462.      * @return 

  463.      */  

  464.     public Long removeSSValues(String sset, String ...members) {  

  465.         return jedis.zrem(sset, members);  

  466.     }  

  467.       

  468.     /** 

  469.      * Get all of the values of the sorted set 

  470.      * @param sset 

  471.      * @return 

  472.      */  

  473.     public Set<String> getAllSSValues(String sset) {  

  474.         return jedis.zrange(sset, 0, -1);  

  475.     }  

  476.       

  477.     /** 

  478.      *  

  479.      * @param sset 

  480.      * @param start 

  481.      * @param end 

  482.      * @return 

  483.      */  

  484.     public Long countRange(String sset, double start, double end) {  

  485.         return jedis.zcount(sset, start, end);  

  486.     }  

  487.       

  488.     ////////////////////Sorted Set Functions - End /////////////////////////////  

  489.       

  490.       

  491.     ////////////////////Hash Map Functions - Start /////////////////////////////  

  492.     /** 

  493.      * Push the value to the map on the key 

  494.      * @param map 

  495.      * @param key 

  496.      * @param value 

  497.      * @return 

  498.      */  

  499.     public long push(String map, String key, String value) {  

  500.         return jedis.hset(map, key, value);  

  501.     }  

  502.       

  503.     /** 

  504.      * Identify whether the key exist or not 

  505.      * @param map 

  506.      * @param key 

  507.      * @return 

  508.      */  

  509.     public boolean hexists(String map, String key) {  

  510.         return jedis.hexists(map, key);  

  511.     }  

  512.       

  513.     /** 

  514.      * Get the value of the key 

  515.      * @param map 

  516.      * @param key 

  517.      * @return 

  518.      */  

  519.     public String getValue(String map, String key) {  

  520.         return jedis.hget(map, key);  

  521.     }  

  522.       

  523.     /** 

  524.      * Get the values of the keys  

  525.      *  

  526.      * @param map 

  527.      * @param keys 

  528.      * @return 

  529.      */  

  530.     public List<String> getHValues(String map, String... keys) {  

  531.         return jedis.hmget(map, keys);  

  532.     }  

  533.       

  534.     /** 

  535.      * Remove the values by the keys 

  536.      * @param map 

  537.      * @param keys 

  538.      * @return 

  539.      */  

  540.     public Long removeHValues(String map, String ... keys) {  

  541.         return jedis.hdel(map, keys);  

  542.     }  

  543.       

  544.     /** 

  545.      * Increment the value on the key for the map 

  546.      * @param map 

  547.      * @param key 

  548.      * @param value 

  549.      * @return 

  550.      */  

  551.     public Long increment(String map, String key, long value) {  

  552.         return jedis.hincrBy(map, key, value);  

  553.     }  

  554.       

  555.     /** 

  556.      * Get all of the keys of the map 

  557.      * @param map 

  558.      * @return 

  559.      */  

  560.     public Set<String> getKeys(String map) {  

  561.         return jedis.hkeys(map);  

  562.     }  

  563.       

  564.     /** 

  565.      * Get all of the values of the map 

  566.      * @param map 

  567.      * @return 

  568.      */  

  569.     public List<String> getValues(String map) {  

  570.         return jedis.hvals(map);  

  571.     }  

  572.       

  573.     ////////////////////Hash Map Functions - End //////////////////////////////  

  574. }  

 

3. 创建相关的Unit Test类进行测试

Java代码  收藏代码

  1. /** 

  2.  *  

  3.  */  

  4. package com.chuanliu.platform.activity.cache;  

  5.   

  6.   

  7. import javax.annotation.Resource;  

  8.   

  9.   

  10. import org.junit.Before;  

  11. import org.junit.Test;  

  12.   

  13.   

  14.   

  15. import com.chuanliu.platform.activity.basic.test.SpringBaseTest;  

  16.   

  17.   

  18. /** 

  19.  * @author Josh Wang(Sheng) 

  20.  * 

  21.  * @email  [email protected] 

  22.  */  

  23.   

  24. public class TestCacheManager extends SpringBaseTest {  

  25.       

  26.     private @Resource CacheManager cacheManager;  

  27.       

  28.     @Before  

  29.     public void init() {  

  30.         printHighlight(cacheManager.hashCode() + "");  

  31.     }  

  32.       

  33.     @Test  

  34.     public void basicTest() {  

  35.         print("============= Basic1 ==========================");  

  36.           

  37.         // 清空数据  

  38.         print(cacheManager.clear());  

  39.           

  40.         print(cacheManager.exists("josh"));  

  41.           

  42.         // 存储数据  

  43.         cacheManager.set("josh""WangSheng");  

  44.           

  45.         print(cacheManager.exists("josh"));  

  46.           

  47.         print(cacheManager.getValue("josh"));  

  48.           

  49.         print("============= Basic 2 ==========================");  

  50.           

  51.         // 若key不存在,则存储  

  52.         cacheManager.setnx("josh""wang sheng");  

  53.         print(cacheManager.getValue("josh"));  

  54.           

  55.         // 覆盖数据  

  56.         cacheManager.set("josh""wang sheng");  

  57.         print(cacheManager.getValue("josh"));  

  58.           

  59.         // 追加数据  

  60.         cacheManager.append("josh""Lily");  

  61.         print(cacheManager.getValue("josh"));  

  62.           

  63.         print("============= Basic 3 ==========================");  

  64.           

  65.         // 设置key的有效期,并存储数据  

  66.         cacheManager.setKeyLive("josh"2"WangSheng-Lily");  

  67.         print(cacheManager.getValue("josh"));  

  68.           

  69.         try {  

  70.             Thread.sleep(3000);  

  71.             print(cacheManager.getValue("josh"));  

  72.         } catch (InterruptedException e) {  

  73.             print("Josh released  ... now ^_^");  

  74.         }  

  75.           

  76.           

  77.           

  78.         print("============= Basic 4 ==========================");  

  79.           

  80.         // 获取并更改数据  

  81.         cacheManager.getSet("josh""wang sheng");  

  82.         print(cacheManager.getValue("josh"));  

  83.           

  84.         print("============= Basic 5 ==========================");  

  85.         // 截取value的值  

  86.         print(cacheManager.getRange("josh"13));  

  87.           

  88.         cacheManager.set("MJ""Jordan");  

  89.           

  90.         print(cacheManager.getValues("josh""MJ"));  

  91.           

  92.         print("============= Basic 6 ==========================");  

  93.         cacheManager.removeValues(new String[]{"josh""MJ"});  

  94.           

  95.         print(cacheManager.getValues("josh""MJ"));  

  96.     }  

  97.       

  98.     /** 

  99.      * List 是无序的,所以测试结果和expect的结果可能不一致 

  100.      *  

  101.      * 还是是从-1开始? 

  102.      */  

  103.     @Test  

  104.     public void listTest() {  

  105.         System.out.println("============= list1 ==========================");  

  106.         // 清空数据  

  107.         print(cacheManager.clear());  

  108.           

  109.         // 添加数据  

  110.         cacheManager.add2List("ball""Jordan");  

  111.         cacheManager.add2List("ball""Maddie");  

  112.         cacheManager.add2List("ball""AI");  

  113.         cacheManager.add2List("ball""Yao");  

  114.   

  115.         // The order should be : Yao, AI, Maddie, Jordan  

  116.           

  117.         // 数组长度  

  118.         print(cacheManager.getListSize("ball"));  

  119.           

  120.         print(cacheManager.getAllListValues("ball"));  

  121.           

  122.         print(cacheManager.getListValues("ball"0, -1));  

  123.           

  124.         System.out.println("============= list2 ==========================");  

  125.           

  126.         // 修改列表中单个值  

  127.         cacheManager.updateList("ball"1"Allen Iversen");  

  128.         print(cacheManager.getListValues("ball"03));  

  129.           

  130.         // 获取列表指定下标的值  

  131.         print(cacheManager.getIndexValue("ball"2));  

  132.           

  133.         // 删除列表指定下标的值  

  134.         print(cacheManager.removeLValue("ball"1"Yao"));  

  135.         print(cacheManager.getAllListValues("ball"));  

  136.           

  137.         // 删除区间以外的数据  

  138.         print(cacheManager.removeOutterValue("ball"01));  

  139.         print(cacheManager.getAllListValues("ball"));  

  140.           

  141.         // 列表出栈  

  142.         print(cacheManager.popList("ball"));  

  143.     }  

  144.       

  145.     @Test  

  146.     public void testSet() {  

  147.         print("========================= Set ====================");  

  148.           

  149.         // 清空数据  

  150.         print(cacheManager.clear());  

  151.           

  152.         // 添加数据  

  153.         cacheManager.add2Set("ball""Jordan");  

  154.         cacheManager.add2Set("ball""Maddie");  

  155.         cacheManager.add2Set("ball""AI");  

  156.         cacheManager.add2Set("ball""Yao");  

  157.           

  158.         // 判断value是否在列表中  

  159.         print(cacheManager.exists("ball""AI"));  

  160.         print(cacheManager.exists("ball""Yao "));  

  161.           

  162.         // 整个列表的值  

  163.         print(cacheManager.getAllSetValues("ball"));  

  164.           

  165.         // 删除指定的元素  

  166.         print(cacheManager.removeSValues("ball""Yao"));  

  167.           

  168.         // 出栈  

  169.         print(cacheManager.popSet("ball"));  

  170.           

  171.         // 整个列表的值  

  172.         print(cacheManager.getAllSetValues("ball"));  

  173.           

  174.         cacheManager.add2Set("bball""Jordan");  

  175.         cacheManager.add2Set("bball""Maddie");  

  176.         cacheManager.add2Set("bball""AI");  

  177.         cacheManager.add2Set("bball""Yao");  

  178.           

  179.         cacheManager.add2Set("fball""Jordan");  

  180.         cacheManager.add2Set("fball""Ronaldo");  

  181.         cacheManager.add2Set("fball""Rivaldo");  

  182.         cacheManager.add2Set("fball""Cristiano Ronaldo");  

  183.         cacheManager.add2Set("fball""Ronaldinho");  

  184.           

  185.         // 交集  

  186.         print(cacheManager.intersection("bball""fball"));  

  187.           

  188.         // 并集  

  189.         print(cacheManager.union("bball""fball"));  

  190.           

  191.         // 差集  

  192.         print(cacheManager.diff("bball""fball"));  

  193.           

  194.     }  

  195.       

  196.     @Test  

  197.     public void testHash() {  

  198.         System.out.println("=============  hash ==========================");  

  199.           

  200.         // 清空数据  

  201.         print(cacheManager.clear());  

  202.           

  203.         // 添加数据  

  204.         cacheManager.push("hball""Jordan""Chicago");  

  205.         cacheManager.push("hball""Maddie""Houston");  

  206.         cacheManager.push("hball""AI""Philadelphia");  

  207.         cacheManager.push("hball""Yao""Houston");  

  208.           

  209.         // 判断某个值是否存在  

  210.         print(cacheManager.hexists("hball""Yao "));  

  211.         print(cacheManager.hexists("hball""AI"));  

  212.           

  213.         // 获取指定的值  

  214.         print(cacheManager.getValue("hball""Jordan"));  

  215.           

  216.         // 批量获取指定的值  

  217.         print(cacheManager.getHValues("hball""Jordan""Maddie"));  

  218.           

  219.         // 删除指定的值  

  220.         print(cacheManager.removeHValues("hball""Yao"));  

  221.           

  222.         // 为key中的域 field 的值加上增量 increment, hash value must be a data value  

  223.         // print(cacheManager.increment("hball", "Jordan", 123l));  

  224.           

  225.         // 获取所有的keys  

  226.         print(cacheManager.getKeys("hball"));  

  227.           

  228.         // 获取所有的values  

  229.         print(cacheManager.getValues("hball"));  

  230.     }  

  231.       

  232. }  

 

这一篇讲了基本的Jedis的使用,下一篇讲接着讲解Jedis的高级使用,即Sharding。


你可能感兴趣的:(redis,jredis)