Redis 3.Redis資料型別
阿新 • • 發佈:2018-12-14
Redis
@Author:hanguixian
@Email:[email protected]
三 Redis資料型別
1 Redis的五大資料型別
1.1 string(字串)
- string是redis最基本的型別,你可以理解成與Memcached一模一樣的型別,一個key對應一個value。
- string型別是二進位制安全的。意思是redis的string可以包含任何資料。比如jpg圖片或者序列化的物件 。
- string型別是Redis最基本的資料型別,一個redis中字串value最多可以是512M
1.2 hash(雜湊,類似java裡的Map)
- Redis hash 是一個鍵值對集合。
- Redis hash是一個string型別的field和value的對映表,hash特別適合用於儲存物件。
- 類似Java裡面的Map<String,Object>
1.3 List(列表)
- Redis 列表是簡單的字串列表,按照插入順序排序。你可以新增一個元素導列表的頭部(左邊)或者尾部(右邊)。
- 它的底層實際是個連結串列
1.4 Set(集合)
- Redis的Set是string型別的無序集合。它是通過HashTable實現實現的
1.5 zset(sorted set:有序集合)
- Redis的zset 和 set 一樣也是string型別元素的集合,且不允許重複的成員。
- 不同的是每個元素都會關聯一個double型別的分數。
- redis正是通過分數來為集合中的成員進行從小到大的排序。zset的成員是唯一的,但分數(score)卻可以重複。
2 常見資料型別操作命令
3 Redis 鍵(key)
3.1 常用命令
- keys *
- exists key的名字,判斷某個key是否存在
- move key db —>當前庫就沒有了,被移除了
- expire key 秒鐘:為給定的key設定過期時間
- ttl key 檢視還有多少秒過期,-1表示永不過期,-2表示已過期
- type key 檢視你的key是什麼型別
- 詳情參考:http://redisdoc.com/key/index.html
3.2 示例
[[email protected] bin]# redis-server /hanguixian/myredis/redis.conf
14897:C 27 Nov 2018 17:32:46.353 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
14897:C 27 Nov 2018 17:32:46.353 # Redis version=5.0.0, bits=64, commit=00000000, modified=0, pid=14897, just started
14897:C 27 Nov 2018 17:32:46.353 # Configuration loaded
[[email protected] bin]# redis-cli
127.0.0.1:6379> FLUSHDB
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> KEYS *
1) "k1"
127.0.0.1:6379> EXISTS k1
(integer) 1
127.0.0.1:6379> EXISTS k2
(integer) 0
127.0.0.1:6379> move k1 2
(integer) 1
127.0.0.1:6379> KEYS *
(empty list or set)
127.0.0.1:6379> SELECT 2
OK
127.0.0.1:6379[2]> KEYS *
1) "k1"
127.0.0.1:6379[2]> SELECT 0
OK
127.0.0.1:6379> KEYS *
(empty list or set)
127.0.0.1:6379> set k02 v02
OK
127.0.0.1:6379> KEYS *
1) "k02"
127.0.0.1:6379> EXPIRE k02 10
(integer) 1
127.0.0.1:6379> ttl k02
(integer) 2
127.0.0.1:6379> ttl k02
(integer) 0
127.0.0.1:6379> EXPIRE k02 10
(integer) 0
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set k03 v03
OK
127.0.0.1:6379> type k03
string
127.0.0.1:6379> type v03
none
127.0.0.1:6379> type set01
set
127.0.0.1:6379> ttl set01
(integer) -1
4 Redis字串(String)
- 單值單value
4.1 常用命令
- set/get/del/append/strlen
- Incr/decr/incrby/decrby,一定要是數字才能進行加減
- Incr:將
key
中儲存的數字值增一。 - decr:將
key
中儲存的數字值減一。 - incrby:將
key
所儲存的值加上增量increment
。 - decrby:將
key
所儲存的值減去減量decrement
。
- Incr:將
- getrange/setrange
- getrange:返回
key
中字串值的子字串,字串的擷取範圍由start
和end
兩個偏移量決定(包括start
和end
在內)。 - setrange:用
value
引數覆寫(overwrite)給定key
所儲存的字串值,從偏移量offset
開始。
- getrange:返回
- setex(set with expire)鍵秒值/setnx(set if not exist)
- setex:將值
value
關聯到key
,並將key
的生存時間設為seconds
(以秒為單位)。 - setnx:將
key
的值設為value
,當且僅當key
不存在。
- setex:將值
- mset/mget/msetnx
- mset:同時設定一個或多個
key-value
對。 - mget:返回所有(一個或多個)給定
key
的值。 - msetnx:同時設定一個或多個
key-value
對,當且僅當所有給定key
都不存在。
- mset:同時設定一個或多個
- getset(先get再set)
- 將給定
key
的值設為value
,並返回key
的舊值(old value)。
- 將給定
- 詳情參考:http://redisdoc.com/string/index.html
4.2 示例
[[email protected] bin]# redis-server /hanguixian/myredis/redis.conf
15038:C 27 Nov 2018 19:49:09.640 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
15038:C 27 Nov 2018 19:49:09.640 # Redis version=5.0.0, bits=64, commit=00000000, modified=0, pid=15038, just started
15038:C 27 Nov 2018 19:49:09.640 # Configuration loaded
[[email protected] bin]# redis-cli
127.0.0.1:6379> FLUSHDB
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> append k1 aaaaaa
(integer) 8
127.0.0.1:6379> get k1
"v1aaaaaa"
127.0.0.1:6379> STRLEN k1
(integer) 8
127.0.0.1:6379> INCR k1
(error) ERR value is not an integer or out of range
127.0.0.1:6379> set int01 1
OK
127.0.0.1:6379> INCR int01
(integer) 2
127.0.0.1:6379> INCR int01
(integer) 3
127.0.0.1:6379> INCRBY int01 20
(integer) 23
127.0.0.1:6379> getrange k1 1 5
"1aaaa"
127.0.0.1:6379> SETRANGE k1 1 bbb
(integer) 8
127.0.0.1:6379> get k1
"vbbbaaaa"
127.0.0.1:6379> setex k1 10 555555
OK
127.0.0.1:6379> get k1
"555555"
127.0.0.1:6379> get k1
(nil)
127.0.0.1:6379> mset k2 v2 k3 v3
OK
127.0.0.1:6379> mget k1 k2 k3
1) (nil)
2) "v2"
3) "v3"
127.0.0.1:6379> getset k2 mmmm
"v2"
127.0.0.1:6379> getset k2 uuuu
"mmmm"
127.0.0.1:6379> get k2
"uuuu"
5 Redis列表(List)
- 單值多value
5.1 常用命令
- lpush/rpush/lrange
- lpush:將一個或多個值
value
插入到列表key
的表頭 - rpush:將一個或多個值
value
插入到列表key
的表尾(最右邊)。 - lrange:返回列表
key
中指定區間內的元素,區間以偏移量start
和stop
指定。
- lpush:將一個或多個值
- lpop/rpop
- lpop:移除並返回列表
key
的頭元素。 - rpop:移除並返回列表
key
的尾元素。
- lpop:移除並返回列表
- lindex,按照索引下標獲得元素(從上到下)
- 返回列表
key
中,下標為index
的元素。
- 返回列表
- llen
- 返回列表
key
的長度。
- 返回列表
- lrem key 刪N個value
- 根據引數
count
的值,移除列表中與引數value
相等的元素。
- 根據引數
- ltrim key 開始index 結束index,擷取指定範圍的值後再賦值給key
- ltrim:擷取指定索引區間的元素,格式是ltrim list的key 起始索引 結束索引
- rpoplpush 源列表 目的列表
- 移除列表的最後一個元素,並將該元素新增到另一個列表並返回
- lset key index value
- 將列表
key
下標為index
的元素的值設定為value
。
- 將列表
- linsert key before/after 值1 值2
- 在list某個已有值的前後再新增具體值
- 詳情參考:http://redisdoc.com/list/index.html
5.2 示例
127.0.0.1:6379> FLUSHDB
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> lpush scope a b 1 2
(integer) 4
127.0.0.1:6379> LRANGE scope 0 -1
1) "2"
2) "1"
3) "b"
4) "a"
127.0.0.1:6379> RPOP scope
"a"
127.0.0.1:6379> LRANGE scope 0 -1
1) "2"
2) "1"
3) "b"
127.0.0.1:6379> lindex scope 2
"b"
5.3 效能總結
- 它是一個字串連結串列,left、right都可以插入新增;
- 如果鍵不存在,建立新的連結串列;
- 如果鍵已存在,新增內容;
- 如果值全移除,對應的鍵也就消失了。
- 連結串列的操作無論是頭和尾效率都極高,但假如是對中間元素進行操作,效率就很慘淡了。
6 Redis集合(Set)
- 單值多value
6.1 常用命令
- sadd/smembers/sismember
- sadd:將一個或多個
member
元素加入到集合key
當中,已經存在於集合的member
元素將被忽略。 - smembers:返回集合
key
中的所有成員。 - sismember:判斷
member
元素是否集合key
的成員。
- sadd:將一個或多個
- scard,獲取集合裡面的元素個數
- srem key value 刪除集合中元素
- 移除集合
key
中的一個或多個member
元素,不存在的member
元素會被忽略。
- 移除集合
- srandmember key 某個整數(隨機出幾個數)
- 從set集合裡面隨機取出2個
- 如果超過最大數量就全部取出
- 如果寫的值是負數,比如-3 ,表示需要取出3個,但是可能會有重複值。
- spop key 隨機出棧
- smove key1 key2 在key1裡某個值:作用是將key1裡的某個值賦給key2
- SMOVE source destination member:將
member
元素從source
集合移動到destination
集合。
- SMOVE source destination member:將
- 數學集合類
- 差集:sdiff
- 返回一個集合的全部成員,該集合是所有給定集合之間的差集。
- 交集:sinter
- 返回一個集合的全部成員,該集合是所有給定集合的交集。
- 並集:sunion
- 返回一個集合的全部成員,該集合是所有給定集合的並集。
- 差集:sdiff
- 詳情參考:http://redisdoc.com/set/index.html
6.2 示例
127.0.0.1:6379> FLUSHDB
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> sadd cc 1 2 3 n n d 1
(integer) 5
127.0.0.1:6379> SMEMBERS cc
1) "2"
2) "n"
3) "3"
4) "d"
5) "1"
127.0.0.1:6379> scard cc
(integer) 5
7 Redis雜湊(Hash)
- KV模式不變,但V是一個鍵值對
7.1 常用命令
- hset/hget/hmset/hmget/hgetall/hdel
- hset:HSET key field value
- 將雜湊表
key
中的域field
的值設為value
。
- 將雜湊表
- hget:HGET key field
- 返回雜湊表
key
中給定域field
的值。
- 返回雜湊表
- hmset:HMSET key field value [field value …]
- 同時將多個
field-value
(域-值)對設定到雜湊表key
中。
- 同時將多個
- hmget:HMGET key field [field …]
- 返回雜湊表
key
中,一個或多個給定域的值。
- 返回雜湊表
- hgetall:HGETALL key
- 返回雜湊表
key
中,所有的域和值。
- 返回雜湊表
- hdel:HDEL key field [field …]
- 刪除雜湊表
key
中的一個或多個指定域,不存在的域將被忽略。
- 刪除雜湊表
- hset:HSET key field value
- hlen
- HLEN key
- 返回雜湊表
key
中域的數量。
- hexists key 在key裡面的某個值的key
- HEXISTS key field
- 檢視雜湊表
key
中,給定域field
是否存在。
- hkeys/hvals
- hkeys:HKEYS key
- 返回雜湊表
key
中的所有域
- 返回雜湊表
- hvals:HVALS key
- 返回雜湊表
key
中所有域的值。
- 返回雜湊表
- hkeys:HKEYS key
- hincrby/hincrbyfloat
- hincrby:HINCRBY key field increment
- 為雜湊表
key
中的域field
的值加上增量increment
。
- 為雜湊表
- hincrbyfloat:HINCRBY key field increment
- 為雜湊表
key
中的域field
的值加上增量increment
。
- 為雜湊表
- hincrby:HINCRBY key field increment
- hsetnx
- HSETNX key field value
- 將雜湊表
key
中的域field
的值設定為value
,當且僅當域field
不存在。
- 詳情參考:http://redisdoc.com/hash/index.html
7.2 示例
[[email protected] bin]# redis-cli
127.0.0.1:6379> KEYS *
(empty list or set)
127.0.0.1:6379> hset englishBook price 100
(integer) 1
127.0.0.1:6379> hget englishBook price
"100"
127.0.0.1:6379> hmset englishBook name youtube1 master 89
OK
127.0.0.1:6379> hmget englishBook name master
1) "youtube1"
2) "89"
127.0.0.1:6379> HGETALL englishBook
1) "price"
2) "100"
3) "name"
4) "youtube1"
5) "master"
6) "89"
127.0.0.1:6379> HEXISTS englishBook name
(integer) 1
127.0.0.1:6379> HEXISTS englishBook name1
(integer) 0
127.0.0.1:6379> HKEYS englishBook
1) "price"
2) "name"
3) "master"
127.0.0.1:6379> HVALS englishBook
1) "100"
2) "youtube1"
3) "89"
8 Redis有序集合Zset(sorted set)
8.1 常用命令
- zadd/zrange
- zadd:ZADD key score member [[score member][score member] …]
- 將一個或多個
member
元素及其score
值加入到有序集key
當中。
- 將一個或多個
- zrange:ZRANGE key start stop [WITHSCORES]
- 返回有序集
key
中,指定區間內的成員。
- 返回有序集
- zadd:ZADD key score member [[score member][score member] …]
- zrangebyscore key 開始score 結束score
- ZRANGEBYSCORE key min max [WITHSCORES][LIMIT offset count]
- 返回有序集
key
中,所有score
值介於min
和max
之間(包括等於min
或max
)的成員。有序整合員按score
值遞增(從小到大)次序排列。
- 詳情參考:http://redisdoc.com/sorted_set/index.html
8.2 示例
127.0.0.1:6379> zadd student 100 lili 90 limei 70 lili
(integer) 2
127.0.0.1:6379> ZRANGE student 0 -1
1) "lili"
2) "limei"
127.0.0.1:6379> ZRANGE student 0 -1 WITHSCORES
1) "lili"
2) "70"
3) "limei"
4) "90"