Redis目前支持5種數(shù)據(jù)類型,分別是:
?
?
String(字符串)
List(列表)
Hash(字典)
Set(集合)
Sorted Set(有序集合)
下面就分別介紹這五種數(shù)據(jù)類型及其相應(yīng)的操作命令。
?
1. String(字符串)
String是簡單的 key-value 鍵值對,value 不僅可以是 String,也可以是數(shù)字。String在redis內(nèi)部存儲默認就是一個字符串,被redisObject所引用,當(dāng)遇到incr,decr等操作時會轉(zhuǎn)成數(shù)值型進行計算,此時redisObject的encoding字段為int。
?
String在redis內(nèi)部存儲默認就是一個字符串,被redisObject所引用,當(dāng)遇到incr,decr等操作時會轉(zhuǎn)成數(shù)值型進行計算,此時redisObject的encoding字段為int。
?
應(yīng)用場景
String是最常用的一種數(shù)據(jù)類型,普通的key/value存儲都可以歸為此類,這里就不所做解釋了。
?
相關(guān)命令
SET key value 設(shè)置key=value
GET key 或者鍵key對應(yīng)的值
GETRANGE key start end 得到字符串的子字符串存放在一個鍵
GETSET key value 設(shè)置鍵的字符串值,并返回舊值
GETBIT key offset 返回存儲在鍵位值的字符串值的偏移
MGET key1 [key2..] 得到所有的給定鍵的值
SETBIT key offset value 設(shè)置或清除該位在存儲在鍵的字符串值偏移
SETEX key seconds value 鍵到期時設(shè)置值
SETNX key value 設(shè)置鍵的值,只有當(dāng)該鍵不存在
SETRANGE key offset value 覆蓋字符串的一部分從指定鍵的偏移
STRLEN key 得到存儲在鍵的值的長度
MSET key value [key value...] 設(shè)置多個鍵和多個值
MSETNX key value [key value...] 設(shè)置多個鍵多個值,只有在當(dāng)沒有按鍵的存在時
PSETEX key milliseconds value 設(shè)置鍵的毫秒值和到期時間
INCR key 增加鍵的整數(shù)值一次
INCRBY key increment 由給定的數(shù)量遞增鍵的整數(shù)值
INCRBYFLOAT key increment 由給定的數(shù)量遞增鍵的浮點值
DECR key 遞減鍵一次的整數(shù)值
DECRBY key decrement 由給定數(shù)目遞減鍵的整數(shù)值
APPEND key value 追加值到一個鍵
其中用于操作管理鍵的命令有:
?
DEL key 如果存在刪除鍵
DUMP key 返回存儲在指定鍵的值的序列化版本
EXISTS key 此命令檢查該鍵是否存在
EXPIRE key seconds 指定鍵的過期時間
EXPIREAT key timestamp 指定的鍵過期時間。在這里,時間是在Unix時間戳格式
PEXPIRE key milliseconds 設(shè)置鍵以毫秒為單位到期
PEXPIREAT key milliseconds-timestamp 設(shè)置鍵在Unix時間戳指定為毫秒到期
KEYS pattern 查找與指定模式匹配的所有鍵
MOVE key db 移動鍵到另一個數(shù)據(jù)庫
PERSIST key 移除過期的鍵
PTTL key 以毫秒為單位獲取剩余時間的到期鍵。
TTL key 獲取鍵到期的剩余時間。
RANDOMKEY 從Redis返回隨機鍵
RENAME key newkey 更改鍵的名稱
RENAMENX key newkey 重命名鍵,如果新的鍵不存在
TYPE key 返回存儲在鍵的數(shù)據(jù)類型的值。
使用示例文章來源:http://www.zghlxwxcb.cn/news/detail-604886.html
redis 127.0.0.1:6379> set baidu http://www.baidu
OK
redis 127.0.0.1:6379> append baidu .com
(integer) 20
redis 127.0.0.1:6379> get baidu
"http://www.baidu.com"
redis 127.0.0.1:6379> set visitors 0
OK
redis 127.0.0.1:6379> incr visitors
(integer) 1
redis 127.0.0.1:6379> incr visitors
(integer) 2
redis 127.0.0.1:6379> get visitors
"2"
redis 127.0.0.1:6379> incrby visitors 100
(integer) 102
redis 127.0.0.1:6379> get visitors
"102"
redis 127.0.0.1:6379> type baidu
string
redis 127.0.0.1:6379> type visitors
string
redis 127.0.0.1:6379> ttl baidu
(integer) -1
redis 127.0.0.1:6379> rename baidu baidu-site
OK
redis 127.0.0.1:6379> get baidu
(nil)
redis 127.0.0.1:6379> get baidu-site
"http://www.baidu.com"
2. List(列表)
Redis列表是簡單的字符串列表,可以類比到C++中的std::list,簡單的說就是一個鏈表或者說是一個隊列??梢詮念^部或尾部向Redis列表添加元素。列表的最大長度為2^32 - 1,也即每個列表支持超過40億個元素。
?
Redis list的實現(xiàn)為一個雙向鏈表,即可以支持反向查找和遍歷,更方便操作,不過帶來了部分額外的內(nèi)存開銷,Redis內(nèi)部的很多實現(xiàn),包括發(fā)送緩沖隊列等也都是用的這個數(shù)據(jù)結(jié)構(gòu)。
?
應(yīng)用場景
Redis list的應(yīng)用場景非常多,也是Redis最重要的數(shù)據(jù)結(jié)構(gòu)之一,比如twitter的關(guān)注列表、粉絲列表等都可以用Redis的list結(jié)構(gòu)來實現(xiàn),再比如有的應(yīng)用使用Redis的list類型實現(xiàn)一個簡單的輕量級消息隊列,生產(chǎn)者push,消費者pop/bpop。
?
相關(guān)命令
BLPOP
BLPOP key1 [key2 ] timeout 取出并獲取列表中的第一個元素,或阻塞,直到有可用
BRPOP
BRPOP key1 [key2 ] timeout 取出并獲取列表中的最后一個元素,或阻塞,直到有可用
BRPOPLPUSH
BRPOPLPUSH source destination timeout 從列表中彈出一個值,它推到另一個列表并返回它;或阻塞,直到有可用
LINDEX
LINDEX key index 從一個列表其索引獲取對應(yīng)的元素
LINSERT
LINSERT key BEFORE|AFTER pivot value 在列表中的其他元素之后或之前插入一個元素
LLEN
LLEN key 獲取列表的長度
LPOP
LPOP key 獲取并取出列表中的第一個元素
LPUSH
LPUSH key value1 [value2] 在前面加上一個或多個值的列表
LPUSHX
LPUSHX key value 在前面加上一個值列表,僅當(dāng)列表中存在
LRANGE
LRANGE key start stop 從一個列表獲取各種元素
LREM
LREM key count value 從列表中刪除元素
LSET
LSET key index value 在列表中的索引設(shè)置一個元素的值
LTRIM
LTRIM key start stop 修剪列表到指定的范圍內(nèi)
RPOP
RPOP key 取出并獲取列表中的最后一個元素
RPOPLPUSH
RPOPLPUSH source destination 刪除最后一個元素的列表,將其附加到另一個列表并返回它
RPUSH
RPUSH key value1 [value2] 添加一個或多個值到列表
RPUSHX
RPUSHX key value 添加一個值列表,僅當(dāng)列表中存在
使用示例
redis 127.0.0.1:6379> lpush list1 redis
(integer) 1
redis 127.0.0.1:6379> lpush list1 hello
(integer) 2
redis 127.0.0.1:6379> rpush list1 world
(integer) 3
redis 127.0.0.1:6379> llen list1
(integer) 3
redis 127.0.0.1:6379> lrange list1 0 3
1) "hello"
2) "redis"
3) "world"
redis 127.0.0.1:6379> lpop list1
"hello"
redis 127.0.0.1:6379> rpop list1
"world"
redis 127.0.0.1:6379> lrange list1 0 3
1) "redis"
3. Hash(字典,哈希表)
類似C#中的dict類型或者C++中的hash_map類型。
?
Redis Hash對應(yīng)Value內(nèi)部實際就是一個HashMap,實際這里會有2種不同實現(xiàn),這個Hash的成員比較少時Redis為了節(jié)省內(nèi)存會采用類似一維數(shù)組的方式來緊湊存儲,而不會采用真正的HashMap結(jié)構(gòu),對應(yīng)的value redisObject的encoding為zipmap,當(dāng)成員數(shù)量增大時會自動轉(zhuǎn)成真正的HashMap,此時encoding為ht。
?
應(yīng)用場景
假設(shè)有多個用戶及對應(yīng)的用戶信息,可以用來存儲以用戶ID為key,將用戶信息序列化為比如json格式做為value進行保存。
?
相關(guān)命令
HDEL
HDEL key field[field...] 刪除對象的一個或幾個屬性域,不存在的屬性將被忽略
HEXISTS
HEXISTS key field 查看對象是否存在該屬性域
HGET
HGET key field 獲取對象中該field屬性域的值
HGETALL
HGETALL key 獲取對象的所有屬性域和值
HINCRBY
HINCRBY key field value 將該對象中指定域的值增加給定的value,原子自增操作,只能是integer的屬性值可以使用
HINCRBYFLOAT
HINCRBYFLOAT key field increment 將該對象中指定域的值增加給定的浮點數(shù)
HKEYS
HKEYS key 獲取對象的所有屬性字段
HVALS
HVALS key 獲取對象的所有屬性值
HLEN
HLEN key 獲取對象的所有屬性字段的總數(shù)
HMGET
HMGET key field[field...] 獲取對象的一個或多個指定字段的值
HSET
HSET key field value 設(shè)置對象指定字段的值
HMSET
HMSET key field value [field value ...] 同時設(shè)置對象中一個或多個字段的值
HSETNX
HSETNX key field value 只在對象不存在指定的字段時才設(shè)置字段的值
HSTRLEN
HSTRLEN key field 返回對象指定field的value的字符串長度,如果該對象或者field不存在,返回0.
HSCAN
HSCAN key cursor [MATCH pattern] [COUNT count] 類似SCAN命令
使用示例
127.0.0.1:637文章來源地址http://www.zghlxwxcb.cn/news/detail-604886.html
到了這里,關(guān)于Redis常用數(shù)據(jù)類型和使用場景的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!