Redis的各種用途以及使用場景


一、為什么使用
1. 解決應用服務器的cpu和內存壓力
2. 減少io的讀操作,減輕io的壓力
3.關系型數據庫的擴展性不強,難以改變表結構

二、優點
1.nosql數據庫沒有關聯關系,數據結構簡單,拓展表比較容易
2.nosql讀取速度快,對較大數據處理快

三、適用場景
1.    數據高並發的讀寫
2.    海量數據的讀寫
3.    對擴展性要求高的數據

四、不適場景
1.    需要事務支持(非關系型數據庫)
2.    基於sql結構化查詢儲存,關系復雜

五、Redis結構
Redis是一個開源的key—value型數據庫,支持string、list、set、zset和hash類型數據。對這些數據的操作都是原子性的,redus為了保證效率會定期持久化數據。

六、使用場景
1.    配合關系型數據庫做高速緩存 ,緩存高頻次訪問的數據,降低數據庫io, 分布式架構,做session共享
2.    可以持久化特定數據。利用zset類型可以存儲排行榜 利用list的自然時間排序存儲最新n個數據

七、Linux下redis
1.redis目錄:usr/local/bin
2.linux下redis常用命令:
redis-benchmark:性能測試工具
redis-server:啟動redis服務器
redis-cli:啟動redis客戶端,操作入口

八、Redis基礎知識
1.    端口:6379
2.    默認16個數據庫,下標從0開始
3.    單線程:redis是單線程+io多路復用:檢查文件描述的就緒狀態 ,Memchached:多線程+鎖

1.    redis數據類型:String set list hash zset

九、Redis命令
1.    key操作

String類型:String是二進制安全的,可以包含任何數據源,最大512m

String批量處理:

1.    List:鏈表
特點:單鍵多值
Redis列表是簡單的字符串列表,從左或者從右插入
底層是雙向鏈表,對兩端的操作性能很高,通過下標查詢性能很低

Set:類似list的無序集合,保證列表中不會有重復數據,底層是一個value為null的hash表

hash:鍵值對集合,類似map<String,Object>

zset:與set集合非常相似,每個成員都關聯了score,可以用來排序

十、redis持久化
1.    兩種方式:rdb(redis database)和aof(append of file)
2.    RDB:在指定時間間隔內,將內存中的數據作為一個快照文件(snapshot)寫入到磁盤,讀取的時候也是直接讀取snapshot文件到內存中
①持久化過程:redis單獨創建(fork)一個進程來持久化,會先將數據寫入臨時文件中,待上次持久化結束后,會將該臨時文件替換上次持久化文件,比aof高效,但是最后一次數據可能會丟失
②Fork:在linux中,fork()會產生一個跟主進程一樣的子進程,出於效率考慮,主進程和子進程會公用一段物理內存,當發生改變的時候,才會把主進程“”寫時復制”一份給子進程
③Redis備份的文件:在redis.conf中設置,dbfilename默認為:dump.rdb
④ Rdb保存策略:
1.    900s 1 file change
2.    300s 10file change
3.    60s 10000file change

⑤Rdb的備份:       
1.    config get dir 得到備份的文件夾
2.    復制備份文件
   
⑥Rdb恢復:
1.    關閉redis
2.    將備份文件復制到工作目錄下
3.    啟動redis,自動加載
5.

1.    AOF : 以日志形式記錄每個寫操作,啟動時通過日志恢復操作 , 開啟AOF:默認不開啟,進入redis.conf找到appendonly yes打開
2.    修復AOF:redis-check-aof –fix appendonly.aof
3.    同步頻率:每秒記錄一次,如果宕機該秒記可能失效
4.    Rewrite:bgrewriteaof 因為日志是追加方式,文件會越來越大,當超過了設置的閾值時,日志文件會壓縮,保留僅可以恢復的日志

RDB和AOF對比 1.    節省磁盤空間 2恢復速度快

ROD缺點:
1.      數據太大時,比較消耗性能
2.    一段時間保存一次快照,宕機時最后一次可能沒有保存

AOF優點:
1.備份機制更加穩健
2.可讀的日志文件,通過aof恢復更加穩健,可以處理失誤

AOF缺點:
1.比RDB更占磁盤
2.備份速度較慢
3.iii每次都同步日志,有性能壓力

RDB和AOF哪個好
1.    官方推薦都啟用
2.    對數據不敏感,單獨用RDB
3.    不建議單獨使用AOF
4.    若作為純緩存使用,可以都不開啟

十一、Redis事務:輸入multi,輸入的命令都會依次進入到隊列中,但不會執行,直到輸入exec,redis會將之前命令隊列中的命令依次執行,通過discard可以放棄組隊。
1. 主要作用:序列化操作,串聯多個命令防止別的命令插隊
2. 悲觀鎖:每次拿到數據的時候都會上鎖,或者等待別人處理完再去拿鎖,傳統的關系型數據庫里邊很多用到了這種鎖機制,比如行鎖、表鎖、讀鎖、寫鎖
3. 樂觀鎖:每次拿數據的時候總認為別人不會修改數據,所以不會上鎖。但是更新的時候回去判斷別人有沒有更改數據,使用版本號機制。樂觀鎖適用於多讀的應用類型,可以提高吞吐量。
4. Redis使用樂觀鎖:redis就是利用check-and-set機制實現事務

5.三大特性: 1.單獨的隔離操作:事務中的所有命令都會序列化,按順序執行。不會被其他客戶端打斷
2.沒有隔離級別概念:隊列中的命令沒有提交之前不會被執行,事務外不能查看事務內的更新
3.不能保證原子性:跳過錯誤,依舊執行,沒有回滾

十二、Redis訂閱/發布
是進程中的一種消息通信模式,發送者pub發送消息,訂閱者sub接收消息

十三、Redis主從復制
1.   是什么:主從復制就是主機數據更新后根據配置和策略,自動同步到備份機的master/slaver機制,master寫為主,slave讀為主
2.用處:
1. 讀寫分離,性能拓展。
2. 容災快速恢復

3.  配置服務器(配從不配主):
1.    拷貝多個redis.conf文件
2.    開啟daemonize yes
3.    Pid文件名字
4.    指定端口
5.    Log文件名字
6.    Dump.rdb名字
7.    Appendonly 關掉或者換名字

十四、Jedis
1.   所需jar包:

1.   common-pool-1.6jar包
2.   jedis-2.1

  1. 獲取jedis對象:Jedis jedis = new Jedis(“ip” ,端口號);

十五、集群分布:
實現對redis的水平拓展,啟動n’的redis節點,將整個數據分布在這n個節點中

配置conf文件:
1.    拷貝多個redis.conf文件
2.    開啟daemonize yes
3.    Pid文件名字
4.    指定端口
5.    Log文件名字
6.    Dump.rdb名字
7.    Appendonly 關掉或者換名字

配置cluster文件:

  1. cluster-enable yes 打開集群模式
  2. cluster-config-file xxx.conf 設置生成的節點配置文件名
  3. cluster-node-timeout 15000設置節點失聯時間,超多該時間(毫秒),集群自動進入主從切換


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM