速度快資料存在記憶體中。
c語言實現,「距離」作業系統越近執行速度越快。
單執行緒,預防了多執行緒可能產生的競爭問題。
redis源**精打細磨。
鍵值對的資料結構儲存
五中鍵值對的形式,許多的應用場景,提高開發效率。
功能多鍵過期
發布訂閱
lua指令碼
事務功能
流水線簡單穩定
原始碼少單執行緒
不需要依賴作業系統的類庫,自己實現了事件處理的先關功能。
穩定到幾乎沒有宕機的情況。
客戶端語言多
提供了tcp通訊協議,很多程式語言可以很方便的接入到redis。
持久化rdb和aof
主從複製
高可用和分布式 快取
訪問快降低後端資料來源的壓力
鍵值過期,靈活控制最大記憶體和記憶體溢位後的淘汰策略。
排行榜系統
利用列表和有序集合的資料結構
計數器應用
利用加1操作
社交網路
redis提供的資料結構更好實現:贊/踩、粉絲、共同好友/喜好、推送、下拉重新整理等。
訊息佇列
冷資料。
資料規模相對比較大的。
檢視所有鍵
keys *
當儲存特別鍵的時候謹慎使用
鍵總數dbsize
鍵是否存在
exists key
存在返回1,不存在返回0。
刪除鍵del key 【鍵名字】
返回刪除鍵的個數,不存在返回0。
支援刪除多個鍵:del a b c
鍵過期expire 【key】【seconds】
ttl 【key】檢視鍵剩餘時間。
返回大於等於0的整數。-1:鍵沒設定過期時間。-2鍵不存在。
鍵的資料型別
type 【key】
鍵不存在返回none
資料型別都有自己的實現編碼,多種實現。redis會在合適的場景選擇合適的內部編碼。
檢視內部編碼命令:object encoding hello
redis設定內部編碼的兩個好處。
改進內部編碼對外的資料結構和命令沒有影響。對使用者基本感知不到。
資料型別的多種實現編碼在不同環境會轉換。例如列表的內部編碼,ziplist比較節省記憶體,但是在列表元素比較多的情況下,效能會有所下降,這時redis會根據配置選項列表型別的內部實現轉換為linkdlist。
字串常用命令
內部編碼3種
int:8個位元組的長整型。
embstr:小於等於39個位元組的字串。
raw:大於39個位元組的字串。
應用場景
快取功能(常用)
計數——利用自增1。
共享session
限速——一分鐘不超過5次,利用鍵過期和自增/自減。
value值最大為512mb
雜湊hash——value=,…}
常用命令
內部編碼,兩種
ziplist(壓縮列表):雜湊型別的元素個數小於hash-max-zoplist-entries配置(預設512個)。所有值都小於hash-max-ziplist-value配置(預設64位元組)。ziplist使用更加緊湊的結構實現多個元素的連續儲存,所以在節省記憶體方面比hashtable更加優秀。
hashtable(雜湊表):當ziplist無法滿足雜湊的條件時,元素多於512個或value大與64位元組時ziplist的讀寫速度效率會下降。redis會轉換成hashtable實現,讀寫快。
應用場景
雜湊來儲存關係型資料表記錄。
需要注意的是雜湊型別是稀疏的,而關係型資料庫是完全結構化的。關係型資料庫可以做複雜的關係查詢,redis很難。
三種實現的優缺點
原聲字串型別:每個屬性乙個鍵
set user:1:name tome
set user:1:age 23
set user:1:city beijing
優點:簡單直觀。
缺點:占用過多的鍵,記憶體佔用量較大,同時使用者資訊內舉行比較差,一般不會在生產環境使用。
序列化字串型別:將使用者資訊序列化用乙個鍵儲存。
set user:1: serialize(userinfo)
優點:簡化程式設計,如果合理的使用序列化可以提高記憶體的使用效率
缺點:序列化和反序列化有一定的開銷,同時每次更新屬性都需要把全部資料取出進行反序列化,更新後再序列化到redis中。
雜湊型別:每個使用者屬性使用一對field-value,但是只用乙個鍵儲存。
hmset user:1: name tom age 23 city beijing
優點:簡單直觀如果使用合理可以減少記憶體空間的使用
列表list——列表最多儲存2的23次方,減乙個元素。列表在兩端進行插入和彈出。
特點:1、列表中的元素是有序的,通過索引小標獲取某個元素和某個範圍的元素列表。2、元素可重複。
常用命令
內部編碼
ziplist(同上)
linkedlist(鍊錶):當ziplist無法滿足列表條件時,redis會使用linkedlist作為列表的內部實現。
應用場景
訊息佇列
利用redis的lpush+brpop命令實現阻塞佇列,多客戶端使用brpop命令阻塞式的「搶」列表兒,多客戶端保證了消費的負載均衡和高可用行。
文章列表
利用列表的有序性,不僅有序,同時支援索引範圍獲取元素。
其餘lpush+lpop = stack(棧)
lpush+rpop = queue(佇列)
lpush+brpop = massage queue(訊息佇列)
集合set——儲存多個元素,不予許重複並且元素無序。乙個元素最多可儲存2的32次方,減乙個元素。支援多個集合的交集、並集、差集,合理地使用好集合型別解決很多實際問題。
常用命令
集合內新增元素
sadd 【key】【 element element…】
返回結果為新增成功的個數。
刪除元素
srem 【key】【element element…】
返回刪除成功的個數。
計算元素個數
scard 【key】
判斷元素是否在集合中
sismemeber 【key】【element】
element在集合中返回1,反而為0。
隨機從集合返回指定個數元素
srandmember 【key】[count]
count是可選引數,不寫預設為1
從集合隨機彈出元素
spop 【key】
redis3.2版本開始支援spop[count]引數。
與srandmember的區別,spop彈出後在集合中刪除了。
獲取所有元素
smembers 【key】
當元素比較多時可能會發生阻塞
集合間操作多個集合的交集
sadd user:1:follow it music his sports
sadd user:2:follow it news ent sports
交集:sinter 【key1 key2】
並集sunion 【key1 key2】
差集sdiff 【key1 key2】
返回key1的字元
交並差的結果儲存
sinterstore key1_2 【key1 key2】
sunionstore key1_2 【key1 key2】
sdiffstore key1_2 【key1 key2】
將key1和key2操作後的記過儲存在key1_2中。
內部編碼兩種
intset整數集合:集合中的元素都為整數並且個數小於set-max-instet-entries配置(512個),為了減少使用記憶體的使用。
hashtable雜湊表:集合無法滿足intset時,使用hashtable作為內部實現。
應用場景
有序集合
Redis 五種資料型別
一 前言 上篇部落格已經對redis的一些基本知識做了一些簡介,這篇部落格,將簡單介紹一些redis的五種資料型別。分別為string 字串 hash 雜湊 list 鍊錶 set 集合 zset 有序集合 對這些型別可以執行很多原子性的操作 比如向乙個string型別的value後面追加字串 向l...
Redis 五種資料型別
目錄 redis共有strings hashs lists sets sorted sets五種資料型別,可以說已經比較豐富了。下面只對這幾種資料型別的資料結構與用途做簡要介紹。至於每種資料型別的操作api,這裡只簡單一提,不再一一詳細介紹,有需要的使用者可以google即可。string是最簡單的...
Redis 五種資料型別
redis支援五種資料型別 string 字串 hash 雜湊 list 列表 set 集合 及zset sorted set 有序集合 資料型別一 字串 0.1 6379 set name hubotao2 ok127.0 0.1 6379 get name hubotao2 資料型別二 hash...