redis中各種數據類型對應的jedis操作命令

一、常用數據類型簡介:

      redis常用五種數據類型:string,hash,list,set,zset(sorted set).

1.String類型

String是最簡單的類型,一個key對應一個value

String類型的數據最大1G。
String類型的值可以被視作integer,從而可以讓“INCR”命令族操作(incrby、decr、decrby),這種情況下,該integer的值限制在64位有符號數。

在list、set和zset中包含的獨立的元素類型都是Redis String類型。

2.List類型

鏈表類型,主要功能是push、pop、獲取一個範圍的所有值等。其中的key可以理解爲鏈表的名字。

Redis中,list就是Redis String的列表,按照插入順序排序。比如使用LPUSH命令在list頭插入一個元素,使用RPUSH命令在list的尾插入一個元素。當這兩個命令之一作用於一個空的key時,一個新的list就創建出來了。

List的最大長度是2^32-1個元素。(2^32 = 4 294 967 296) 42億啊

3.Set類型

集合,和數學中的集合概念相似。操作中的key理解爲集合的名字。

Redis中,set就是Redis String的無序集合,不允許有重複元素。

Set的最大元素數是2^32-1。2^32 = 4 294 967 296) 42億啊

Redis中對set的操作還有交集、並集、差集等。

4.ZSet(Sorted Set)類型

Zset是set的一個升級版本,在set的基礎上增加了一個順序屬性,這一屬性在添加修改元素時可以指定,每次指定後zset會自動安裝指定值重新調整順序。可以理解爲一張表,一列存value,一列存順序。操作中的key理解爲zset的名字。

Zset的最大元素數是2^32-1。2^32 = 4 294 967 296) 42億啊

對於已經有序的zset,仍然可以使用SORT命令,通過指定ASC|DESC參數對其進行排序。

5.hash類型

hash是最接近關係數據庫結構的數據類型,可以將數據庫一條記錄或程序中一個對象轉換成hashmap存放在redis中。

二、jedis操作命令:

1.對value操作的命令

     exists(key):確認一個key是否存在

     del(key):刪除一個key

     type(key):返回值的類型

     keys(pattern):返回滿足給定pattern的所有key

     randomkey:隨機返回key空間的一個key

     rename(oldname, newname):將key由oldname重命名爲newname,若newname存在則刪除newname表示的key

     dbsize:返回當前數據庫中key的數目

     expire:設定一個key的活動時間(s)

     ttl:獲得一個key的活動時間

     select(index):按索引查詢

     move(key, dbindex):將當前數據庫中的key轉移到有dbindex索引的數據庫

     flushdb:刪除當前選擇數據庫中的所有key

     flushall:刪除所有數據庫中的所有key

2.對String操作的命令

     set(key, value):給數據庫中名稱爲key的string賦予值value

     get(key):返回數據庫中名稱爲key的string的value

     getset(key, value):給名稱爲key的string賦予上一次的value

     mget(key1, key2,…, key N):返回庫中多個string(它們的名稱爲key1,key2…)的value

     setnx(key, value):如果不存在名稱爲key的string,則向庫中添加string,名稱爲key,值爲value

     setex(key, time, value):向庫中添加string(名稱爲key,值爲value)同時,設定過期時間time

     mset(key1, value1, key2, value2,…key N, value N):同時給多個string賦值,名稱爲key i的string賦值value i

     msetnx(key1, value1, key2, value2,…key N, value N):如果所有名稱爲key i的string都不存在,則向庫中添加string,名稱           key i賦值爲value i

     incr(key):名稱爲key的string增1操作

     incrby(key, integer):名稱爲key的string增加integer

     decr(key):名稱爲key的string減1操作

     decrby(key, integer):名稱爲key的string減少integer

     append(key, value):名稱爲key的string的值附加value

     substr(key, start, end):返回名稱爲key的string的value的子串

3.對List操作的命令

     rpush(key, value):在名稱爲key的list尾添加一個值爲value的元素

     lpush(key, value):在名稱爲key的list頭添加一個值爲value的 元素

     llen(key):返回名稱爲key的list的長度

     lrange(key, start, end):返回名稱爲key的list中start至end之間的元素(下標從0開始,下同)

     ltrim(key, start, end):截取名稱爲key的list,保留start至end之間的元素

     lindex(key, index):返回名稱爲key的list中index位置的元素

     lset(key, index, value):給名稱爲key的list中index位置的元素賦值爲value

     lrem(key, count, value):刪除count個名稱爲key的list中值爲value的元素。count爲0,刪除所有值爲value的元素,count>0      從頭至尾刪除count個值爲value的元素,count<0從尾到頭刪除|count|個值爲value的元素。

     lpop(key):返回並刪除名稱爲key的list中的首元素

     rpop(key):返回並刪除名稱爲key的list中的尾元素

     blpop(key1, key2,… key N, timeout):lpop 命令的block版本。即當timeout爲0時,若遇到名稱爲key i的list不存在或該list爲空,則命令結束。如果 timeout>0,則遇到上述情況時,等待timeout秒,如果問題沒有解決,則對key i+1開始的list執行pop操作。

     brpop(key1, key2,… key N, timeout):rpop的block版本。參考上一命令。

     rpoplpush(srckey, dstkey):返回並刪除名稱爲srckey的list的尾元素,並將該元素添加到名稱爲dstkey的list的頭部

4.對Set操作的命令

     sadd(key, member):向名稱爲key的set中添加元素member

     srem(key, member) :刪除名稱爲key的set中的元素member

     spop(key) :隨機返回並刪除名稱爲key的set中一個元素

     smove(srckey, dstkey, member) :將member元素從名稱爲srckey的集合移到名稱爲dstkey的集合

     scard(key) :返回名稱爲key的set的基數

     sismember(key, member) :測試member是否是名稱爲key的set的元素

     sinter(key1, key2,…key N) :求交集

     sinterstore(dstkey, key1, key2,…key N) :求交集並將交集保存到dstkey的集合

     sunion(key1, key2,…key N) :求並集

     sunionstore(dstkey, key1, key2,…key N) :求並集並將並集保存到dstkey的集合

     sdiff(key1, key2,…key N) :求差集

     sdiffstore(dstkey, key1, key2,…key N) :求差集並將差集保存到dstkey的集合

     smembers(key) :返回名稱爲key的set的所有元素

     srandmember(key) :隨機返回名稱爲key的set的一個元素

5.對zset(sorted set)操作的命令

     zadd(key, score, member):向名稱爲key的zset中添加元素member,score用於排序。如果該元素已經存在,則根據score更新該元素的順序。

     zrem(key, member) :刪除名稱爲key的zset中的元素member

     zincrby(key, increment, member) :如果在名稱爲key的zset中已經存在元素member,則該元素的score增加increment;否則向集合中添加該元素,其score的值爲increment

     zrank(key, member) :返回名稱爲key的zset(元素已按score從小到大排序)中member元素的rank(即index,從0開始),若沒有member元素,返回“nil”

     zrevrank(key, member) :返回名稱爲key的zset(元素已按score從大到小排序)中member元素的rank(即index,從0開始),若沒有member元素,返回“nil”

     zrange(key, start, end):返回名稱爲key的zset(元素已按score從小到大排序)中的index從start到end的所有元素

     zrevrange(key, start, end):返回名稱爲key的zset(元素已按score從大到小排序)中的index從start到end的所有元素

     zrangebyscore(key, min, max):返回名稱爲key的zset中score >= min且score <= max的所有元素

     zcard(key):返回名稱爲key的zset的基數

     zscore(key, element):返回名稱爲key的zset中元素element的score

     zremrangebyrank(key, min, max):刪除名稱爲key的zset中rank >= min且rank <= max的所有元素

     zremrangebyscore(key, min, max) :刪除名稱爲key的zset中score >= min且score <= max的所有元素

     zunionstore / zinterstore(dstkeyN, key1,…,keyN, WEIGHTS w1,…wN, AGGREGATE SUM|MIN|MAX):對N個zset求並集和交集,並將最後的集合保存在dstkeyN中。對於集合中每一個元素的score,在進行AGGREGATE運算前,都要乘以對於的WEIGHT參數。如果沒有提供WEIGHT,默認爲1。默認的AGGREGATE是SUM,即結果集合中元素的score是所有集合對應元素進行 SUM運算的值,而MIN和MAX是指,結果集合中元素的score是所有集合對應元素中最小值和最大值。

6.對Hash操作的命令

     hset(key, field, value):向名稱爲key的hash中添加元素field<—>value

     hget(key, field):返回名稱爲key的hash中field對應的value

     hmget(key, field1, …,field N):返回名稱爲key的hash中field i對應的value

     hmset(key, field1, value1,…,field N, value N):向名稱爲key的hash中添加元素field i<—>value i

     hincrby(key, field, integer):將名稱爲key的hash中field的value增加integer

     hexists(key, field):名稱爲key的hash中是否存在鍵爲field的域

     hdel(key, field):刪除名稱爲key的hash中鍵爲field的域

     hlen(key):返回名稱爲key的hash中元素個數

     hkeys(key):返回名稱爲key的hash中所有鍵

     hvals(key):返回名稱爲key的hash中所有鍵對應的value

     hgetall(key):返回名稱爲key的hash中所有的鍵(field)及其對應的value

三、各種數據類型所對應的應用場景

1.String類型的應用場景

   String是最常用的一種數據類型,普通的key/value存儲.

2.list類型的應用場景

   比較適用於列表式存儲且順序相對比較固定,例如:

省份、城市列表

品牌、廠商、車系、車型等列表

拆車坊專題列表...

3.set類型的應用場景

   Set對外提供的功能與list類似,當需要存儲一個列表數據,又不希望出現重複數據時,可選用set

4.zset(sorted set)類型的應用場景

zset的使用場景與set類似,區別是set不是自動有序的,而zset可以通過用戶額外提供一個優先級(score)的參數來爲成員排序,並且是插入有序的,即自動排序.當你需要一個有序的並且不重複的集合列表,那麼可以選擇zset數據結構。例如:

根據PV排序的熱門車系車型列表

根據時間排序的新聞列表

5.hash類型的應用場景

類似於表記錄的存儲

頁面視圖所需數據的存儲

四、具體使用參考示例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
private void testKey() {
      System.out.println("=============key==========================");
      // 清空數據
      System.out.println(jedis.flushDB());
      System.out.println(jedis.echo("foo"));
      // 判斷key否存在
      System.out.println(shardedJedis.exists("foo"));
      shardedJedis.set("key""values");
      System.out.println(shardedJedis.exists("key"));
  }
  
  private void testString() {
      System.out.println("=============String==========================");
      // 清空數據
      System.out.println(jedis.flushDB());
      // 存儲數據
      shardedJedis.set("foo""bar");
      System.out.println(shardedJedis.get("foo"));
      // 若key不存在,則存儲
      shardedJedis.setnx("foo""foo not exits");
      System.out.println(shardedJedis.get("foo"));
      // 覆蓋數據
      shardedJedis.set("foo""foo update");
      System.out.println(shardedJedis.get("foo"));
      // 追加數據
      shardedJedis.append("foo"" hello, world");
      System.out.println(shardedJedis.get("foo"));
      // 設置key的有效期,並存儲數據
      shardedJedis.setex("foo"2"foo not exits");
      System.out.println(shardedJedis.get("foo"));
      try {
          Thread.sleep(3000);
      catch (InterruptedException e) {
      }
      System.out.println(shardedJedis.get("foo"));
      // 獲取並更改數據
      shardedJedis.set("foo""foo update");
      System.out.println(shardedJedis.getSet("foo""foo modify"));
      // 截取value的值
      System.out.println(shardedJedis.getrange("foo"13));
      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" }));
  }
  
  private void testList() {
      System.out.println("=============list==========================");
      // 清空數據
      System.out.println(jedis.flushDB());
      // 添加數據
      shardedJedis.lpush("lists""vector");
      shardedJedis.lpush("lists""ArrayList");
      shardedJedis.lpush("lists""LinkedList");
      // 數組長度
      System.out.println(shardedJedis.llen("lists"));
      // 排序
      System.out.println(shardedJedis.sort("lists"));
      // 字串
      System.out.println(shardedJedis.lrange("lists"03));
      // 修改列表中單個值
      shardedJedis.lset("lists"0"hello list!");
      // 獲取列表指定下標的值
      System.out.println(shardedJedis.lindex("lists"1));
      // 刪除列表指定下標的值
      System.out.println(shardedJedis.lrem("lists"1"vector"));
      // 刪除區間以外的數據
      System.out.println(shardedJedis.ltrim("lists"01));
      // 列表出棧
      System.out.println(shardedJedis.lpop("lists"));
      // 整個列表值
      System.out.println(shardedJedis.lrange("lists"0, -1));
  
  }
  
  private void testSet() {
      System.out.println("=============set==========================");
      // 清空數據
      System.out.println(jedis.flushDB());
      // 添加數據
      shardedJedis.sadd("sets""HashSet");
      shardedJedis.sadd("sets""SortedSet");
      shardedJedis.sadd("sets""TreeSet");
      // 判斷value是否在列表中
      System.out.println(shardedJedis.sismember("sets""TreeSet"));
      ;
      // 整個列表值
      System.out.println(shardedJedis.smembers("sets"));
      // 刪除指定元素
      System.out.println(shardedJedis.srem("sets""SortedSet"));
      // 出棧
      System.out.println(shardedJedis.spop("sets"));
      System.out.println(shardedJedis.smembers("sets"));
      //
      shardedJedis.sadd("sets1""HashSet1");
      shardedJedis.sadd("sets1""SortedSet1");
      shardedJedis.sadd("sets1""TreeSet");
      shardedJedis.sadd("sets2""HashSet2");
      shardedJedis.sadd("sets2""SortedSet1");
      shardedJedis.sadd("sets2""TreeSet1");
      // 交集
      System.out.println(jedis.sinter("sets1""sets2"));
      // 並集
      System.out.println(jedis.sunion("sets1""sets2"));
      // 差集
      System.out.println(jedis.sdiff("sets1""sets2"));
  }
  
  private void testSortedSet() {
      System.out.println("=============zset==========================");
      // 清空數據
      System.out.println(jedis.flushDB());
      // 添加數據
      shardedJedis.zadd("zset"10.1"hello");
      shardedJedis.zadd("zset"10.0":");
      shardedJedis.zadd("zset"9.0"zset");
      shardedJedis.zadd("zset"11.0"zset!");
      // 元素個數
      System.out.println(shardedJedis.zcard("zset"));
      // 元素下標
      System.out.println(shardedJedis.zscore("zset""zset"));
      // 集合子集
      System.out.println(shardedJedis.zrange("zset"0, -1));
      // 刪除元素
      System.out.println(shardedJedis.zrem("zset""zset!"));
      System.out.println(shardedJedis.zcount("zset"9.510.5));
      // 整個集合值
      System.out.println(shardedJedis.zrange("zset"0, -1));
  }
  
  private void testHash() {
      System.out.println("=============hash==========================");
      // 清空數據
      System.out.println(jedis.flushDB());
      // 添加數據
      shardedJedis.hset("hashs""entryKey""entryValue");
      shardedJedis.hset("hashs""entryKey1""entryValue1");
      shardedJedis.hset("hashs""entryKey2""entryValue2");
      // 判斷某個值是否存在
      System.out.println(shardedJedis.hexists("hashs""entryKey"));
      // 獲取指定的值
      System.out.println(shardedJedis.hget("hashs""entryKey"));        // 批量獲取指定的值
      System.out.println(shardedJedis.hmget("hashs""entryKey""entryKey1"));
      // 刪除指定的值
      System.out.println(shardedJedis.hdel("hashs""entryKey"));
      // 爲key中的域 field 的值加上增量 increment
      System.out.println(shardedJedis.hincrBy("hashs""entryKey", 123l));
      // 獲取所有的keys
      System.out.println(shardedJedis.hkeys("hashs"));
      // 獲取所有的values
      System.out.println(shardedJedis.hvals("hashs"));
  }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章