Redis(REmote DIctionary Server) 是一個遵照BSD協議、支持網絡、可基於內存亦可持久化的日誌型key-value存儲系統。redis
KEY數據庫
經常使用指令:安全
指令
|
註釋
|
備註
|
exits key
|
檢測指定 key 是否存在
|
1 : 存在,0 : 不存在
|
del key1 key2......keyN
|
刪除給定 key
|
返回刪除 key 的數目,0 表示給定 key 都不存在
|
type key
|
返回給定 key 值的類型
|
none : key 不在 string : 字符類型
list : 鏈表類型 set : 無序集合類型
|
keys pattern
|
返回匹配指定模式的全部 key
|
|
randomkey
|
隨機返回一個 key
|
若是當前數據庫是空的,返回空串
|
rename oldkey newkey
|
重命名一個 key
|
若是 newkey 已存在,將會被覆蓋newkey的值.
|
expire key seconds
|
設置key 的過時時間,單位是秒。
|
返回 1 : 成功,0 :key 不存在
|
ttl key
|
返回key的剩餘過時秒數
|
-1 : key未設置過時時間, -2:key不存在
|
persist key
|
清除key的過時時間
|
1 : 成功 0:key不存在或者沒有設置過時時間
|
VALUE網絡
Redis 提供五種數據類型:String,Hash,List,Set 及 ZSet。app
String 是最基本的類型,並且 String 類型是二進制安全的,意思是 Redis 的 String 能夠 包含任何數據。dom
經常使用指令:spa
指令
|
註釋
|
例子
|
set key value
|
存數據
|
set username 'winn'
|
get key
|
取數據
|
get username
|
mset key1 value1... keyn valuen
|
一次存多個鍵值對
|
mset uname 'winn' pwd '123'
|
mget key1 ... keyn
|
一次取多個值
|
mget uname pwd
|
Java使用:日誌
Hash 是一個 String 類型的 field 和 value 的映射表,最大能夠包含(2^32 -1)個鍵值對。增刪操做的時間複雜度爲 O(1)。code
#配置字段最多 64 個 hash-max-zipmap-entries 64 #配置 value 最大爲 512 字節 hash-max-zipmap-value 512
經常使用指令:對象
指令
|
註釋
|
例子
|
hmset key field1 value1 ... fieldn valuen
|
存數據
|
hmset user name 'winn' sex 'man'
|
hget key
|
取數據
|
hget user name
|
hgetall key
|
獲取對象
|
|
HKEYS key
|
奪取對象中的全部filed
|
|
HVALS key
|
奪取對象中的全部value
|
|
@Test public void testHash(){
Jedis jedis = new Jedis("localhost"); Map<String, String> map = new HashMap<>(); map.put("name", "xinxin"); map.put("age", "22"); map.put("qq", "123456"); jedis.hmset("user",map); List<String> rsmap = jedis.hmget("user", "name", "age", "qq"); System.out.println(rsmap); //刪除map中的某個鍵值 jedis.hdel("user","age"); System.out.println(jedis.hmget("user", "age")); //null //hlen 返回key中的field-value個數 System.out.println(jedis.hlen("user")); //2 //exists 判斷key是否存在 System.out.println(jedis.exists("user"));//true //hkeys 返回全部的field System.out.println(jedis.hkeys("user"));//[name, qq] //hvals 返回全部的value System.out.println(jedis.hvals("user"));//[xinxin, 123456] Iterator<String> iter=jedis.hkeys("user").iterator(); while (iter.hasNext()){ String key = iter.next(); System.out.println(key+":"+jedis.hmget("user",key)); } }
List 是一個鏈表結構,能夠理解爲一個每一個子元素都是 String 類型的雙向鏈表。主要功能是 push、pop、獲取一個範圍內的全部值等。
經常使用指令:
指令
|
註釋
|
例子
|
lpush listName value
|
將value存入list的表頭
|
lpush listData demo
|
rpush listName value
|
將value存入list的表尾
|
rpush listData demo
|
lrange listName startIndex endIndex
|
返回下標在[startIndex, endIndex]中的值
|
lrange listData 0 10
|
Java使用:
指令
|
註釋
|
例子
|
sadd key member
|
將value存入set
|
sadd setData set demo
|
smembers key
|
返回key中的數據 |
sembers setData
|
sismbers key
|
判斷key是否存在 | sismembers setData |
SDIFF key1 [key2]
|
返回給定全部集合的差集
|
|
SINTER key1 [key2]
|
返回給定全部集合的交集
|
|
SUNION key1 [key2]
|
返回全部給定集合的並集
|
|
Java使用:
@Test public void testSet(){
Jedis jedis = new Jedis("localhost"); //添加 jedis.sadd("user","liuling"); jedis.sadd("user","xinxin"); jedis.sadd("user","ling"); jedis.sadd("user","zhangxinxin"); jedis.sadd("user","who"); //srem : 移除value jedis.srem("user","who"); System.out.println(jedis.smembers("user"));//獲取全部加入的value System.out.println(jedis.sismember("user", "who"));//判斷 who 是不是user集合的元素 System.out.println(jedis.srandmember("user"));//隨機返回一個value System.out.println(jedis.scard("user"));//返回集合的元素個數
jedis.sadd("customer","ling");
jedis.sadd("customer","xinxin");
jedis.sadd("customer","winn");
jedis.sadd("customer","nicole");
jedis.sadd("customer","sam");
//並集
System.out.println(jedis.sunion("user","customer"));
//差集 : 返回user中customer不包含的value
System.out.println(jedis.sdiff("user","customer"));
//交集
System.out.println(jedis.sinter("user","customer"));
}
Sorted Set 是有序集合,且不容許重複的成員。它在 Set 的基礎上增長了一個順序屬性(score),這一屬性在添加修改元素的時候能夠指定,每次指定後,會自動從新按新的值調整順序。
經常使用指令:
指令
|
註釋
|
例子
|
zadd key score member
|
存數據
|
zset zsetData 0 demo
|
zrange key startScore endScore [WITHSCORES]
|
取score在[startScore, endScore]之間的數據
|
zrange zsetData 0 10
|
Java使用:
@Test
public void testZSet(){
Jedis jedis = new Jedis("localhost");
jedis.zadd("user",1,"winn");
jedis.zadd("user",2,"sam");
jedis.zadd("user",5,"nicole");
jedis.zadd("user",4,"roy");
Set<String> user = jedis.zrange("user", 0, -1);
System.out.println(user);
}
補充
指令
|
註釋
|
備註
|
keys name
|
獲取指定key
|
keys * 獲取全部key
|
flushdb
|
清除當前數據庫的全部數據
|
|
flushall
|
清除全部數據庫的全部數據
|
|
besize
|
返回數據庫中key的數量
|
|
config set field value | 設置系統參數 | config set maxmemory 100mb |
config get field | 查看系統參數 | config get maxmemory |
/** * 使用事務 * Redis事務能夠理解爲一個打包的批量執行腳本,中間某條指令的失敗不會致使前面已作指令的回滾,也不會形成後續的指令不作。 * */ @Test public void testTrans() { //開啓事務 Transaction tx = jedis.multi(); for (int i = 0; i < 1000; i++) { tx.set("t" + i, "t" + i); } //執行事務 tx.exec(); System.out.println(jedis.get("t100")); }