Redis常用資料型別和事物以及併發
Redis資料型別
基本型別(String int):
如 set key value 、get key 等 所有命令都是按照 key value
keys * 可以將全部資料列出,其中後面的 " * " 表示資料的匹配。
setnx key value 不覆蓋設定,返回0表示失敗(原來這個key已經有值),返回1表示成功。
setex key time value 設定資料儲存的有效時間(time 單位是秒)
ttl key 檢視當前資料的有效時間
flushdb 清空倉庫資料。
基本型別適合使用者進行短期的資料儲存
Hash資料型別
其儲存的資料結構為 "key=value"
舉例:儲存一個使用者的使用者名稱、真實姓名、密碼,
hset user-admin username admin hset user-admin name xiaoming hset user-admin password 123456
取得使用者名稱)hget user-admin username
取得真實姓名hget user-admin name
取得密碼 hget user-admin password
有了Hash之後 Redis的資料型別可以和JAVA中VO匹配的上(都是key-value格式)
hash型別存在的意義不大,因為基本型別做JSON儲存也可以達到hash的效果
List資料型別
List是一個連結串列結構,連結串列結構的時間複雜度是n
舉例:建立一個List並設定若干個內容。lpush testList test1 test2 test3(testList是集合的名字,後面的是集合儲存的資料)
進行指定範圍的連結串列資料輸出(連結串列是不能通過index查詢的) lrange testList 0 1 返回 test3 test2 (棧 先進後出)
lrange testList 0 -1表示輸出全部的內容
可以利用List型別實現訊息佇列或者緩衝的功能,在實際開發之中有很多公司可能不直接使用訊息佇列中介軟體,而直接利用Redis代替
Set 資料型別
可以實現集合的比對處理,列如可以實現資料的交集,並集,插集(比如 微博中 共同關注好友,可能關注等。。。)
舉例 sadd user a b c d e(向集合user中追加五個元素)
列出所有元素 smembers (set集合無序)
刪除某個元素 srem user a
返回兩個集合的差集合 sdiff set1 set2(返回幾個set1和set2的差集)
儲存差集的執行結果到另一個集合 sdiffstore儲存集合key 集合key1 集合key2
該型別支援集合的運算 可用在相似度檢測,好友推薦等
SortedSet集合
該集合算是Set集合的擴充套件,該集合可以儲存一個分數,這個分數的操作就可以作為資料的統計結果出現
追加有序集合資料:zadd 集合key 分數 內容
資料增長:zincrby 集合key 增長分數 內容
根據分數取得指定範圍的資料 zrangebyscore 集合 開始分數 結束分數 withscores
SotedSet主要進行資料的流式分析(利用分數分析資料,比如一個商品瀏覽了多少次)
Redis事物處理
Redis支援事物處理,但是這種事物處理本身是存在有設計缺陷的。
開啟事物:multi
取消事物:discard
提交事物:exec
支援舉例: Multi ; set i =10; discard;因為取消了事物所以 i的值不會被set成10 所以Redis是支援事物的。
缺陷舉例 :Multi ; set i=10; incr name; exec; 因為 name屬性不是int 所以會出現報錯:ERR Value is not an integer。但是 這種情況i=10;會被正確的執行 存到Redis裡面。
Redis事物不完美也可以說不支援事物,因為Redis設計之初是不考慮事物的。
Redis樂觀鎖
Redis樂觀鎖的處理比較簡單 利用watch關鍵字監聽redis的一些鍵即可,不需要增加處理列(也就是平時所說的版本號)
事物1 | 事物2 |
watch id; 進行該資料的監聽 | watch id; |
Multi; | Multi; |
set id 100 | |
set id 200; | exec; |
exec;返回nil,表示本次更新失敗 |
此時由於第二個事物更新了原始資料 id,那麼就表示該原始資料上的一個標記列發生了變化(類似於Mysql的版本號),當第一個事物更新的時候,會返回nil表示本次更新失敗。
Redis主從
Redis主從其實是為了資料備份(不同於MySQL MySQL主從有讀寫分離的功能)。
當資料做出任何處理操作的時候都進行即時的備份,這種設計在Redis裡面叫做主從設計 從伺服器只是做資料備份 除此之外 什麼都不做。常用 一主二從制。
配置(大致說明):
1)主伺服器配置不需要做出任何變化,我不關心你有多少從伺服器
2)編輯redis-->conf下面 redis.conf配置檔案 salveof masterip masterport
3)在從伺服器上設定 masterauth "主伺服器的密碼"
4) ./redis-server redis.conf 啟動Redsi