日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

新手向:从不同的角度来详细分析Redis

發布時間:2025/5/22 数据库 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 新手向:从不同的角度来详细分析Redis 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近對華為云分布式緩存產品Redis做了一些研究,于是整理了一些基本的知識拿出來與大家分享,首先跟大家分享的是,如何從不同的角度來詳細使用Redis。

小編將從以下9個角度來進行詳細分析,希望可以幫到大家。

一、網絡模型:

Redis使用單線程的IO復用模型,自己封裝了一個簡單的AeEvent事件處理框架,主要實現了epoll、kqueue和select,對于單純只有IO操作來說,單線程可以將速度優勢發揮到最大,但是Redis也提供了一些簡單的計算功能,比如排序、聚合等,對于這些操作,單線程模型實際會嚴重影響整體吞吐量,CPU計算過程中,整個IO調度都是被阻塞住的。

二、內存管理:

Redis使用現場申請內存的方式來存儲數據,并且很少使用free-list等方式來優化內存分配,會在一定程度上存在內存碎片,Redis跟據存儲命令參數,會把帶過期時間的數據單獨存放在一起,并把它們稱為臨時數據,非臨時數據是永遠不會被剔除的,即便物理內存不夠,導致swap也不會剔除任何非臨時數據(但會嘗試剔除部分臨時數據),這點上Redis更適合作為存儲而不是cache。

三、數據一致性問題:

在一致性問題上,個人感覺Redis沒有memcached實現的好,Memcached提供了cas命令,可以保證多個并發訪問操作同一份數據的一致性問題。 Redis沒有提供cas 命令,并不能保證這點,不過Redis提供了事務的功能,可以保證一串命令的原子性,中間不會被任何操作打斷。

四、支持的KEY類型:

Redis除key/value之外,還支持list,set,sorted set,hash等眾多數據結構,提供了KEYS進行枚舉操作,但不能在線上使用,如果需要枚舉線上數據,Redis提供了工具可以直接掃描其dump文件,枚舉出所有數據,Redis還同時提供了持久化和復制等功能。

五、客戶端支持:

Redis官方提供了豐富的客戶端支持,包括了絕大多數編程語言的客戶端,比如我此次測試就選擇了官方推薦了Java客戶端Jedis.里面提供了豐富的接口、方法使得開發人員無需關系內部的數據分片、讀取數據的路由等,只需簡單的調用即可,非常方便。

六、數據復制:

從2.8開始,Slave會周期性(每秒一次)發起一個Ack確認復制流(replication stream)被處理進度, Redis復制工作原理詳細過程如下:

1. 如果設置了一個Slave,無論是第一次連接還是重連到Master,它都會發出一個SYNC命令;

2. 當Master收到SYNC命令之后,會做兩件事:

a) Master執行BGSAVE:后臺寫數據到磁盤(rdb快照);

b) Master同時將新收到的寫入和修改數據集的命令存入緩沖區(非查詢類);

3. 當Master在后臺把數據保存到快照文件完成之后,Master會把這個快照文件傳送給Slave,而Slave則把內存清空后,加載該文件到內存中;

4. 而Master也會把此前收集到緩沖區中的命令,通過Reids命令協議形式轉發給Slave,Slave執行這些命令,實現和Master的同步;

5. Master/Slave此后會不斷通過異步方式進行命令的同步,達到最終數據的同步一致;

6. 需要注意的是Master和Slave之間一旦發生重連都會引發全量同步操作。但在2.8之后,也可能是部分同步操作。

2.8開始,當Master和Slave之間的連接斷開之后,他們之間可以采用持續復制處理方式代替采用全量同步。

Master端為復制流維護一個內存緩沖區(in-memory backlog),記錄最近發送的復制流命令;同時,Master和Slave之間都維護一個復制偏移量(replication offset)和當前Master服務器ID(Masterrun id)。

當網絡斷開,Slave嘗試重連時:

a. 如果MasterID相同(即仍是斷網前的Master服務器),并且從斷開時到當前時刻的歷史命令依然在Master的內存緩沖區中存在,則Master會將缺失的這段時間的所有命令發送給Slave執行,然后復制工作就可以繼續執行了;

b. 否則,依然需要全量復制操作。

七、讀寫分離:

Redis支持讀寫分離,而且使用簡單,只需在配置文件中把Redis讀服務器和寫服務器進行配置,多個服務器使用逗號分開如下:

八、水平動態擴展:

歷時三年之久,終于等來了期待已由的Redis 3.0。新版本主要是實現了Cluster的功能,增刪集群節點后會自動的進行數據遷移。實現 Redis 集群在線重配置的核心就是將槽從一個節點移動到另一個節點的能力。因為一個哈希槽實際上就是一些鍵的集合, 所以 Redis 集群在重哈希(rehash)時真正要做的,就是將一些鍵從一個節點移動到另一個節點。

九、數據淘汰策略:

Redis 內存數據集大小上升到一定大小的時候,就會施行數據淘汰策略。Redis 提供 6種數據淘汰策略:

volatile-lru:從已設置過期時間的數據集(server.db[i].expires)中挑選最近最少使用的數據淘汰

volatile-ttl:從已設置過期時間的數據集(server.db[i].expires)中挑選將要過期的數據淘汰

volatile-random:從已設置過期時間的數據集(server.db[i].expires)中任意選擇數據淘汰

allkeys-lru:從數據集(server.db[i].dict)中挑選最近最少使用的數據淘汰

allkeys-random:從數據集(server.db[i].dict)中任意選擇數據淘汰? ?

小編寫的都是一些偏新手向的東西,希望各位大咖見了不要笑話我,作為一個菜鳥也希望能夠幫到其他人,畢竟入這一行著實需要不斷學習和總結,如果想進行深入的探討歡迎來華為云社區論壇發帖,這里大咖云集,也可以上華為云幫助中心,里面的資料也是精心編寫的干貨。感謝!

轉載于:https://www.cnblogs.com/husterindg/p/10615963.html

總結

以上是生活随笔為你收集整理的新手向:从不同的角度来详细分析Redis的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。