redis五種數據結構詳解

5.相關介紹和命令

5. redis是單線程+多路io復用技術

	多路復用是指使用一個線程來檢查多個文件描述符的就緒狀態,比如調用select和poll函數,傳入多個文件毛舒服,如果有一個文件描述符就緒,則返回,否則阻塞到超時。得到就緒狀態後進行真正的操作可以在用一個線程里執行,也可以啟動線程執行(比如使用線程池)
	串行 vs 多線程+鎖 vs 單線程+多路io復用(redis)

redis底層實現

5.2 redis 健(key)

keys * 才看看當前庫所有的key
0

exists key的名稱 1表示在 0表示不存在

type key key的類型
del key 刪除 key
expeire key 設置過期時間

ttl key 查看還有多久過期 -1 永不過期 -2過期

select 數字 表示切換庫 select 1 切換到1號庫
dbsize 查看當前數據庫的key的數量

flushdb 清空當前庫

flushall 清空所有庫

5.2常用數據類型操作 string

string字符串是redis的最基本的啥類型,一個key對應一個value ,string類型是二進制安全的,意味着redis的string可以包含任何數據,比如jpg 圖片或者序列化對象

基本命令:
set命令:
set k1 v100 為k1設置值為v100
get k1 查詢k1的值
append k1 abc k1的值為v100abc
strlen 獲取值的長途
setnx 只有在key不存在的時候,才能成功 setnx k1 v1 返回 0 為不成功 為1 表示成功
incr 將key中存儲的數字值增1
decr 將key中存儲的數字值減1
** 注意redis中是原子操作:因為redis是單線程+多路io復用**

5.3思考 java中的 i++是否為原子操作

下一波命令:
mset:設置多個key value
mget:設置多個value
msetnx: 任何一個存在,則所有都失敗
getrange:獲取指定大小的範圍的值
setrange 在指定的範圍設置值

5.3redis列表

單鍵多值
redis列表是簡單的字符串列表,按照插入順序飄絮。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊),它的底層為一個雙向列表,
常用命令:
lpush:左邊添加value值
rpush: 右邊添加value值
lrange: 從左邊開始取(到範圍為止)
lpop/rpop 從左/右吐出一個值。值在健在,值光健亡
lrange 獲取指定範圍的值
lindex 按照索引下表獲取元素
llen 獲取列表長度
linsert before 的後面插入插入值
lset 將列表key下表為index的值替換為value

5.4 集合 set

set和list差不多,主要是會自動排重,而且數無序的。redis的set是string類型的無序集合,他底層其實是一個value為null的hash表,所以添加、刪除、查找的複雜度都是0(1)。
常用命令:
sadd:將一個或多個元素加入到集合可以在指那個,已經存在的member元素將被忽略
smembers:取出所以集合的值
sismember:是否含有該值
scard:返回該集合的元素個數
srem 刪除集合中的某個元素
spop:隨機從該集合吐出一個值
srandmember:隨機從該集合中取出n個值,不會從改集合中刪除。
smove:把集合中的某一個值從一個集合移動到另一個集合
**sinter 返回兩個集合的交集元素
**sunion;返回兩個集合的並集元素 共同好友功能
**sdiff:返回兩個集合的差集元素

5.4redis-hash類型

redis hash 是一種鍵值對的類型
redis hash 是一個string類型的field和value的映射表,hash特別適合用於存儲對象。,類似於java中的Map<String,Object>

命令:
hset 給集合中的鍵賦值
hget 獲取某個filed的值
hmset 批量設置多個filed值
hexists:判斷是否存在這個字
hkeys:查詢所有的filed值
hvals:查詢所有的value
hincrby:加一
hsexnx 加數據的

5.5 zset數據結構

redis 有序集合zset與普通的集合set非相似,是一個沒有重複的有序集合
底層結構:
命令:
zset的兩種實現方式
ziplist(壓縮鏈表):滿足以下兩個條件的時候
元素數量少於128的時候
每個元素的長度小於64位元組
skiplist(跳躍鏈表):不滿足上述兩個條件就會使用跳錶,具體來說是組合了map和skiplist
map用來存儲member到score的映射,這樣就可以在O(1)時間內找到member對應的分數
skiplist按從小到大的順序存儲分數
skiplist每個元素的值都是[score,value]對

zdd:添加內容(一個或者多個)
zrange:返回有序集key中,下標在之間的元素
zrangbyscore :取指定區域的方法
zrevrangbyscore:與上述的排序方式相反
zincrby: 為score值進行增加操作
zrem:刪除某個 指定的元素
zcount:統計功能

Tags: