Redis學習三:Redis數據類型
一、Redis的五大數據類型
1.String(字符串)
string是redis最基本的類型,你可以理解成與Memcached一模一樣的類型,一個key對應一個value。
string類型是二進制安全的。意思是redis的string可以包含任何數據。比如jpg圖片或者序列化的對象 。
string類型是Redis最基本的數據類型,一個redis中字符串value最多可以是512M
2.Hash(哈希,類似java裏的Map)
Redis hash 是一個鍵值對集合。
Redis hash是一個string類型的field和value的映射表,hash特別適合用於存儲對象。
類似Java裏面的Map<String,Object>
3.List(列表)
Redis 列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素導列表的頭部(左邊)或者尾部(右邊)。
它的底層實際是個鏈表
4.Set(集合)
Redis的Set是string類型的無序集合。它是通過HashTable實現實現的,
5.Zset(sorted set:有序集合)
zset(sorted set:有序集合)
Redis zset 和 set 一樣也是string類型元素的集合,且不允許重復的成員。
不同的是每個元素都會關聯一個double類型的分數。
redis正是通過分數來為集合中的成員進行從小到大的排序。zset的成員是唯一的,但分數(score)卻可以重復。
哪裏去獲得redis常見數據類型操作命令:Http://redisdoc.com/
二、Redis 鍵(key)
1.常用命令:
2.案例
keys *
exists key的名字,判斷某個key是否存在
move key db --->當前庫就沒有了,被移除了
expire key 秒鐘:為給定的key設置過期時間
ttl key 查看還有多少秒過期,-1表示永不過期,-2表示已過期
type key 查看你的key是什麽類型
三、Redis字符串(String)
單值Value
1.常用
2.案例
set/get/del/append/strlen
Incr/decr/incrby/decrby,一定要是數字才能進行加減
getrange/setrange
getrange:獲取指定區間範圍內的值,類似between......and的關系
從零到負一表示全部
setrange設置指定區間範圍內的值,格式是setrange key值 具體值
setex(set with expire)鍵秒值/setnx(set if not exist)
setex:設置帶過期時間的key,動態設置。
setex 鍵 秒值 真實值
setnx:只有在 key 不存在時設置 key 的值。
1 則為成功,0 則為不成功
mset/mget/msetnx
mset:同時設置一個或多個 key-value 對。
mget:獲取所有(一個或多個)給定 key 的值。
msetnx:同時設置一個或多個 key-value 對,當且僅當所有給定 key 都不存在。
getset(先get再set)
getset:將給定 key 的值設為 value ,並返回 key 的舊值(old value)。
簡單一句話,先get然後立即set
四、Redis列表(List)
單值多value
1.常用
2.案例
lpush/rpush/lrange
lpop/rpop
lindex,按照索引下標獲得元素(從上到下)
通過索引獲取列表中的元素 lindex key index
llen
lrem key 刪N個value
* 從left往right刪除2個值等於v1的元素,返回的值為實際刪除的數量
* LREM list3 0 值,表示刪除全部給定的值。零個就是全部值
ltrim key 開始index 結束index,截取指定範圍的值後再賦值給key
ltrim:截取指定索引區間的元素,格式是ltrim list的key 起始索引 結束索引
rpoplpush 源列表 目的列表
移除列表的最後一個元素,並將該元素添加到另一個列表並返回
lset key index value
linsert key before/after 值1 值2
在list某個已有值的前後再添加具體值
性能總結
它是一個字符串鏈表,left、right都可以插入添加;
如果鍵不存在,創建新的鏈表;
如果鍵已存在,新增內容;
如果值全移除,對應的鍵也就消失了。
鏈表的操作無論是頭和尾效率都極高,但假如是對中間元素進行操作,效率就很慘淡了。
五、Redis集合(Set)
1.常用
單值多value
2.案例
sadd/smembers/sismember
scard,獲取集合裏面的元素個數
srem key value 刪除集合中元素
srandmember key 某個整數(隨機出幾個數)
* 從set集合裏面隨機取出2個
* 如果超過最大數量就全部取出,
* 如果寫的值是負數,比如-3 ,表示需要取出3個,但是可能會有重復值。
spop key 隨機出棧
smove key1 key2 在key1裏某個值 作用是將key1裏的某個值賦給key2
數學集合類
差集:sdiff
在第一個set裏面而不在後面任何一個set裏面的項
交集:sinter
並集:sunion
六、Redis哈希(Hash) 【重點】
KV模式不變,但V是一個鍵值對
1.常用
2.案例
hset/hget/hmset/hmget/hgetall/hdel
hlen
hexists key 在key裏面的某個值的key
hkeys/hvals
hincrby/hincrbyfloat
hsetnx
不存在賦值,存在了無效。
七、Redis有序集合Zset(sorted set)
在set基礎上,加一個score值。
之前set是k1 v1 v2 v3,
現在zset是k1 score1 v1 score2 v2
1.常用
2.案例
zadd/zrange
zrangebyscore key 開始score 結束score
zrem key 某score下對應的value值,作用是刪除元素
刪除元素,格式是zrem zset的key 項的值,項的值可以是多個
zrem key score某個對應值,可以是多個值
zcard/zcount key score區間/zrank key values值,作用是獲得下標值/zscore key 對應值,獲得分數
zcard :獲取集合中元素個數
zcount :獲取分數區間內元素個數,zcount key 開始分數區間 結束分數區間
zrank: 獲取value在zset中的下標位置
zscore:按照值獲得對應的分數
zrevrank key values值,作用是逆序獲得下標值
正序、逆序獲得下標索引值
zrevrange
zrevrangebyscore key 結束score 開始score
zrevrangebyscore zset1 90 60 withscores 分數是反著來的
參考資料:
《尚矽谷redis視頻學習》
Redis學習三:Redis數據類型