1. 程式人生 > >Redis基礎與資料結構常用命令

Redis基礎與資料結構常用命令

Redis庫的操作

  • set key value

插入鍵值對

127.0.0.1:6379[2]> set name ls
OK
  • get key

返回指定key的value

127.0.0.1:6379[2]> get name
"ls"
  • select index

redis中的資料庫總共有16個,下標為0-15,index表示下標

127.0.0.1:6379> select 2
OK
127.0.0.1:6379[2]> 
  • keys * .

檢視當前庫中所有的key

127.0.0.1:6379> keys *
 1) "myset"
 2) "mysort"
 3) "list1"
 4) "age"
 5) "myset2"
 6) "mylist"
  • dbsize

返回倉庫中key的數目

127.0.0.1:6379[1]> dbsize
(integer) 1
  • move key 1

將指定key移動到1號倉庫

127.0.0.1:6379[2]> keys *
1) "sex"
2) "name"
127.0.0.1:6379[2]> move sex 1
(integer) 1
127.0.0.1:6379[2]> keys *
1) "name"
127.0.0.1:6379[2]> select 1
OK
127.0.0.1:6379[1]> keys *
1) "sex"
  • exists myset

檢查key為myset的是否存在,如果存在返回1,如果不存在返回0

127.0.0.1:6379> exists myset
(integer) 1
  • del key1 key2 key3 …

刪除key,可以多個可以一個

127.0.0.1:6379[2]> keys *
1) "gender"
2) "name"
3) "age"
127.0.0.1:6379[2]> del name age
(integer) 2
127.0.0.1:6379[2]> keys *
1) "gender"
  • rename gender sex

將key為gender重新命名為sex

127.0.0.1:6379[2]> keys *
1) "gender"
127.0.0.1:6379[2]> rename gender sex
OK
127.0.0.1:6379[2]> keys *
1) "sex"
  • expire sex 1000

將key的過期時間設定為1000秒

127.0.0.1:6379[2]> expire sex 1000
(integer) 1
  • ttl sex

檢視sex的到期時間

127.0.0.1:6379[2]> ttl sex
(integer) 953
  • type sex

返回指定key(sex)的value的資料型別

127.0.0.1:6379[2]> type sex
string
  • flushdb

刪除當前資料庫中所有的key

  • flushall

刪除所有資料庫中所有的key

  • info

返回伺服器的資訊和統計

  • echo value

列印value,相當於:System.out.println(value);

頻道訂閱

  • subscribe channel

訂閱頻道 ,訂閱channel這個頻道

127.0.0.1:6379> subscribe laoma
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "laoma"
3) (integer) 1
  • psubscribe ch*

批量訂閱以ch開頭的頻道

127.0.0.1:6379> psubscribe ch*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "ch*"
3) (integer) 1
  • publish channel content

在指定的頻道中釋出資訊

127.0.0.1:6379[1]> publish laoma good
(integer) 2

儲存String常用命令

1.賦值取值

  • 賦值 set key value
  • 取值 get key
127.0.0.1:6379> set country china
OK
127.0.0.1:6379> get country
"china"

2.刪除

  • del key
127.0.0.1:6379> get message   //得到key為message的value為playGame
"playGame"
127.0.0.1:6379> del message    //執行刪除操作
(integer) 1
127.0.0.1:6379> get message  //再次get 沒有得到,說明刪除
(nil)
127.0.0.1:6379> 

3.數值操作

  • 數值遞增 incr key

將指定key的value遞增1,如果key不存在,則預設value的值為0.

127.0.0.1:6379> set count 90  //給count賦值為 90 
OK
127.0.0.1:6379> incr count  //第一次遞增
(integer) 91
127.0.0.1:6379> incr count  第二次遞增
(integer) 92
127.0.0.1:6379> get count  //得到兩次遞增之後的值為 92
"92"
127.0.0.1:6379> get age  //取key為age的value不存在
(nil)
127.0.0.1:6379> incr age  //將age遞增一次
(integer) 1
127.0.0.1:6379> get age    //由於不存在key的value預設為0,所有得到age一次遞增之後為1
"1"
  • 數值遞減 decr key

將指定的key的value遞減1,如果key不存在,則預設value的值為0

127.0.0.1:6379> get count  //count的初始值為92
"92"
127.0.0.1:6379> decr count
(integer) 91
127.0.0.1:6379> decr count
(integer) 90
127.0.0.1:6379> get count  //經過兩次遞減之後的值為90
"90"
127.0.0.1:6379> decr age1  //由於age1 這個key不存在,預設value為0開始遞減
(integer) -1
127.0.0.1:6379> get age1  //遞減後的值為-1
"-1"
  • 數值加法 incrby key num

將指定key的value增加num,如果key不存在,則預設value為0,再增加num。

127.0.0.1:6379> get count   //count的初始值為90
"90"
127.0.0.1:6379> incrby count 10
(integer) 100
127.0.0.1:6379> get count  //經過增加10之後,得到的值為100
"100"
127.0.0.1:6379> get count1  //count1 不存在
(nil)
127.0.0.1:6379> incrby count1 10  //給count1的value增加10
(integer) 10
127.0.0.1:6379> get count1   //得到增加之後的值為10
"10"
  • 數值減法 decrby key num

將指定key 的value減掉num,如果key不存在,則預設value為0。

127.0.0.1:6379> get count  
"100"
127.0.0.1:6379> decrby count 10   
(integer) 90
127.0.0.1:6379> get count   
"90"
127.0.0.1:6379> get count2
(nil)
127.0.0.1:6379> decrby count2 10
(integer) -10
127.0.0.1:6379> get count2
"-10"

4.字串追加

  • append key vul

將指定key的value後面追加vul,這不是數值的加減,是字串後面的追加。

127.0.0.1:6379> get country
"china"
127.0.0.1:6379> append country Good!
(integer) 10
127.0.0.1:6379> get country
"chinaGood!"

5.擴充套件命令

  • getset key value

先獲取key再進行賦值

127.0.0.1:6379> get country
"chinaGood!"
127.0.0.1:6379> getset country china  //先得到country的值在對它賦值為china
"chinaGood!"
127.0.0.1:6379> get country
"china"

儲存Hash常用命令

1.儲存

  • hset ishash key1 value1 key2 value2 key3 value3 …

將key value鍵值對儲存到myhash中,可以一次存入多個鍵值對。

127.0.0.1:6379> hset ishash name xiaoming age 10 address beijing
(integer) 3

2.取值

  • hget ishash key

獲得ishash中key的value。

127.0.0.1:6379> hget ishash name
"xiaoming"
  • hmget ishash key1 key2 key3 …

獲得ishash中多個key的value。

127.0.0.1:6379> hmget ishash name age address
1) "xiaoming"
2) "10"
3) "beijing"
  • hgetall ishash

獲得ishash中全部的key跟value。

127.0.0.1:6379> hgetall ishash
1) "name"
2) "xiaoming"
3) "age"
4) "10"
5) "address"
6) "beijing"

3. 刪除

  • hdel ishash key1 key2 key3 …

刪除ishash中指定的key,key可以為一個,也可以為多個。

127.0.0.1:6379> hgetall ishash
 1) "name"
 2) "xiaoming"
 3) "age"
 4) "10"
 5) "address"
 6) "beijing"
 7) "number"
 8) "10"
 9) "num"
10) "20"
11) "age1"
12) "20"
13) "age2"
14) "90"
15) "age3"
16) "89"
127.0.0.1:6379> hdel ishash age1 age2 
(integer) 2
127.0.0.1:6379> hgetall ishash   //刪除ishash中的age1 跟 age2之後得到的結果
 1) "name"
 2) "xiaoming"
 3) "age"
 4) "10"
 5) "address"
 6) "beijing"
 7) "number"
 8) "10"
 9) "num"
10) "20"
11) "age3"
12) "89"
  • del myhash

刪除myhash以及其中的key跟value。

127.0.0.1:6379> hgetall myhash
1) "name"
2) "laoma"
3) "age"
4) "20"
del myhash
(integer) 1
127.0.0.1:6379> hgetall myhash
(empty list or set)

4.增加

  • hincrby ishash key num

將ishash中指定key的value增加num

127.0.0.1:6379> hget ishash age
"10"
127.0.0.1:6379> hincrby ishash age 2
(integer) 12
127.0.0.1:6379> hget ishash age
"12"

5.檢查key是否存在

  • hexists ishash key

檢查ishash中的key是否存在,如果存在返回1,如果不存在返回0

127.0.0.1:6379> hexists ishash name
(integer) 1
127.0.0.1:6379> hexists ishash name1
(integer) 0

6.hash中key的數量

  • hlen ishash

返回ishash中key-value的個數

127.0.0.1:6379> hlen ishash
(integer) 6

7.得到hash中所有的key或者value

  • hkeys ishash

返回ishash中所有的key

127.0.0.1:6379> hkeys ishash
1) "name"
2) "age"
3) "address"
4) "number"
5) "num"
6) "age3"
  • hvals ishash

返回ishash中所有的value

127.0.0.1:6379> hvals ishash
1) "xiaoming"
2) "12"
3) "beijing"
4) "10"
5) "20"
6) "89"

儲存list(連結串列)常用命令

1.兩端新增

  • lpush islist value1 value2 value3 …

向連結串列中新增資料,如果islist存在,更新islist,如果islist不存在,則建立

127.0.0.1:6379> lpush islist a b c d e f g 1 2 3 4 5
(integer) 12

2.檢視

  • lrange islist 0 3

檢視下標為0 到 3 的元素

  • lrange islist 0 -1

檢視所有的元素,-1表示最後以為,-2表示倒數第二位,以此類推

127.0.0.1:6379> lrange islist 0 3
1) "5"
2) "4"
3) "3"
4) "2"
127.0.0.1:6379> lrange islist 0 -1   //由於連結串列的特性,新增的資料順序是這樣(不知道怎麼形容0.0)
 1) "5"
 2) "4"
 3) "3"
 4) "2"
 5) "1"
 6) "g"
 7) "f"
 8) "e"
 9) "d"
10) "c"
11) "b"
12) "a"

3.兩端彈出

  • lpop islist

從下標為0開始彈出,返回彈出的資料,做彈出操作後,islist中不再存在彈出的資料

127.0.0.1:6379> lrange islist 0 -1
 1) "5"
 2) "4"
 3) "3"
 4) "2"
 5) "1"
 6) "g"
 7) "f"
 8) "e"
 9) "d"
10) "c"
11) "b"
12) "a"
127.0.0.1:6379> lpop islist
"5"
127.0.0.1:6379> lpop islist
"4"
127.0.0.1:6379> lrange islist 0 -1
 1) "3"
 2) "2"
 3) "1"
 4) "g"
 5) "f"
 6) "e"
 7) "d"
 8) "c"
 9) "b"
10) "a"

4.獲得list中元素的個數

  • llen islist

返回islist中元素的個數

127.0.0.1:6379> llen islist
(integer) 10

5.插入資料

  • lpushx islist value

向islist中插入value,如果islist存在,則插入value到頭部,如果islist不存在,不插入value,也不會建立islist

127.0.0.1:6379> lpushx islist aa
(integer) 11
127.0.0.1:6379> lrange islist 0 -1
 1) "aa"
 2) "3"
 3) "2"
 4) "1"
 5) "g"
 6) "f"
 7) "e"
 8) "d"
 9) "c"
10) "b"
11) "a"
  • rpushx islist value

向islist中插入value,如果islist存在,則插入value到尾部,如果islist不存在,不插入value,也不會建立islist

127.0.0.1:6379> rpushx islist weibu
(integer) 12
127.0.0.1:6379> lrange islist 0 -1
 1) "aa"
 2) "3"
 3) "2"
 4) "1"
 5) "g"
 6) "f"
 7) "e"
 8) "d"
 9) "c"
10) "b"
11) "a"
12) "weibu"

6.刪除

  • lrem islist count val

刪除count個value為val的元素
count > 0 從頭部開始刪除count個value為val的元素
count < 0 從尾部開始刪除count個value為val的元素
count = 0 刪除所有value為val的元素

127.0.0.1:6379> lrange lllist 0 -1
1) "b"
2) "b"
3) "a"
4) "a"
5) "a"
127.0.0.1:6379> lrem lllist 2 a
(integer) 2
127.0.0.1:6379> lrange lllist 0 -1
1) "b"
2) "b"
3) "a"
127.0.0.1:6379> 

7.指定位置插入和修改

  • lset mylist index val

修改mylist中下標為index位置的元素值為val,下標從0開始

127.0.0.1:6379> lrange mylist 0 -1
1) "f"
2) "e"
3) "d"
4) "c"
5) "b"
6) "a"
127.0.0.1:6379> lset mylist 3 change
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "f"
2) "e"
3) "d"
4) "change"
5) "b"
6) "a"
  • linsert mylist before value val

向mylist中value的前面插入val

  • linsert mylist after value val

向mylist中value的後面插入val

127.0.0.1:6379> lrange mylist 0 -1
1) "f"
2) "e"
3) "d"
4) "change"
5) "b"
6) "a"
127.0.0.1:6379> linsert mylist before change bef
(integer) 7
127.0.0.1:6379> linsert mylist after change aft
(integer) 8
127.0.0.1:6379> lrange mylist 0 -1
1) "f"
2) "e"
3) "d"
4) "bef"
5) "change"
6) "aft"
7) "b"
8) "a"

8.彈出放入指定list

  • rpoplpush list1 list2

將list1中的元素(從尾部開始)彈出之後放入list2中

127.0.0.1:6379> lrange islist 0 -1
1) "aa"
2) "3"
3) "2"
4) "1"
5) "g"
6) "f"
7) "e"
8) "d"
9) "c"
127.0.0.1:6379> rpoplpush islist mylist
"c"
127.0.0.1:6379> lrange mylist 0 -1
 1) "c"
 2) "b"
 3) "weibu"
 4) "f"
 5) "e"
 6) "d"
 7) "bef"
 8) "change"
 9) "aft"
10) "b"
11) "a"

儲存Set常用命令

Set中不能出現重複元素,並且沒有序

1. 新增、檢視、刪除元素

  • sadd myset val1 val2 val3 …

向myset中新增資料,一次行可以新增多個,但是不能有重複元素,負責報錯

127.0.0.1:6379> sadd myset a b c 1 2 3
(integer) 6
  • smembers myset

檢視myset中所有的元素

127.0.0.1:6379> smembers myset
1) "b"
2) "1"
3) "c"
4) "2"
5) "a"
6) "3"
  • sismember myset a

檢查myset中是否含有a這個元素,返回1則表示存在,返回0表示不存在

127.0.0.1:6379> sismember myset a
(integer) 1

2.差集、交集、並集

  • sdiff myset myset2

求出myset跟myset2的差集

127.0.0.1:6379> smembers myset
1) "c"
2) "b"
3) "2"
4) "a"
5) "1"
6) "3"
127.0.0.1:6379> smembers myset2
1) "c"
2) "a"
3) "2"
4) "3"
127.0.0.1:6379> sdiff myset myset2
1) "b"
2) "1"
  • sinter myset myset2

求出myset跟myset2的交集

127.0.0.1:6379> smembers myset
1) "c"
2) "b"
3) "2"
4) "a"
5) "1"
6) "3"
127.0.0.1:6379> smembers myset2
1) "c"
2) "a"
3) "2"
4) "3"
127.0.0.1:6379> sinter myset myset2
1) "c"
2) "a"
3) "2"
4) "3" 
  • sunion myset myset2

求出myset跟myset2的並集

127.0.0.1:6379> smembers myset2
1) "c"
2) "2"
3) "f"
4) "g"
5) "a"
6) "3"
127.0.0.1:6379> smembers myset
1) "c"
2) "b"
3) "2"
4) "a"
5) "1"
6) "3"
127.0.0.1:6379> sunion myset myset2
1) "f"
2) "b"
3) "2"
4) "g"
5) "a"
6) "1"
7) "3"
8) "c"

3.擴充套件命令

  • scard myset

返回myset中元素的個數

127.0.0.1:6379> scard myset
(integer) 6
  • srandmember myset

隨機返回myset中的某個元素

127.0.0.1:6379> srandmember myset
"1"
127.0.0.1:6379> srandmember myset
"a"
127.0.0.1:6379> srandmember myset
"c"
  • sdiffstore setc seta setb

將seta與setb的差集存到setc中,覆蓋setc中原有的元素

127.0.0.1:6379> smembers seta
1) "c"
2) "a"
3) "b"
127.0.0.1:6379> smembers setb
1) "d"
2) "c"
3) "b"
127.0.0.1:6379> smembers setc
1) "f"
127.0.0.1:6379> sdiffstore setc seta setb
(integer) 1
127.0.0.1:6379> smembers setc
1) "a"
  • sinterstore setc seta setb

將seta與setb的交集存到setc中,覆蓋setc中原有的元素

127.0.0.1:6379> smembers seta
1) "c"
2) "a"
3) "b"
127.0.0.1:6379> smembers setb
1) "d"
2) "c"
3) "b"
127.0.0.1:6379> smembers setc
1) "a"
127.0.0.1:6379> sinterstore setc seta setb
(integer) 2
127.0.0.1:6379> smembers setc
1) "c"
2) "b"
  • sunionstroe setc seta setb

將seta與setb的並集存到setc中,覆蓋setc中原有的元素

127.0.0.1:6379> smembers seta
1) "c"
2) "a"
3) "b"
127.0.0.1:6379> smembers setb
1) "d"
2) "c"
3) "b"
127.0.0.1:6379> smembers setc
1) "c"
2) "b"
127.0.0.1:6379> sunionstore setc seta setb
(integer) 4
127.0.0.1:6379> smembers setc
1) "b"
2) "c"
3) "a"
4) "d"

Sorted-Set常用命令

Redis 有序集合和集合一樣也是string型別元素的集合,且不允許重複的成員。
不同的是每個元素都會關聯一個double型別的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。
有序集合的成員是唯一的,但分數(score)卻可以重複。

1.新增

  • 新增元素:zadd mysort 10 a 20 b 30 c 40 d

分數對應後面的value,根據分數插入資料

127.0.0.1:6379> zadd mysort 10 a 20 b 30 c 40 d
(integer) 4
127.0.0.1:6379> zadd mysort 10 gg
(integer) 1

2.檢視元素

  • zscore mysort a

返回mysort中value為a的分數

127.0.0.1:6379> zscore mysort a
"10"
  • zcard mysort

返回mysort中元素的個數

127.0.0.1:6379> zcard mysort
(integer) 5
  • zrange mysort 0 -1

檢視所有的元素,下標從0開始到-1結束,-1表示倒數第一個元素

127.0.0.1:6379> zrange mysort 0 -1
1) "a"
2) "gg"
3) "b"
4) "c"
5) "d"
  • zrange mysort 0 -1 withscores

檢視所有元素並且帶分數

127.0.0.1:6379> zrange mysort 0 -1 withscores
 1) "a"
 2) "10"
 3) "gg"
 4) "10"
 5) "b"
 6) "20"
 7) "c"
 8) "30"
 9) "d"
10) "40"
  • zrevrange mysort 0 -1 withscores

從大到小排序檢視

127.0.0.1:6379> zrevrange mysort 0 -1 withscores
 1) "d"
 2) "40"
 3) "c"
 4) "30"
 5) "b"
 6) "20"
 7) "gg"
 8) "10"
 9) "a"
10) "10"
  • zrangebyscore mysort 0 20

檢視分數0-20的元素

127.0.0.1:6379> zrangebyscore mysort 0 20
1) "a"
2) "gg"
3) "b"
  • zrangebyscore mysort 0 20 withscores

檢視分數0-20的分數跟元素

127.0.0.1:6379> zrangebyscore mysort 0 20 withscores
1) "a"
2) "10"
3) "gg"
4) "10"
5) "b"
6) "20"
  • zrangebyscore mysort 0 20 withscores limit 0 2

分組顯示2個數據

127.0.0.1:6379> zrangebyscore mysort 0 20 withscores limit 0 2
1) "a"
2) "10"
3) "gg"
4) "10"
  • zcount mysort 10 20

返回分數在10-20之間的元素的個數

127.0.0.1:6379> zcount mysort 10 20 
(integer) 3

3.刪除

  • zremrangebyrank mysort 0 4

按照下標的範圍進行刪除

127.0.0.1:6379> zrange mysort 0 -1
1) "a"
2) "gg"
3) "b"
4) "c"
5) "d"
127.0.0.1:6379> zremrangebyrank mysort 0 1
(integer) 2
127.0.0.1:6379> zrange mysort 0 -1
1) "b"
2) "c"
3) "d"
  • zremrangebyscore mysort 30 40

按照分數範圍刪除

127.0.0.1:6379> zremrangebyscore mysort 30 40
(integer) 2
127.0.0.1:6379> zrange mysort 0 -1
1) "b"
  • zrem mysort b d

刪除mysort中的b跟d兩個元素

127.0.0.1:6379> zrange mysrot 0 -1
1) "d"
2) "f"
3) "i"
127.0.0.1:6379> zrem mysrot  d
(integer) 1
127.0.0.1:6379> zrange mysrot 0 -1
1) "f"
2) "i"

4.擴充套件

  • zincrby mysrot 4 f

給f的分數增加4

127.0.0.1:6379> zrange mysrot 0 -1 withscores
1) "f"
2) "14"
3) "i"
4) "17"
127.0.0.1:6379> zincrby mysrot 4 f
"18"
127.0.0.1:6379> zrange mysrot 0 -1 withscores
1) "i"
2) "17"
3) "f"
4) "18"

如果有錯請指出,謝謝!0.0