本文介紹redis中的五大基本數據類型及經常使用命令 |數據類型 | 說明 | |--|--| | String | 是Redis中最基本的數據類型,二進制安全的,它能夠包含任意數據類型。如圖片。Redis中String類型的數據上限的512M。 | |List | Redis列表是簡單的字符串列表,按照插入順序排序。你能夠添加一個元素到列表的頭部(左邊)或者尾部(右邊)一個列表最多能夠包含 232 - 1 個元素 (4294967295, 每一個列表超過40億個元素)。 | | Hash | 是一個string類型的field和value的映射表,hash特別適合用於存儲對象。Redis 中每一個 hash 能夠存儲 232 - 1 鍵值對(40多億)。 | | Hash | Set 是 String 類型的無序集合。集合成員是惟一的,這就意味着集合中不能出現重複的數據。Redis 中集合是經過哈希表實現的,因此添加,刪除,查找的複雜度都是 O(1)。集合中最大的成員數爲 232 - 1 (4294967295, 每一個集合可存儲40多億個成員)。 | | ZSet | 有序集合和集合同樣也是string類型元素的集合,且不容許重複的成員。不一樣的是每一個元素都會關聯一個double類型的分數。redis正是經過分數來爲集合中的成員進行從小到大的排序。有序集合的成員是惟一的,但分數(score)卻能夠重複。集合是經過哈希表實現的,因此添加,刪除,查找的複雜度都是O(1)。 集合中最大的成員數爲 232 - 1 (4294967295, 每一個集合可存儲40多億個成員)。|正則表達式
啓動redis服務並登錄客服端 redis
五種數據類型的數據結構差別因此命令也不一樣,可是也有一些相通的命令,在這裏簡單介紹: 建立一個簡單的k/v對數據庫
127.0.0.1:6379> set name xn OK
在redis中默認有16個數據庫,編號0-15,正常狀況下,用戶登錄後首先看到的是0號數據庫,能夠手動換到其餘數據庫:數組
127.0.0.1:6380> set name zhangsan OK 127.0.0.1:6380> select 4 OK 127.0.0.1:6380[4]> get name (nil) 127.0.0.1:6380[4]> select 0 OK 127.0.0.1:6380> get name "zhangsan"
該命令用於存在key刪除key安全
127.0.0.1:6379> del name (integer) 1 127.0.0.1:6379> del name (integer) 0
序列化key,並返回被序列化的值數據結構
127.0.0.1:6379> dump name "\x00\x03dpb\t\x00\xe5\xa2\xc4\xd1\xfc\xb2\xd9\xcb" 127.0.0.1:6379> dump name1 (nil)
若是key不存在就返回nildom
檢查key是否存在3d
127.0.0.1:6379> exists name (integer) 1 127.0.0.1:6379> exists name1 (integer) 0
1表示存在,o表示不存在code
以秒爲單位,返回key的剩餘時間對象
127.0.0.1:6379> ttl name (integer) -1 127.0.0.1:6379> ttl name1 (integer) -2
-2表示key不存在,-1表示沒有設置有效時間,不會過時,咱們能夠經過EXPIRE key 設置有效時間
是指有效時間,單位爲秒
127.0.0.1:6379> expire name 120 (integer) 1 127.0.0.1:6379> ttl name (integer) 112 127.0.0.1:6379> ttl name (integer) 10 127.0.0.1:6379> ttl name (integer) 7 127.0.0.1:6379> ttl name (integer) -2
112是剩餘的有效時間
一樣是設置過時時間,只是單位爲毫秒
127.0.0.1:6379> pexpire name 100 (integer) 1 127.0.0.1:6379> ttl name (integer) -2
-2就表示已經不存在了
和ttl命令同樣,只是返回單位爲毫秒
127.0.0.1:6379> pexpire name 100000 (integer) 1 127.0.0.1:6379> ttl name (integer) 91 127.0.0.1:6379> pttl name (integer) 84601
經過正則表達式查找符合條件的key
127.0.0.1:6379> set age 18 OK 127.0.0.1:6379> set sex 男 OK 127.0.0.1:6379> set address 深圳 OK 127.0.0.1:6379> keys * 1) "age" 2) "address" 3) "sex"
key * 查詢全部的key
從當前數據庫隨機返回一個key
127.0.0.1:6379> randomkey "address" 127.0.0.1:6379> randomkey "age" 127.0.0.1:6379> randomkey "sex" 127.0.0.1:6379> randomkey "age"
返回key對應的數據類型
127.0.0.1:6379> type name none 127.0.0.1:6379> type age string 127.0.0.1:6379> type sex string
不存在的返回none
修改key的名稱
127.0.0.1:6379> rename age age1 OK 127.0.0.1:6379> exists age (integer) 0 127.0.0.1:6379> exists age1 (integer) 1
清空當前庫
清空全部庫
Redis中字符串的存儲方式都是以二進制的方式存儲的。 好比:
127.0.0.1:6379> set k1 a OK
k1的值爲a,對應的ascii碼是97,轉換爲二進制就是01100001。BIT命令就是對這個二進制數據進行操做的 | 命令 | 說明 | |--|--| |getbit | 獲取二級制中對應偏移量的值 | |setbit | 設置對應二進制位的值 | |bitcount | 統計二進制中位中爲1的個數 | | bitop |對二進制數據作位元操做,與,或,非,異或操做 | |bitpos | 返回字符串裏面第一個被設置爲1或者0的bit位|
用於key所儲存的字符串值,獲取指定偏移量的爲(bit)
127.0.0.1:6379> set k1 a OK 127.0.0.1:6379> getbit k1 0 (integer) 0 127.0.0.1:6379> getbit k1 1 (integer) 1 127.0.0.1:6379> getbit k1 2 (integer) 1 127.0.0.1:6379> getbit k1 3 (integer) 0 127.0.0.1:6379> getbit k1 4 (integer) 0 127.0.0.1:6379> getbit k1 5 (integer) 0 127.0.0.1:6379> getbit k1 6 (integer) 0 127.0.0.1:6379> getbit k1 7 (integer) 1
當偏移量 OFFSET 比字符串值的長度大,或者 key 不存在時,返回 0
用於對 key 所儲存的字符串值,設置或清除指定偏移量上的位(bit),返回的結果是該位上原來的bit值。好比咱們設置 k1爲a,k2爲c,a對應的ASCII碼爲97(01100001),c對應的ASCII碼爲99(01100011),相差了一個1,如此咱們就能夠經過setbit來調整
127.0.0.1:6379> set k2 c OK 127.0.0.1:6379> get k1 "a" 127.0.0.1:6379> get k2 "c" 127.0.0.1:6379> setbit k1 6 1 (integer) 0 127.0.0.1:6379> get k1 "c"
如此咱們就將k1的值快速調整爲了c
用來統計二進制中爲1的個數,好比a(97 01100001)爲3,c(99 01100011)爲4.
127.0.0.1:6379> get k1 "a" 127.0.0.1:6379> get k2 "c" 127.0.0.1:6379> bitcount k1 (integer) 3 127.0.0.1:6379> bitcount k2 (integer) 4
對一個或多個保存二進制位的字符串 key 進行位元操做,並將結果保存到 destkey 上。BITOP 命令支持 AND(與) 、 OR(或) 、 NOT(非) 、 XOR(異或)運算。好比a 01100001和c 01100011進行相關運算
127.0.0.1:6379> get k1 "a" 127.0.0.1:6379> get k2 "c" 127.0.0.1:6379> bitop and k3 k1 k2 (integer) 1 127.0.0.1:6379> get k3 "a" 127.0.0.1:6379> bitop or k4 k1 k2 (integer) 1 127.0.0.1:6379> get k4 "c" 127.0.0.1:6379> bitop xor k5 k1 k2 (integer) 1 127.0.0.1:6379> get k5 "\x02"
not運算注意參數個數
127.0.0.1:6379> bitop not k6 k1 (integer) 1 127.0.0.1:6379> get k6 "\x9e"
返回字符串裏面第一個被設置爲1或者0的bit位。 返回一個位置,把字符串當作一個從左到右的字節數組,第一個符合條件的在位置0,其次在位置8,等等。仍是以a爲例01100001
127.0.0.1:6379> bitpos k1 1 (integer) 1 127.0.0.1:6379> bitpos k1 0 (integer) 0
在實際開發過程當中咱們確定會碰到不少須要存儲對象的需求,此時hash就比較合適了。hash 是一個string類型的field和value的映射表,hash特別適合用於存儲對象。 Redis 中每一個 hash 能夠存儲 232 - 1 鍵值對(40多億)。
命令 | 說明 |
---|---|
hset | 設置key中字段的值 |
hget | 獲取key中字段的值 |
hmset | 批量設置key中的字段 |
hmget | 批量獲取key中字段的值 |
hdel | 刪除key中指定的字典 |
hsetnx | 設置key中的字段的值,若是字段存在就忽略 |
hvals | 獲取key中全部的字段的值 |
hkeys | 獲取key中的全部的字段 |
hgetall | 獲取key中的全部的字段及值 |
hexists | 判斷key中的字段是否存在 |
hincrby | 將key中的字段增長特定的值 |
hincrbyfloat | 和hincrby相似增長的float類型的數據 |
hlen | 獲取key中的字段的個數 |
hstrlen | 獲取key中某個字段的值得長度 |
列表是簡單的字符串列表,按照插入順序排序。你能夠添加一個元素到列表的頭部(左邊)或者尾部(右邊) 一個列表最多能夠包含 232 - 1 個元素 (4294967295, 每一個列表超過40億個元素)。 | 命令 | 說明 | |--|--| |lpush| 向列表頭部添加一個或多個元素| |lrange| 獲取列表中指定的元素0第一個,-1最後一個| |rpush |向列表尾部添加一個或多個元素| |llen |獲取列表長度| |lset |經過index設置列表的值| |rpop |移除列表最後一個元素,並返回| |lpop |移除列表頭部元素,並返回| |lindex |獲取列表中對應下標的值| |ltrim |截取列表對應的元素| |blpop |lpop的阻塞版| |brpop |rpop的阻塞版| |rpoplpush |移除一個列表的最後一個元素,並將該元素添加到另外一個列表的頭部| |brpoplpush | rpoplpush的阻塞版本|
集合中最大的成員數爲 232 - 1 (4294967295, 每一個集合可存儲40多億個成員) | 命令 |說明 | |--|--| |sadd |添加一個或多個元素到集合中,若是集合中存在該元素則忽略| |scard | 返回集合中的元素的個數| |sismember |判斷集合中是否含有某元素| |smembers |獲取集合中的全部的元素| |srem | 刪除集合中指定的元素| |srandmember | 隨機返回集合中的元素,版本2.6後在命令以後能夠跟一個count。指定隨機返回的元素個數| |spop |和srandmember相似,只是spop會將獲取的元素移除而srandmember不會移除元素| |smove | 將元素從一個集合移動到另外一個集合中| |sdiff |返回兩個集合的差集| |sdiffstore | 和sdiff相似,不一樣的是會將差集結果保存起來| |sinter| 獲取兩個集合的交集| |sinterstore |和sinter相似,不一樣的是將結果保存起來了| |sunion | 獲取兩個集合的並集| |sunionstore | 獲取兩個集合的並集並保存起來|
有序集合和集合同樣也是string類型元素的集合,且不容許重複的成員。 不一樣的是每一個元素都會關聯一個double類型的分數。redis正是經過分數來爲集合中的成員進行從小到大的排序。 有序集合的成員是惟一的,但分數(score)卻能夠重複
命令 | 說明 |
---|---|
zadd | 向有序集合中添加一個或多個 分數/元素對 |
zscore | 獲取有序集合中元素對應的分數 |
zrange | 獲取集合中的元素,若是加上withscores則會連同分數一併返回 |
zrevrange | 和zrange相似,只是將結果倒序了 |
zcard | 返回集合中元素的個數 |
zcount | 統計集合中分數在min和max之間的元素個數 |
zrangebyscore | 能夠根據score範圍查找元素 |
zrank | 獲取元素在集合中的排名,從小到大,最小的是0 |
zrevrank | 獲取元素在集合中的排序,從大到小 |
zincrby | 給元素增長分數,若是不存在就新建立元素,並賦予對應的分數 |
zinterstore | 計算給定的一個或多個有序集的交集並將結果集存儲在新的有序集合 key 中 |
zrem | 從集合中彈出一個元素 |
zlexcount | 計算有序集合中指定字典區間內成員數量 |
zrangebylex | 獲取指定區間的元素,分數必須相同 |