Jedis 是 Redis 官方首選的 Java 客戶端開發包。
工作過程總結的一個示例,貼出來,如下:
Java代碼
-
package com.wujintao.redis;
-
-
import java.util.Date;
-
import java.util.HashMap;
-
import java.util.Iterator;
-
import java.util.List;
-
import java.util.Map;
-
import java.util.Set;
-
-
import org.junit.Test;
-
-
import redis.clients.jedis.Jedis;
-
import redis.clients.jedis.Pipeline;
-
import redis.clients.jedis.SortingParams;
-
-
import com.wujintao.redis.util.RedisUtil;
-
-
-
public class TestCase {
-
-
/**
-
* 這種方式可以解決那些問題並且會實現高效的性能
-
*/
-
-
public static void main(String[] args) {
-
-
// ...when closing your application:
-
RedisUtil.getPool().destroy();
-
-
}
-
-
public static void Hello() {
-
Jedis jedis = RedisUtil.getJedis();
-
try {
-
// 向key-->name中放入了value-->minxr
-
jedis.set( "name" , "minxr" );
-
String ss = jedis.get( "name" );
-
System.out.println(ss);
-
-
// 很直觀,類似map 將jintao append到已經有的value之後
-
jedis.append( "name" , "jintao" );
-
ss = jedis.get( "name" );
-
System.out.println(ss);
-
-
// 2、直接覆蓋原來的數據
-
jedis.set( "name" , "jintao" );
-
System.out.println(jedis.get( "jintao" ));
-
-
// 刪除key對應的記錄
-
jedis.del( "name" );
-
System.out.println(jedis.get( "name" )); // 執行結果:null
-
-
/**
-
*/
-
jedis.mset( "name" , "minxr" , "jarorwar" , "aaa");
-
System.out.println(jedis.mget( "name" , "jarorwar"));
-
} catch (Exception e) {
-
e.printStackTrace();
-
} finally {
-
RedisUtil.getPool().returnResource(jedis);
-
}
-
-
}
-
-
private void testKey() {
-
Jedis jedis = RedisUtil.getJedis();
-
System.out.println( "=============key==========================");
-
// 清空數據
-
System.out.println(jedis.flushDB());
-
System.out.println(jedis.echo( "foo" ));
-
// 判斷key否存在
-
System.out.println(jedis.exists( "foo" ));
-
jedis.set( "key" , "values" );
-
System.out.println(jedis.exists( "key" ));
-
}
-
-
public static void testString() {
-
System.out.println( "==String==" );
-
Jedis jedis = RedisUtil.getJedis();
-
try {
-
// String
-
jedis.set( "key" , "Hello World!" );
-
String value = jedis.get( "key" );
-
System.out.println(value);
-
} catch (Exception e) {
-
e.printStackTrace();
-
} finally {
-
RedisUtil.getPool().returnResource(jedis);
-
}
-
-
System.out.println("=============String==========================" );
-
// 清空數據
-
System.out.println(jedis.flushDB());
-
// 存儲數據
-
jedis.set( "foo" , "bar" );
-
System.out.println(jedis.get( "foo" ));
-
// 若key不存在,則存儲
-
jedis.setnx( "foo" , "foo not exits" );
-
System.out.println(jedis.get( "foo" ));
-
// 覆蓋數據
-
jedis.set( "foo" , "foo update" );
-
System.out.println(jedis.get( "foo" ));
-
// 追加數據
-
jedis.append( "foo" , " hello, world" );
-
System.out.println(jedis.get( "foo" ));
-
// 設置key的有效期,並存儲數據
-
jedis.setex( "foo" , 2 , "foo not exits" );
-
System.out.println(jedis.get( "foo" ));
-
try {
-
Thread.sleep( 3000 );
-
} catch (InterruptedException e) {
-
}
-
System.out.println(jedis.get( "foo" ));
-
// 獲取並更改數據
-
jedis.set( "foo" , "foo update" );
-
System.out.println(jedis.getSet( "foo" , "foo modify" ));
-
// 截取value的值
-
System.out.println(jedis.getrange( "foo" , 1 , 3 ));
-
System.out.println(jedis.mset( "mset1" , "mvalue1" , "mset2", "mvalue2" ,
-
"mset3" , "mvalue3" , "mset4" , "mvalue4"));
-
System.out.println(jedis.mget( "mset1" , "mset2" , "mset3", "mset4" ));
-
System.out.println(jedis.del( new String[] { "foo" , "foo1" , "foo3" }));
-
}
-
-
public static void testList() {
-
System.out.println( "==List==" );
-
Jedis jedis = RedisUtil.getJedis();
-
try {
-
// 開始前,先移除所有的內容
-
jedis.del( "messages" );
-
jedis.rpush( "messages" , "Hello how are you?");
-
jedis.rpush( "messages" , "Fine thanks. I'm having fun with redis." );
-
jedis.rpush( "messages" , "I should look into this NOSQL thing ASAP" );
-
-
// 再取出所有數據jedis.lrange是按範圍取出,
-
-
List<String> values = jedis.lrange( "messages" , 0, - 1 );
-
System.out.println(values);
-
-
} catch (Exception e) {
-
e.printStackTrace();
-
} finally {
-
RedisUtil.getPool().returnResource(jedis);
-
}
-
-
// 清空數據
-
System.out.println(jedis.flushDB());
-
// 添加數據
-
jedis.lpush( "lists" , "vector" );
-
jedis.lpush( "lists" , "ArrayList" );
-
jedis.lpush( "lists" , "LinkedList" );
-
// 數組長度
-
System.out.println(jedis.llen( "lists" ));
-
// 排序
-
System.out.println(jedis.sort( "lists" ));
-
// 字串
-
System.out.println(jedis.lrange( "lists" , 0 , 3 ));
-
// 修改列表中單個值
-
jedis.lset( "lists" , 0 , "hello list!" );
-
// 獲取列表指定下標的值
-
System.out.println(jedis.lindex( "lists" , 1 ));
-
// 刪除列表指定下標的值
-
System.out.println(jedis.lrem( "lists" , 1 , "vector" ));
-
// 刪除區間以外的數據
-
System.out.println(jedis.ltrim( "lists" , 0 , 1 ));
-
// 列表出棧
-
System.out.println(jedis.lpop( "lists" ));
-
// 整個列表值
-
System.out.println(jedis.lrange( "lists" , 0 , - 1 ));
-
}
-
-
public static void testSet() {
-
System.out.println( "==Set==" );
-
Jedis jedis = RedisUtil.getJedis();
-
try {
-
jedis.sadd( "myset" , "1" );
-
jedis.sadd( "myset" , "2" );
-
jedis.sadd( "myset" , "3" );
-
jedis.sadd( "myset" , "4" );
-
Set<String> setValues = jedis.smembers( "myset" );
-
System.out.println(setValues);
-
-
// 移除noname
-
jedis.srem( "myset" , "4" );
-
System.out.println(jedis.smembers( "myset" )); // 獲取所有加入的value
-
System.out.println(jedis.sismember( "myset" , "4" ));// 判斷 minxr
-
// 是否是sname集合的元素
-
System.out.println(jedis.scard( "sname" )); // 返回集合的元素個數
-
} catch (Exception e) {
-
e.printStackTrace();
-
} finally {
-
RedisUtil.getPool().returnResource(jedis);
-
}
-
-
// 清空數據
-
System.out.println(jedis.flushDB());
-
// 添加數據
-
jedis.sadd( "sets" , "HashSet" );
-
jedis.sadd( "sets" , "SortedSet" );
-
jedis.sadd( "sets" , "TreeSet" );
-
// 判斷value是否在列表中
-
System.out.println(jedis.sismember( "sets" , "TreeSet" ));
-
;
-
// 整個列表值
-
System.out.println(jedis.smembers( "sets" ));
-
// 刪除指定元素
-
System.out.println(jedis.srem( "sets" , "SortedSet" ));
-
// 出棧
-
System.out.println(jedis.spop( "sets" ));
-
System.out.println(jedis.smembers( "sets" ));
-
//
-
jedis.sadd( "sets1" , "HashSet1" );
-
jedis.sadd( "sets1" , "SortedSet1" );
-
jedis.sadd( "sets1" , "TreeSet" );
-
jedis.sadd( "sets2" , "HashSet2" );
-
jedis.sadd( "sets2" , "SortedSet1" );
-
jedis.sadd( "sets2" , "TreeSet1" );
-
// 交集
-
System.out.println(jedis.sinter( "sets1" , "sets2" ));
-
// 並集
-
System.out.println(jedis.sunion( "sets1" , "sets2" ));
-
// 差集
-
System.out.println(jedis.sdiff( "sets1" , "sets2" ));
-
}
-
-
public static void sortedSet() {
-
System.out.println( "==SoretedSet==" );
-
Jedis jedis = RedisUtil.getJedis();
-
try {
-
jedis.zadd( "hackers" , 1940 , "Alan Kay" );
-
jedis.zadd( "hackers" , 1953 , "Richard Stallman");
-
jedis.zadd( "hackers" , 1965 , "Yukihiro Matsumoto");
-
jedis.zadd( "hackers" , 1916 , "Claude Shannon");
-
jedis.zadd( "hackers" , 1969 , "Linus Torvalds");
-
jedis.zadd( "hackers" , 1912 , "Alan Turing" );
-
Set<String> setValues = jedis.zrange( "hackers" , 0, - 1 );
-
System.out.println(setValues);
-
Set<String> setValues2 = jedis.zrevrange( "hackers", 0 , - 1 );
-
System.out.println(setValues2);
-
} catch (Exception e) {
-
e.printStackTrace();
-
} finally {
-
RedisUtil.getPool().returnResource(jedis);
-
}
-
-
// 清空數據
-
System.out.println(jedis.flushDB());
-
// 添加數據
-
jedis.zadd( "zset" , 10.1 , "hello" );
-
jedis.zadd( "zset" , 10.0 , ":" );
-
jedis.zadd( "zset" , 9.0 , "zset" );
-
jedis.zadd( "zset" , 11.0 , "zset!" );
-
// 元素個數
-
System.out.println(jedis.zcard( "zset" ));
-
// 元素下標
-
System.out.println(jedis.zscore( "zset" , "zset" ));
-
// 集合子集
-
System.out.println(jedis.zrange( "zset" , 0 , - 1 ));
-
// 刪除元素
-
System.out.println(jedis.zrem( "zset" , "zset!" ));
-
System.out.println(jedis.zcount( "zset" , 9.5 , 10.5 ));
-
// 整個集合值
-
System.out.println(jedis.zrange( "zset" , 0 , - 1 ));
-
}
-
-
public static void testHsh() {
-
System.out.println( "==Hash==" );
-
Jedis jedis = RedisUtil.getJedis();
-
try {
-
Map<String, String> pairs = new HashMap<String, String>();
-
pairs.put( "name" , "Akshi" );
-
pairs.put( "age" , "2" );
-
pairs.put( "sex" , "Female" );
-
jedis.hmset( "kid" , pairs);
-
List<String> name = jedis.hmget( "kid" , "name" );// 結果是個泛型的LIST
-
// jedis.hdel("kid","age"); //刪除map中的某個鍵值
-
System.out.println(jedis.hmget( "kid" , "pwd" )); // 因爲刪除了,所以返回的是null
-
System.out.println(jedis.hlen( "kid" )); // 返回key爲user的鍵中存放的值的個數
-
System.out.println(jedis.exists( "kid" )); // 是否存在key爲user的記錄
-
System.out.println(jedis.hkeys( "kid" )); // 返回map對象中的所有key
-
System.out.println(jedis.hvals( "kid" )); // 返回map對象中的所有value
-
-
Iterator<String> iter = jedis.hkeys( "kid").iterator();
-
while (iter.hasNext()) {
-
String key = iter.next();
-
System.out.println(key + ":" + jedis.hmget("kid" , key));
-
}
-
-
List<String> values = jedis.lrange( "messages" , 0, - 1 );
-
values = jedis.hmget( "kid" , new String[] { "name" , "age" , "sex" });
-
System.out.println(values);
-
Set<String> setValues = jedis.zrange( "hackers" , 0, - 1 );
-
setValues = jedis.hkeys( "kid" );
-
System.out.println(setValues);
-
values = jedis.hvals( "kid" );
-
System.out.println(values);
-
pairs = jedis.hgetAll( "kid" );
-
System.out.println(pairs);
-
} catch (Exception e) {
-
e.printStackTrace();
-
} finally {
-
RedisUtil.getPool().returnResource(jedis);
-
}
-
-
// 清空數據
-
System.out.println(jedis.flushDB());
-
// 添加數據
-
jedis.hset( "hashs" , "entryKey" , "entryValue" );
-
jedis.hset( "hashs" , "entryKey1" , "entryValue1" );
-
jedis.hset( "hashs" , "entryKey2" , "entryValue2" );
-
// 判斷某個值是否存在
-
System.out.println(jedis.hexists( "hashs" , "entryKey" ));
-
// 獲取指定的值
-
System.out.println(jedis.hget( "hashs" , "entryKey" )); // 批量獲取指定的值
-
System.out.println(jedis.hmget( "hashs" , "entryKey" , "entryKey1" ));
-
// 刪除指定的值
-
System.out.println(jedis.hdel( "hashs" , "entryKey" ));
-
// 爲key中的域 field 的值加上增量 increment
-
System.out.println(jedis.hincrBy( "hashs" , "entryKey", 123l));
-
// 獲取所有的keys
-
System.out.println(jedis.hkeys( "hashs" ));
-
// 獲取所有的values
-
System.out.println(jedis.hvals( "hashs" ));
-
}
-
-
public static void testOther() throws InterruptedException {
-
Jedis jedis = RedisUtil.getJedis();
-
-
try {
-
// keys中傳入的可以用通配符
-
System.out.println(jedis.keys( "*" )); // 返回當前庫中所有的key [sose, sanme,
-
// name, jarorwar, foo,
-
// sname, java framework,
-
// user, braand]
-
System.out.println(jedis.keys( "*name" )); // 返回的sname [sname, name]
-
System.out.println(jedis.del( "sanmdde" )); // 刪除key爲sanmdde的對象 刪除成功返回1
-
// 刪除失敗(或者不存在)返回 0
-
System.out.println(jedis.ttl( "sname" )); // 返回給定key的有效時間,如果是-1則表示永遠有效
-
jedis.setex( "timekey" , 10 , "min" ); // 通過此方法,可以指定key的存活(有效時間) 時間爲秒
-
Thread.sleep( 5000 ); // 睡眠5秒後,剩餘時間將爲<=5
-
System.out.println(jedis.ttl( "timekey" )); // 輸出結果爲5
-
jedis.setex( "timekey" , 1 , "min" ); // 設爲1後,下面再看剩餘時間就是1了
-
System.out.println(jedis.ttl( "timekey" )); // 輸出結果爲1
-
System.out.println(jedis.exists( "key" )); // 檢查key是否存在
-
System.out.println(jedis.rename( "timekey" , "time"));
-
System.out.println(jedis.get( "timekey" )); // 因爲移除,返回爲null
-
System.out.println(jedis.get( "time" )); // 因爲將timekey 重命名爲time
-
// 所以可以取得值 min
-
// jedis 排序
-
-
jedis.del( "a" ); // 先清除數據,再加入數據進行測試
-
jedis.rpush( "a" , "1" );
-
jedis.lpush( "a" , "6" );
-
jedis.lpush( "a" , "3" );
-
jedis.lpush( "a" , "9" );
-
System.out.println(jedis.lrange( "a" , 0 , - 1 ));// [9, 3, 6, 1]
-
System.out.println(jedis.sort( "a" )); // [1, 3, 6, 9] //輸入排序後結果
-
System.out.println(jedis.lrange( "a" , 0 , - 1 ));
-
} catch (Exception e) {
-
e.printStackTrace();
-
} finally {
-
RedisUtil.getPool().returnResource(jedis);
-
}
-
-
}
-
-
@org .junit.Test
-
public void testUnUsePipeline() {
-
long start = new Date().getTime();
-
-
Jedis jedis = RedisUtil.getJedis();
-
for ( int i = 0 ; i < 10000 ; i++) {
-
jedis.set( "age1" + i, i + "" );
-
jedis.get( "age1" + i); // 每個操作都發送請求給redis-server
-
}
-
long end = new Date().getTime();
-
-
System.out.println( "unuse pipeline cost:" + (end - start) + "ms" );
-
-
RedisUtil.getPool().returnResource(jedis);
-
}
-
-
@org .junit.Test
-
/**
-
* 參考:http://blog.csdn.net/freebird_lb/article/details/7778919
-
*/
-
public void testUsePipeline() {
-
long start = new Date().getTime();
-
-
Jedis jedis = RedisUtil.getJedis();
-
jedis.flushDB();
-
Pipeline p = jedis.pipelined();
-
for ( int i = 0 ; i < 10000 ; i++) {
-
p.set( "age2" + i, i + "" );
-
System.out.println(p.get( "age2" + i));
-
}
-
p.sync(); // 這段代碼獲取所有的response
-
-
long end = new Date().getTime();
-
-
System.out.println( "use pipeline cost:" + (end - start) + "ms" );
-
-
RedisUtil.getPool().returnResource(jedis);
-
}
-
-
-
@org .junit.Test
-
/**
-
* 時間複雜度:
-
*/
-
public void testSort1() {
-
// 排序默認以數字作爲對象,值被解釋爲雙精度浮點數,然後進行比較
-
Jedis redis = RedisUtil.getJedis();
-
// 一般SORT用法 最簡單的SORT使用方法是SORT key。
-
redis.lpush( "mylist" , "1" );
-
redis.lpush( "mylist" , "4" );
-
redis.lpush( "mylist" , "6" );
-
redis.lpush( "mylist" , "3" );
-
redis.lpush( "mylist" , "0" );
-
// List<String> list = redis.sort("sort");// 默認是升序
-
SortingParams sortingParameters = new SortingParams();
-
sortingParameters.desc();
-
-
// 修飾符(modifier)進行排序。
-
sortingParameters.limit( 0 , 2 ); // 可用於分頁查詢
-
List<String> list = redis.sort( "mylist", sortingParameters); // 默認是升序
-
for ( int i = 0 ; i < list.size(); i++) {
-
System.out.println(list.get(i));
-
}
-
redis.flushDB();
-
RedisUtil.closeJedis(redis);
-
}
-
-
@org .junit.Test
-
/**
-
* sort list
-
* LIST結合hash的排序
-
*/
-
public void testSort2() {
-
Jedis jedis = RedisUtil.getJedis();
-
jedis.del( "user:66" , "user:55" , "user:33" , "user:22", "user:11" ,
-
"userlist" );
-
jedis.lpush( "userlist" , "33" );
-
jedis.lpush( "userlist" , "22" );
-
jedis.lpush( "userlist" , "55" );
-
jedis.lpush( "userlist" , "11" );
-
-
jedis.hset( "user:66" , "name" , "66" );
-
jedis.hset( "user:55" , "name" , "55" );
-
jedis.hset( "user:33" , "name" , "33" );
-
jedis.hset( "user:22" , "name" , "79" );
-
jedis.hset( "user:11" , "name" , "24" );
-
jedis.hset( "user:11" , "add" , "beijing" );
-
jedis.hset( "user:22" , "add" , "shanghai" );
-
jedis.hset( "user:33" , "add" , "guangzhou" );
-
jedis.hset( "user:55" , "add" , "chongqing" );
-
jedis.hset( "user:66" , "add" , "xi'an" );
-
-
SortingParams sortingParameters = new SortingParams();
-
-
sortingParameters.get( "user:*->name" );
-
sortingParameters.get( "user:*->add" );
-
// sortingParameters.by("user:*->name");
-
// sortingParameters.get("#");
-
List<String> result = jedis.sort( "userlist", sortingParameters);
-
for (String item : result) {
-
System.out.println( "item...." + item);
-
}
-
/**
-
* user:*->add
-
*/
-
}
-
-
@org .junit.Test
-
/**
-
* sort set
-
* SET結合String的排序
-
*/
-
public void testSort3() {
-
Jedis jedis = RedisUtil.getJedis();
-
jedis.del( "tom:friend:list" , "score:uid:123" , "score:uid:456" ,
-
"score:uid:789" , "score:uid:101" , "uid:123" , "uid:456" ,
-
"uid:789" , "uid:101" );
-
-
jedis.sadd( "tom:friend:list" , "123" ); // tom的好友列表
-
jedis.sadd( "tom:friend:list" , "456" );
-
jedis.sadd( "tom:friend:list" , "789" );
-
jedis.sadd( "tom:friend:list" , "101" );
-
-
jedis.set( "score:uid:123" , "1000" ); // 好友對應的成績
-
jedis.set( "score:uid:456" , "6000" );
-
jedis.set( "score:uid:789" , "100" );
-
jedis.set( "score:uid:101" , "5999" );
-
-
jedis.set( "uid:123" , "{'uid':123,'name':'lucy'}" ); // 好友的詳細信息
-
jedis.set( "uid:456" , "{'uid':456,'name':'jack'}" );
-
jedis.set( "uid:789" , "{'uid':789,'name':'jay'}" );
-
jedis.set( "uid:101" , "{'uid':101,'name':'jolin'}" );
-
-
SortingParams sortingParameters = new SortingParams();
-
-
sortingParameters.desc();
-
// sortingParameters.limit(0, 2);
-
// 注意GET操作是有序的,GET user_name_* GET user_password_*
-
// 和 GET user_password_* GET user_name_*返回的結果位置不同
-
sortingParameters.get( "#" ); // GET 還有一個特殊的規則—— "GET #"
-
// ,用於獲取被排序對象(我們這裏的例子是 user_id )的當前元素。
-
sortingParameters.get( "uid:*" );
-
sortingParameters.get( "score:uid:*" );
-
sortingParameters.by( "score:uid:*" );
-
-
// uid:* get score:uid:*
-
List<String> result = jedis.sort( "tom:friend:list", sortingParameters);
-
for (String item : result) {
-
System.out.println( "item..." + item);
-
}
-
-
}
-
-
/**
-
*
-
* 12) "a_long_long_password"
-
*/
-
public void testSort4() {
-
-
}
-
-
/**
-
*
-
* user_level_* GET # GET user_name_* GET user_password_* STORE
-
* 操作了,只有當結果集過期時,才需要再調用一次 SORT 操作。
-
* 操作,並保存爲結果集),具體參見 SETNX 命令。
-
*/
-
@Test
-
public void testSort5() {
-
// 排序默認以數字作爲對象,值被解釋爲雙精度浮點數,然後進行比較
-
Jedis jedis = RedisUtil.getJedis();
-
// 一般SORT用法 最簡單的SORT使用方法是SORT key。
-
jedis.lpush( "mylist" , "1" );
-
jedis.lpush( "mylist" , "4" );
-
jedis.lpush( "mylist" , "6" );
-
jedis.lpush( "mylist" , "3" );
-
jedis.lpush( "mylist" , "0" );
-
// List<String> list = redis.sort("sort");// 默認是升序
-
SortingParams sortingParameters = new SortingParams();
-
sortingParameters.desc();
-
-
// 修飾符(modifier)進行排序。
-
// sortingParameters.limit(0, 2);//可用於分頁查詢
-
-
-
-
jedis.sort( "mylist" , sortingParameters, "mylist" ); // 排序後指定排序結果到一個KEY中,這裏講結果覆蓋原來的KEY
-
-
List<String> list = jedis.lrange( "mylist" , 0 , - 1 );
-
for ( int i = 0 ; i < list.size(); i++) {
-
System.out.println(list.get(i));
-
}
-
-
jedis.sadd( "tom:friend:list" , "123" ); // tom的好友列表
-
jedis.sadd( "tom:friend:list" , "456" );
-
jedis.sadd( "tom:friend:list" , "789" );
-
jedis.sadd( "tom:friend:list" , "101" );
-
-
jedis.set( "score:uid:123" , "1000" ); // 好友對應的成績
-
jedis.set( "score:uid:456" , "6000" );
-
jedis.set( "score:uid:789" , "100" );
-
jedis.set( "score:uid:101" , "5999" );
-
-
jedis.set( "uid:123" , "{'uid':123,'name':'lucy'}" ); // 好友的詳細信息
-
jedis.set( "uid:456" , "{'uid':456,'name':'jack'}" );
-
jedis.set( "uid:789" , "{'uid':789,'name':'jay'}" );
-
jedis.set( "uid:101" , "{'uid':101,'name':'jolin'}" );
-
-
sortingParameters = new SortingParams();
-
// sortingParameters.desc();
-
sortingParameters.get( "#" ); // GET 還有一個特殊的規則—— "GET #"
-
// ,用於獲取被排序對象(我們這裏的例子是 user_id )的當前元素。
-
sortingParameters.by( "score:uid:*" );
-
jedis.sort( "tom:friend:list" , sortingParameters, "tom:friend:list" );
-
List<String> result = jedis.lrange( "tom:friend:list" , 0, - 1 );
-
for (String item : result) {
-
System.out.println( "item..." + item);
-
}
-
-
jedis.flushDB();
-
RedisUtil.closeJedis(jedis);
-
}
-
-
-
public void testMore(){
-
//ZRANGE取出最新的10個項目。
-
//使用LPUSH + LTRIM,確保只取出最新的1000條項目。
-
-
-
-
-
// zrank test a 相反,表示正排序時候的名次
-
// zscore test one表示one這個元素在sorted set中的score爲多少
-
-
-
//zrem test one刪除sorted set中某個元素
-
}
-
-
public List<String> get_latest_comments( int start, int num_items){
-
//獲取最新評論
-
//LPUSH latest.comments <ID>
-
//-我們將列表裁剪爲指定長度,因此Redis只需要保存最新的5000條評論:
-
//LTRIM latest.comments 0 5000
-
-
Jedis jedis = RedisUtil.getJedis();
-
List<String> id_list = jedis.lrange( "latest.comments",start,start+num_items- 1 ) ;
-
-
if (id_list.size()<num_items){
-
//id_list = SQL.EXECUTE("SELECT ... ORDER BY time LIMIT ...");
-
}
-
return id_list;
-
}
-
-
-
-
@Test
-
public void testDB() {
-
Jedis jedis = RedisUtil.getJedis();
-
System.out.println(jedis.select( 0 )); // select db-index
-
-
System.out.println(jedis.dbSize()); // dbsize 返回當前數據庫的key數量
-
System.out.println(jedis.keys( "*" )); // 返回匹配指定模式的所有key
-
System.out.println(jedis.randomKey());
-
jedis.flushDB(); // 刪除當前數據庫中所有key,此方法不會失敗。慎用
-
jedis.flushAll(); // 刪除所有數據庫中的所有key,此方法不會失敗。更加慎用
-
-
}
-
-
@Test
-
public void testMget() {
-
-
Jedis jedis = RedisUtil.getJedis();
-
jedis.flushDB(); // 刪除當前數據庫中所有key,此方法不會失敗。慎用
-
-
jedis.rpush( "ids" , "aa" );
-
jedis.rpush( "ids" , "bb" );
-
jedis.rpush( "ids" , "cc" );
-
-
List<String> ids = jedis.lrange( "ids" , 0 , - 1 );
-
-
jedis.set( "aa" , "{'name':'zhoujie','age':20}" );
-
jedis.set( "bb" , "{'name':'yilin','age':28}" );
-
jedis.set( "cc" , "{'name':'lucy','age':21}" );
-
List<String> list = jedis.mget(ids.toArray( new String[ids.size()]));
-
System.out.println(list);
-
}
-
-
/**
-
* 可以利用lrange對list進行分頁操作
-
*/
-
@Test
-
public void queryPageBy() {
-
int pageNo = 6 ;
-
int pageSize = 6 ;
-
Jedis jedis = RedisUtil.getJedis();
-
jedis.del( "a" );
-
for ( int i = 1 ; i <= 30 ; i++) {
-
jedis.rpush( "a" , i + "" );
-
}
-
-
int start = pageSize * (pageNo - 1 ); // 因爲redis中list元素位置基數是0
-
int end = start + pageSize - 1 ;
-
-
List<String> results = jedis.lrange( "a" , start, end);// 從start算起,start算一個元素,到結束那個元素
-
for (String str : results) {
-
System.out.println(str);
-
}
-
-
}
-
-
@Test
-
/**
-
* [向Redis list壓入ID而不是實際的數據]
-
$ redis-cli incr next.news.id
-
(integer) 1
-
$ redis-cli set news:1:title "Redis is simple"
-
OK
-
$ redis-cli set news:1:url "http://code.google.com/p/redis"
-
OK
-
$ redis-cli lpush submitted.news 1
-
OK
-
*/
-
public void testListStrUsage() {
-
String title = "太陽能是綠色能源4" ;
-
String url = "http://javacreazyer.iteye.com" ;
-
Jedis jedis = RedisUtil.getJedis();
-
-
long adInfoId = jedis.incr( "ad:adinfo:next.id" );
-
jedis.set( "ad:adinfo:" + adInfoId + ":title", title);
-
jedis.set( "ad:adinfo:" + adInfoId + ":url" , url);
-
jedis.lpush( "ad:adinfo" , String.valueOf(adInfoId));
-
-
String resultTitle = jedis.get( "ad:adinfo:" + adInfoId + ":title" );
-
String resultUrl = jedis.get( "ad:adinfo:" + adInfoId + ":url" );
-
List<String> ids = jedis.lrange( "ad:adinfo" , 0 , - 1);
-
System.out.println(resultTitle);
-
System.out.println(resultUrl);
-
System.out.println(ids);
-
-
/**
-
*/
-
System.out.println(jedis.dbSize());
-
-
jedis.flushAll();
-
}
-
-
/**
-
* (integer) 1 $ redis-cli sadd tag:77:objects 1000 (integer) 1
-
* in our dataset composed of just one object ...
-
*/
-
@Test
-
public void testSetUsage() {
-
Jedis jedis = RedisUtil.getJedis();
-
jedis.sadd( "zhongsou:news:1000:tags" , "1" );
-
jedis.sadd( "zhongsou:news:1000:tags" , "2" );
-
jedis.sadd( "zhongsou:news:1000:tags" , "5" );
-
jedis.sadd( "zhongsou:news:1000:tags" , "77" );
-
jedis.sadd( "zhongsou:news:2000:tags" , "1" );
-
jedis.sadd( "zhongsou:news:2000:tags" , "2" );
-
jedis.sadd( "zhongsou:news:2000:tags" , "5" );
-
jedis.sadd( "zhongsou:news:2000:tags" , "77" );
-
jedis.sadd( "zhongsou:news:3000:tags" , "2" );
-
jedis.sadd( "zhongsou:news:4000:tags" , "77" );
-
jedis.sadd( "zhongsou:news:5000:tags" , "1" );
-
jedis.sadd( "zhongsou:news:6000:tags" , "5" );
-
-
jedis.sadd( "zhongsou:tag:1:objects" , 1000 + "" );
-
jedis.sadd( "zhongsou:tag:2:objects" , 1000 + "" );
-
jedis.sadd( "zhongsou:tag:5:objects" , 1000 + "" );
-
jedis.sadd( "zhongsou:tag:77:objects" , 1000 + "" );
-
-
jedis.sadd( "zhongsou:tag:1:objects" , 2000 + "" );
-
jedis.sadd( "zhongsou:tag:2:objects" , 2000 + "" );
-
jedis.sadd( "zhongsou:tag:5:objects" , 2000 + "" );
-
jedis.sadd( "zhongsou:tag:77:objects" , 2000 + "" );
-
-
Set<String> sets = jedis.sinter( "zhongsou:tag:1:objects",
-
"zhongsou:tag:2:objects" , "zhongsou:tag:5:objects" ,
-
"zhongsou:tag:77:objects" );
-
System.out.println(sets);
-
jedis.flushAll();
-
}
-
-
@Test
-
public void testSortedSetUsage() {
-
Jedis jedis = RedisUtil.getJedis();
-
jedis.zadd( "zhongsou:hackers" , 1940 , "Alan Kay" );
-
jedis.zadd( "zhongsou:hackers" , 1953 , "Richard Stallman");
-
jedis.zadd( "zhongsou:hackers" , 1943 , "Jay" );
-
jedis.zadd( "zhongsou:hackers" , 1920 , "Jellon" );
-
jedis.zadd( "zhongsou:hackers" , 1965 , "Yukihiro Matsumoto");
-
jedis.zadd( "zhongsou:hackers" , 1916 , "Claude Shannon");
-
jedis.zadd( "zhongsou:hackers" , 1969 , "Linus Torvalds");
-
jedis.zadd( "zhongsou:hackers" , 1912 , "Alan Turing" );
-
-
Set<String> hackers = jedis.zrange( "zhongsou:hackers" , 0, - 1 );
-
System.out.println(hackers);
-
-
Set<String> hackers2 = jedis.zrevrange( "zhongsou:hackers" , 0 , - 1 );
-
System.out.println(hackers2);
-
-
-
Set<String> hackers3 = jedis.zrangeByScore( "zhongsou:hackers", "-inf" ,
-
"1920" );
-
System.out.println(hackers3);
-
-
-
long num = jedis.zremrangeByScore( "zhongsou:hackers" , "-inf" , "1920" );
-
System.out.println(num);
-
-
jedis.flushAll();
-
}
-
-
}
Java代碼
-
/**
-
* 獲取連接池.
-
* @return 連接池實例
-
*/
-
private static JedisPool getPool(String ip, int port) {
-
JedisPoolConfig config = new JedisPoolConfig();
-
config.setMaxActive(RedisConfig.getMaxactive());
-
config.setMaxIdle(RedisConfig.getMaxidle());
-
config.setMaxWait(RedisConfig.getMaxwait());
-
config.setTestOnBorrow( true );
-
config.setTestOnReturn( true );
-
try {
-
/**
-
*/
-
pool = new JedisPool(config, ip, port,RedisConfig.getTimeout());
-
} catch (Exception e) {
-
e.printStackTrace();
-
}
-
return pool;
-
}
附加一個工作中常用到的Jedis工具類,如下:
Java代碼
-
package com.zhongsou.vertportal.util;
-
-
import java.util.HashMap;
-
import java.util.Map;
-
-
import org.slf4j.Logger;
-
import org.slf4j.LoggerFactory;
-
-
import redis.clients.jedis.Jedis;
-
import redis.clients.jedis.JedisPool;
-
import redis.clients.jedis.JedisPoolConfig;
-
-
import com.zhongsou.vertportal.conf.BaseConfig;
-
import com.zhongsou.vertportal.conf.RedisConfig;
-
-
/**
-
* Redis工具類,用於獲取RedisPool.
-
* 參考官網說明如下:
-
* To use it, init a pool:
-
* You can store the pool somewhere statically, it is thread-safe.
-
* @author wujintao
-
*/
-
public class JedisUtil {
-
protected Logger log = LoggerFactory.getLogger(getClass());
-
-
/**
-
* 私有構造器.
-
*/
-
private JedisUtil() {
-
-
}
-
private static Map<String,JedisPool> maps = new HashMap<String,JedisPool>();
-
-
-
/**
-
* 獲取連接池.
-
* @return 連接池實例
-
*/
-
private static JedisPool getPool(String ip, int port) {
-
String key = ip+ ":" +port;
-
JedisPool pool = null ;
-
if (!maps.containsKey(key)) {
-
JedisPoolConfig config = new JedisPoolConfig();
-
config.setMaxActive(RedisConfig.getMaxactive());
-
config.setMaxIdle(RedisConfig.getMaxidle());
-
config.setMaxWait(RedisConfig.getMaxwait());
-
config.setTestOnBorrow( true );
-
config.setTestOnReturn( true );
-
try {
-
/**
-
*/
-
pool = new JedisPool(config, ip, port,RedisConfig.getTimeout());
-
maps.put(key, pool);
-
} catch (Exception e) {
-
e.printStackTrace();
-
}
-
} else {
-
pool = maps.get(key);
-
}
-
return pool;
-
}
-
-
/**
-
*沒有綁定關係,而且只有被調用到時纔會裝載,從而實現了延遲加載。
-
*/
-
private static class RedisUtilHolder{
-
/**
-
* 靜態初始化器,由JVM來保證線程安全
-
*/
-
private static JedisUtil instance = new JedisUtil();
-
}
-
-
/**
-
*當getInstance方法第一次被調用的時候,它第一次讀取
-
*/
-
public static JedisUtil getInstance() {
-
return RedisUtilHolder.instance;
-
}
-
-
/**
-
* 獲取Redis實例.
-
* @return Redis工具類實例
-
*/
-
public Jedis getJedis(String ip, int port) {
-
Jedis jedis = null ;
-
int count = 0 ;
-
do {
-
try {
-
jedis = getPool(ip,port).getResource();
-
//log.info("get redis master1!");
-
} catch (Exception e) {
-
log.error( "get redis master1 failed!", e);
-
// 銷燬對象
-
getPool(ip,port).returnBrokenResource(jedis);
-
}
-
count++;
-
} while (jedis== null &&count<BaseConfig.getRetryNum());
-
return jedis;
-
}
-
-
/**
-
* 釋放redis實例到連接池.
-
* @param jedis redis實例
-
*/
-
public void closeJedis(Jedis jedis,String ip, int port) {
-
if (jedis != null ) {
-
getPool(ip,port).returnResource(jedis);
-
}
-
}
-
}
開發參考資料:
redis官方文檔:http://redis.io/documentation
redis命令參考中文版:http://redis.readthedocs.org/en/2.4/index.html