redis - 學習筆記回顧
什麼是redis (C)
reids是一個nosql資料庫,中文:非關係型資料庫
nosql(not noly sql):不僅僅只有資料庫
關係型資料庫:以二維表形式儲存資料
非關係型資料庫:以鍵值對(key,value)儲存資料redis是將資料存放到記憶體中,由於記憶體存取速度快,所以redis被廣泛應用於網際網路專案中,
redis優點:存取速度快,操作具有原子性(保證高併發)
缺點:對持久化支援不夠良好
所以redis一般不作為資料的主資料庫儲存,一般配合傳統的關係型資料庫使用。redis應用領域
分散式鎖
分散式快取
分散式session session共享(不存伺服器端了,直接取出來存到redis中,每回讀取)
儲存部落格或者論壇的留言回覆等
總之是用在資料量大,併發性高的情況下
//分散式:一個業務分拆多個子業務,部署在不同的伺服器上
叢集:同一個業務,部署在多個伺服器上linux配置VMnet8. SecureCRT執行命令下載C++編譯器。將redis壓縮包上傳到lunix。解壓,編譯。執行服務端,改conf改成後端執行,執行客戶端存取,關閉客戶端
啟動:/usr/local/redis/bin 下執行./redis-server & (後臺執行)怎麼用
redis主要就是使用命令來進行操作,java端在程式碼中可以使用Jedis來操作redis伺服器
redis資料型別:- 字串String:
set get del incr(數值+1) incrby(數值+指定值) decr(減) decrby
應用:商品編號,訂單號採用string的遞增數字特性生成 - 列表list:
redis中使用的是雙向迴圈連結串列來實現的,很像棧,可從左或右新增
LPUSH key value… RPUSH key value… 從左或從右新增(像棧)
LRANG key start stop(按索引從start檢視到stop,stop=-1時代表最後一個素)
LPOP key… RPOP key…. 從左或從右彈出元素
LLEN key 獲取列表中元素的個數
應用:商品評論列表,評論資訊。 - 雜湊hash:
一個物件可以又多個string欄位
HSET key field value…. 設定欄位且賦值(可以多個直接跟著寫)
HGET key field 取欄位值(可以多個,同上)
HGETALL key 取欄位及欄位值
HDEL key filed 刪除欄位
應用:一般應用於將redis作為分散式緩衝時,儲存資料庫中的資料物件 - 集合set:
set中資料是無序且不重複的(hash表實現的應該)
SADD key member… 增加元素,可以多個
SREM key member… 刪除元素,可以多個
SMEMBERS key 獲取key這個set的所有元素
SISMEMBERS key member 判斷元素是否在這個set中.返回1在0不在
SDIFF key1 key2 集合1和2做差集運算
SINTER key1 key2 交集運算
SUNION key1 key2 並集運算
應用:共同好友,共同粉絲等(交集) - 有序集合zset:
redis會根據score(自己新增的數值吧)排序。可以用在成績,銷量等需要排序的資料上
ZADD key score member …. 新增元素分數及元素
ZSCORE key member 獲取元素的分數
ZREM key member… 刪除元素
ZRANGE key start stop [withscores] 獲取某個範圍內的元素排名,加withscores就是把分數也獲取了,不影響排名,排名已經排好了
ZREVRANG key start stop [withscores] 從大到小排 - Java自定義物件:
1.雜湊hash ?
2.利用Jedis+序列化工具,將value(物件)序列化為二進位制陣列,儲存到redis中,提取時再反序列化。
利用序列化這樣存取更快,並且記憶體空間佔用極少。
- 字串String:
redis高階特性:
redis的單個command都是原子性的,原因是大部分情況下(不考慮redis 3.x版本的某些情況下使用了多執行緒),redis是單程式單執行緒的,客戶端的命令請求會被排隊加入到一個內部queue中,redis會按順序執行它們並返回。因此多個客戶端併發請求也是沒問題的。
// redis的實現類似與node佇列。expire 設計鍵的生存時間,到期後自動刪除
expire key second(秒)
ttl 檢視鍵的剩餘生存時間
persist 取消生存時間
應用場景: 限時的優惠活動資訊 網站資料快取(對於一些需要定時更新的資料,例如:積分排行榜) 手機驗證碼 限制網站訪客訪問頻率SETNX:設定一個key,不存在就設定,並且返回1,存在就不設定什麼也不做。
- delete :刪除 key
- SETNX,expire,delete一起配合使用,實現分散式鎖。SETNX通過設定key獲取鎖,expire設定鎖的自動過期時間(防止鎖釋放失敗,避免死鎖),delete釋放鎖
- redis事務控制(不提供回滾,可結合watch使用)
redis事務是基於先進先出佇列實現的,multi之後的命令放入佇列中,exec後佇列中的命令一次執行。
它不滿足原子性(會部分不執行)、永續性(因為redis是在記憶體中、即使開啟AOF,也存在命令執行一部分後,系統當機而導致資料丟失的情況,不能恢復)、一致性(狀態轉移一半當機了)。因為redis是單執行緒的,事務也是序列執行,所以滿足隔離性。
multi 事務開始
exec 事物結束
discard 放棄事物
1:語法錯誤:致命的錯誤,事務中的所有命令都不會執行,即插入到佇列時出錯,佇列所有的命令就都不執行了。
2:執行錯誤:不會影響事務中其他命令的執行,即插入佇列都成功,但從佇列出來執行時出錯,其他命令還會執行。 - watch:命令可以監控一個或多個鍵,一旦其中有一個鍵被修改(或刪除),之後的事務就不會執行,監控一直持續到EXEC命令
(事務中的命令是在EXEC之後才執行的,EXEC命令執行完之後被監控的鍵會自動被UNWATCH) - pipeline 管道
redis的pipeline(管道)功能在命令列中沒有,但是redis是支援管道的,在java的客戶端(jedis)中是可以使用的。
在插入更多資料的時候,管道的優勢更加明顯,插入資料更快。
Pipeline pipelined = jedis.pipelined();
for (int i = 0; i < 1000; i++) {
pipelined.set(“bb” + i, i + “bb”);
}
pipelined.sync();
redis持久化方案:(DBA做的事)
rdb: 可以設定經過多長時間儲存到硬碟一次。(redis預設的持久化方案)通過快照完成的
就是一段時間儲存到硬碟一次。
優點:讓redis的資料存取速度保持快(硬碟存取慢)
缺點:伺服器斷電時會丟失部分資料(沒到儲存時間的就丟失了),資料的完整性得不到保證。
aof:實時儲存。
可以通過設定redis.conf 設定實時儲存。
有點:持久化良好,保證資料完整性。
缺點:大大降低了redis 系統的存取速度,效能就沒那麼好了(和關係型資料庫不就一樣了)
主從複製
從redis伺服器用來做備份,實時向主redis傳送命名,詢問其是否出錯,如果得不到迴應其就暫時代替主redis,但它只能做讀取操作,不能做增刪改,要保證主從資料的一致性。從的資料來源:
設定好之後
主傳送RDB檔案給從
從將檔案儲存到磁碟上,然後載入到記憶體恢復
新生成的資料時主把快取的命令轉發給從,從進行操作(這樣傳送資料量比直接發資料小)。
所以從上位不時不能做增刪改,只能讀取。主好了之後還是主。
相關文章
- <react學習筆記(5)>知識點回顧(1)React筆記
- redis學習筆記Redis筆記
- 以太坊學習筆記————4、以太坊發展歷史回顧筆記
- <react學習筆記(8)>生命週期回顧與再認識React筆記
- Redis 學習筆記命令Redis筆記
- 吳恩達機器學習筆記 —— 3 線性迴歸回顧吳恩達機器學習筆記
- redis學習筆記(三)–Redis的功能Redis筆記
- Redis學習筆記(一)——初識RedisRedis筆記
- redis學習筆記1: Redis入門Redis筆記
- Redis學習筆記【01】 - 安裝RedisRedis筆記
- (Redis學習筆記):Redis解決方案Redis筆記
- Redis阻塞(學習筆記七)Redis筆記
- Redis學習筆記(三) 字典Redis筆記
- Redis學習整理筆記02Redis筆記
- 回滾莫隊學習筆記筆記
- Redis 學習筆記(篇七):Redis 持久化Redis筆記持久化
- Redis學習筆記(三)redis 的鍵管理Redis筆記
- 【Redis學習筆記】2018-07-10 Redis指令學習3Redis筆記
- 【Redis學習筆記】2018-07-11 Redis指令學習5Redis筆記
- JavaScript 回顧學習:變數JavaScript變數
- jeesite學習(二)----回顧SpringMVCSpringMVC
- Redis學習筆記(二)——Redis資料型別Redis筆記資料型別
- redis學習筆記2: Redis資料型別Redis筆記資料型別
- redis學習筆記4: 在Java中操作RedisRedis筆記Java
- Redis學習筆記(十八) 叢集(下)Redis筆記
- Redis學習筆記(十三) 複製(下)Redis筆記
- Redis學習筆記(十七) 叢集(上)Redis筆記
- Redis學習筆記(十六) Sentinel(哨兵)(下)Redis筆記
- Java學習筆記:Redis的持久化Java筆記Redis持久化
- 2020-11-17 redis學習筆記Redis筆記
- Redis學習筆記(十) 客戶端Redis筆記客戶端
- Redis學習筆記(十一) 伺服器Redis筆記伺服器
- Redis學習筆記(七) 資料庫Redis筆記資料庫
- Redis學習筆記八:叢集模式Redis筆記模式
- Redis6.x學習筆記(一)Redis筆記
- JavaScript回顧學習:目錄篇JavaScript
- Redis 複習筆記Redis筆記
- 回顧·機器學習/深度學習工程實戰機器學習深度學習