1. 程式人生 > 其它 >Redis(二)

Redis(二)

Redis(二)

本文分為以下幾個部分:

基礎知識

五大基本資料型別

基礎知識

  • 上篇文章 中,GENERAL 配置中含有 databases 16,所以瞭解到 Redis 預設有16個數據庫。且從0開始計算資料庫。
[root@qundd src]# redis-cli
127.0.0.1:6379> config get databases	#獲取資料庫數量
1) "databases"
2) "16"
127.0.0.1:6379> select 1	#切換到1號資料庫
OK
127.0.0.1:6379[1]> select 0	#切換到0號資料庫
OK
127.0.0.1:6379> dbsize		#資料庫大小
(integer) 0
  • 入門操作

tab 鍵可自動補全

127.0.0.1:6379> set name 1	#設定值,set key value
OK
127.0.0.1:6379> get name	#獲取值
"1"
127.0.0.1:6379> dbsize		#資料庫大小
(integer) 1
127.0.0.1:6379> keys *		#獲取當前資料庫中所有(*)key,key大小寫敏感
1) "name"
127.0.0.1:6379> EXISTS name	#是否存在name這個key,命令大小寫不敏感
(integer) 1
127.0.0.1:6379> move name 1	#遷移到1號資料庫
(integer) 1
127.0.0.1:6379> flushdb		#清空當前資料庫
OK
127.0.0.1:6379> flushall	#清空所有資料庫
OK
127.0.0.1:6379> clear		#跟linux的clear一樣,好看用的
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> dbsize
(integer) 0
127.0.0.1:6379> set name 1
OK
127.0.0.1:6379> EXPIRE name 20	#設定name過期時間 20s
(integer) 1
127.0.0.1:6379> ttl name	#檢視name剩餘時間
(integer) 17
127.0.0.1:6379> ttl name	#當 -2 的時候,表示已過期,-1表示永不過期
(integer) -2
127.0.0.1:6379> keys *
(empty array)

五大基本資料型別

String

append 追加到後面

127.0.0.1:6379> set k1 hello
OK
127.0.0.1:6379> get k1
"hello"
127.0.0.1:6379> append k1 world
(integer) 10
127.0.0.1:6379> get k1
"helloworld"

strlen 獲取長度

127.0.0.1:6379> strlen k1
(integer) 10

del 刪除key

127.0.0.1:6379> del k1
(integer) 1
127.0.0.1:6379> get k1	不存在返回(nil)
(nil)
127.0.0.1:6379> keys *
(empty array)

incr decr 自增(1) 自減(1)

127.0.0.1:6379> set k1 1
OK
127.0.0.1:6379> get k1
"1"
127.0.0.1:6379> incr k1
(integer) 2
127.0.0.1:6379> get k1
"2"
127.0.0.1:6379> decr k1
(integer) 1

incrby decrby

incrby key value 給key增長value

decrby key value 給key減少value

127.0.0.1:6379> incrby k1 9	
(integer) 10
127.0.0.1:6379> get k1
"10"
127.0.0.1:6379> DECRBY k1 9
(integer) 1

getrange 擷取字串

127.0.0.1:6379> set k2 "hello world"
OK
127.0.0.1:6379> GETRANGE k2 0 2
"hel"
127.0.0.1:6379> GETRANGE k2 0 -1	#第二個位置使用 -1,獲取所有
"hello world"

setrange 替換

#setrange key offset value
127.0.0.1:6379> SETRANGE k2 1 aa	#從第一個位置開始使用aa替換
(integer) 11
127.0.0.1:6379> get k2
"haalo world"

setex 帶過期時間的設定值

#setex key second value
127.0.0.1:6379> setex k3 20 v3
OK
127.0.0.1:6379> ttl k3
(integer) 18
127.0.0.1:6379> ttl k3
(integer) -2

setnx 如果不存在就設定值

127.0.0.1:6379> setnx k4 v4
(integer) 1
127.0.0.1:6379> setnx k4 v4	#存在則設定失敗
(integer) 0

mset mget 批量設定獲取、msetnx

msetnx,要麼同時set成功,要麼均不set成功

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> msetnx k3 v3 k4 v4	#存在k3,設定失敗,k4也設定失敗
(integer) 0
127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k1"

getset 先獲取在設定

127.0.0.1:6379> getset k1 kk
"v1"
127.0.0.1:6379> get k1
"kk"

List

可以做 stack,也可以做quque,

lrange擷取,和String range用法相同

lpush、rpush 插入資料

127.0.0.1:6379> flushall
OK
127.0.0.1:6379> lpush list v1	#從左邊插入
(integer) 1
127.0.0.1:6379> lpush list v2
(integer) 2
127.0.0.1:6379> lpush list v3
(integer) 3
127.0.0.1:6379> rpush list v0	#從右側插入
(integer) 4
127.0.0.1:6379> lrange list 0 -1	#檢視list中所有資料,-1和getrange一樣,其他用法一樣
1) "v3"
2) "v2"
3) "v1"
4) "v0"

lpop、rpop 彈出資料

127.0.0.1:6379> lpop list	#左側彈出,左側新增的最後一個為v3
"v3"
127.0.0.1:6379> rpop list	#右側彈出,右側最後一個為v0
"v0"
127.0.0.1:6379> rpop list	#右側彈出,右側最後一個為v1
"v1"
127.0.0.1:6379> lrange list 0 -1
1) "v2"

lindex 獲取某個位置的value

#... 恢復之前的資料
#如果是lpush加入的,後加入的index小,如果是rpush加入的,後加入的index大
127.0.0.1:6379> lrange list 0 -1
1) "v3"
2) "v2"
3) "v1"
4) "v0"
127.0.0.1:6379> lindex list 2	#獲取第二個位置的value值
"v1"

llen list的長度

127.0.0.1:6379> llen list
(integer) 4

lrem 刪除元素

#lrem key 個數 value值
#刪除key中多少個某個元素,後加入(lpush)的先刪除
127.0.0.1:6379> lrem list 1 v0
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "v3"
2) "v2"
3) "v1"

ltrim 擷取元素

127.0.0.1:6379> lrange list 0 -1
1) "v3"
2) "v2"
3) "v1"
127.0.0.1:6379> LTRIM list 0 1
OK
127.0.0.1:6379> lrange list 0 -1
1) "v3"
2) "v2"

lset 設定某個位置的值

#lset key 位置 value值
127.0.0.1:6379> lrange list 0 -1
1) "v3"
2) "v2"
127.0.0.1:6379> lset list 0 v1
OK
127.0.0.1:6379> LRANGE list 0 -1
1) "v1"
2) "v2"
127.0.0.1:6379> lset l 0 1	#不存在該list報錯
(error) ERR no such key

linsert 在插入元素

#linsert key before|after 元素 要插入的元素value值
127.0.0.1:6379> LRANGE list 0 -1
1) "v1"
2) "v2"
127.0.0.1:6379> linsert list before v1 v0	#在v1前(理解為lpush)加入值
(integer) 3
127.0.0.1:6379> LRANGE list 0 -1
1) "v0"
2) "v1"
3) "v2"
127.0.0.1:6379> linsert list after v2 v3	#在v2後(理解為rpush)加入值
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "v0"
2) "v1"
3) "v2"
4) "v3"

rpoplpush

將一個list rpop,再 lpush 進另一個list

127.0.0.1:6379> RPOPLPUSH list list2
"v3"
127.0.0.1:6379> lrange list 0 -1
1) "v0"
2) "v1"
3) "v2"
127.0.0.1:6379> lrange list2 0 -1
1) "v3"

Set

sadd 新增元素

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> sadd set v1
(integer) 1
127.0.0.1:6379> sadd set v2
(integer) 1
127.0.0.1:6379> sadd set v3
(integer) 1

smembers 檢視set集合

127.0.0.1:6379> SMEMBERS set
1) "v1"
2) "v2"
3) "v3"

sismember 檢視集合中是否有該元素

#sismember 集合 元素
127.0.0.1:6379> sismember set v3
(integer) 1
127.0.0.1:6379> sismember set v4
(integer) 0

scard 檢視集合個數

127.0.0.1:6379> scard set
(integer) 3

srem 刪除某個元素

#srem 集合 元素
127.0.0.1:6379> srem set v2
(integer) 1
127.0.0.1:6379> SMEMBERS set
1) "v1"
2) "v3"

srandmember 隨機返回元素

#SRANDMEMBER 集合 (個數)
127.0.0.1:6379> SRANDMEMBER set
"v3"
127.0.0.1:6379> SRANDMEMBER set
"v1"

spop 隨機彈出(刪除)元素

#spop 集合 (個數)
127.0.0.1:6379> spop set
"v3"
127.0.0.1:6379> spop set
"v1"
127.0.0.1:6379> SMEMBERS set
(empty array)

smove 移動元素到另一個集合

#smove 原集合 目標集合 原集合的value值
127.0.0.1:6379> sadd set v1
(integer) 1
127.0.0.1:6379> sadd set v2
(integer) 1
127.0.0.1:6379> sadd set v3
(integer) 1
127.0.0.1:6379> sadd set2 v4	#注意為set2
(integer) 1
127.0.0.1:6379> smove set set2 v3
(integer) 1
127.0.0.1:6379> SMEMBERS set
1) "v1"
2) "v2"
127.0.0.1:6379> SMEMBERS set2
1) "v4"
2) "v3"

sinter、sunion、sdiff 交併差

都可以多個集合使用 sinter|sunion|sdiff set [set...]

127.0.0.1:6379> SMEMBERS set
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> SMEMBERS set2
1) "v4"
2) "v3"
127.0.0.1:6379> SINTER set set2
1) "v3"
127.0.0.1:6379> SUNION set set2
1) "v4"
2) "v1"
3) "v2"
4) "v3"
127.0.0.1:6379> sdiff set set2	#在前一個集合中,不在後面集合中的元素
1) "v1"
2) "v2"

Hash

hash key field(k) value

hset、hget 設定、獲取值

#hset key field value值
#hget key field
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> hset hash f1 v1
(integer) 1
127.0.0.1:6379> hset hash f2 v2
(integer) 1
127.0.0.1:6379> hset hash f3 v3
(integer) 1
127.0.0.1:6379> hget hash f1
"v1"

hmset、hmget 批量設定、獲取

127.0.0.1:6379> hmset hash f4 v4 f5 v5 
OK
127.0.0.1:6379> hmget hash f1 f2 f3 f4 f5
1) "v1"
2) "v2"
3) "v3"
4) "v4"
5) "v5"

hgetall 獲取某個hash的所有kv

127.0.0.1:6379> hgetall hash
 1) "f1"
 2) "v1"
 3) "f2"
 4) "v2"
 5) "f3"
 6) "v3"
 7) "f4"
 8) "v4"
 9) "f5"
10) "v5"

hdel 刪除某個值

127.0.0.1:6379> hdel hash f1
(integer) 1
127.0.0.1:6379> hgetall hash
1) "f2"
2) "v2"
3) "f3"
4) "v3"
5) "f4"
6) "v4"
7) "f5"
8) "v5"

hlen 獲取長度

127.0.0.1:6379> hlen hash
(integer) 4

hexists 判斷是否存在

#hexists key field
127.0.0.1:6379> hexists hash f1
(integer) 0
127.0.0.1:6379> hexists hash f2
(integer) 1

hkeys、hvals 獲取hash的k、v

127.0.0.1:6379> hkeys hash
1) "f2"
2) "f3"
3) "f4"
4) "f5"
127.0.0.1:6379> HVALS hash
1) "v2"
2) "v3"
3) "v4"
4) "v5"

hincrby 增長某個value

127.0.0.1:6379> hset hash f1 1
(integer) 1
127.0.0.1:6379> HINCRBY hash f1 2
(integer) 3
127.0.0.1:6379> hget hash f1
"3"

hsetnx 不存在才設定

127.0.0.1:6379> hsetnx hash f5 v5
(integer) 0
127.0.0.1:6379> hsetnx hash f6 v6
(integer) 1

ZSet

zset key score value

zrange 擷取,和String用法相同

zadd 新增元素

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> zadd set 1 one
(integer) 1
127.0.0.1:6379> zadd set 2 two 3 three
(integer) 2
127.0.0.1:6379> zrange set 0 -1
1) "one"
2) "two"
3) "three"

zrevrange 逆序排序

#zrevrange key 開始位置 結束位置
127.0.0.1:6379> zrevrange set 0 -1
1) "three"
2) "two"
3) "one"

zrangebyscore 依據score排序

#zrangebyscore set 最小值 最大值 [顯示包含score] [limit 從第幾個開始 多少個]
127.0.0.1:6379> zrangebyscore set -inf +inf 
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> zrangebyscore set -inf +inf withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
127.0.0.1:6379> zrangebyscore set -inf +inf withscores limit 0 2
1) "one"
2) "1"
3) "two"
4) "2"

zrem 刪除元素

127.0.0.1:6379> zrem set one
(integer) 1
127.0.0.1:6379> ZRANGE set 0 -1
1) "two"
2) "three"

zcard 個數

127.0.0.1:6379> zcard set
(integer) 2

zcount score在區間個數

127.0.0.1:6379> zcount set 1 2
(integer) 1
127.0.0.1:6379> zcount set -inf +inf
(integer) 2