您好,登錄后才能下訂單哦!
內容要點:
一、Redis 簡介:
二、安裝部署 Redis:
三、Redis 配置文件:
四、Redis 數據庫常用命令:
五、Redis 持久化:
六、Redis 性能管理:
補充:
一、關系數據庫(SQL)和非關系數據庫(NoSQL)簡要分析:
二、Redis 和 Memcache 的比較
一、Redis 簡介:
Redis 基于內存運行并支持持久化;
采用 key-value (鍵值對) 的存儲形式;
優點:
具有極高的數據讀寫速度;
支持豐富的數據類型;
支持數據的持久化;
原子性;
支持數據備份
二、安裝部署 Redis:
(1)安裝 redis:
安裝包:redis-5.0.7.tar.gz
系統:Linux
操作步驟總覽:
第一步:通過遠程掛載的辦法將 windows上的安裝包下載到 Linux本地。
第二步:安裝編譯工具
?yum?install?gcc?gcc-c++?make?-y
第三步:解壓
tar?zxvf?redis-5.0.7.tar.gz?-C?/opt/
第四步:安裝
cd?redis-5.0.7/ make make?PREFIX=/usr/local/redis?install
第五步:創建軟連接
ln?-s?/usr/local/redis/bin/*?/usr/local/bin/
第五步:啟動安裝腳本,查看端口狀態
cd??/redis-5.0.7/utils/ ./install_server.sh??//啟動腳本,注意:這步一路回車到底就行了 netstat?-natp?|?grep?6379
除此之外,還可以用 redis_6379 控制其開啟關閉:
/etc/init.d/redis_6379?stop???????//關閉 /etc/init.d/redis_6379?start??????//開啟 /etc/init.d/redis_6379?restart????//重啟
(2)redis-cli 遠程連接:
1、先修改配置文件,添加主機的IP地址
vim?/etc/redis/6379.conf bind?127.0.0.1?192.168.220.131 //添加主機的IP地址
2、重啟服務
3、遠程連接
redis-cli?-h?192.168.220.131?-p?6379 //-h:指定主機IP地址,-p:指定端口
三、Redis 配置文件:
配置參數 vim?/etc/redis/6379.conf bind:監聽的主機地址 port:端口 daemonize?yes:啟用守護進程 pidfile:指定PID文件 loglevel?notice:日志級別 logfile:指定日志文件
四、Redis 數據庫常用命令:
(一)常用命令:
(1)redis-cli 命令行工具:
1、連接本地數據庫:
/usr/local/redis/bin/redis-cli
2、連接遠程數據庫:
redis-cli?-h?192.168.220.131?-p?6379
3、存放數據(set):
4、獲取數據(get):
(2)key 相關命令:
1、keys :獲取符合規則的鍵值列表
>keys?*????????//查看當前數據庫中所有的鍵 >keys?v*???????//查看當前數據庫中以v開頭的鍵 >keys?v????????//查看當前數據庫中以v開頭后面包含任意一個字符的鍵 >keys?v????????//查看當前數據庫中以v開頭后面包含任意二個字符的鍵
2、exists:判斷鍵值是否存在
3、del :刪除當前數據庫的指定 key
4、type :獲取 key 對應的 value 值類型
5、rename(覆蓋)/ renamenx(不覆蓋):對已有的 key 進行重命名:
6、dbsize :查看當前數據庫中 key 的數目
(3)redis-benchmark 測試工具:
-h:指定服務器主機名 -p:指定服務器端口 -c:指定并發連接數 -n:?指定請求數 -d:以字節的形式指定SET/GET值的數據大小 -q:強制推出redis。僅顯示query/sec值
redis-benchmark?-h?192.168.220.131?-p?6379?-c?100?-n?100000 //向IP地址為192.168.220.131、端口為6379的redis服務器發送?100個并發連接與?100000個請求測試性能
redis-benchmark?-h?192.168.220.131?-p?6379?-q?-d?100 //測試存取大小為100字節的數據包的性能
(二)Redis 多數據操作:
(1)Redis 支持多數據庫,默認支持16個數據庫,0-15 命名;
(2)多數據相互獨立,互不干擾;
(3)多數據常用命令;
1、select:多數據庫間的切換(默認是在數據庫0中)
2、move:多數據庫間移動數據
3、flushdb:清除數據庫內數據
五、Redis 持久化:
(1)持久化概述:
Redis 是運行在內存中,內存中的數據斷電就會丟失;
為了能重用 Redis 數據,或者防止系統故障,需要將 Redis 中的數據寫入到磁盤空間中,即持久化。
(2)持久化分類:
1、RDB 方式:創建快照的方式獲取某一時刻 Redis 中所有數據的副本。
2、AOF 方式:將執行的寫命令寫到文件的末尾,以日志的方式來記錄數據的變化。
(3)RDB持久化:
1、它是 Redis的默認持久化方式,默認文件名為 dump.rdb
2、觸發條件:
在指定的時間間隔內,執行指定次數的寫操作(配置文件控制);
執行 save 或者是 bgsave (異步)命令;
執行 flushall 命令,清除數據庫所有數據;
執行 shutdown 命令,保證服務器正常關閉且不丟失任何數據。
3、優缺點:
適合大規模的數據恢復;
如果業務對數據完整性和一致性要求不高,RDB 是很好的選擇;
數據的完整性和一致性不高;
備份時占用內存。
4、通過 RDB 文件恢復數據:
將 dump.rdb 文件拷貝到 redis 的安裝目錄的 bin 目錄下,重啟 redis 服務即可。
5、配置文件選項:
vim /etc/redis/6379.conf
save?900?1?????????????? save?300?10 save?60?10000 //900秒之內至少一次寫操作、300秒之內至少發生10次寫操作、60秒之內發生至少10000次寫操作,只要滿足其一都會觸發快照操作,注釋所有的save項表示關閉?RDB dbfilename?dump.rdb?????????//?RDB文件名稱 dir?/var/lib/redis/6379?????//?RDB文件路徑 rdbcompression?yes??????????//?是否進行壓縮
(4)AOF 持久化:
Redis 默認是不開啟的;
彌補 RDB 的不足(數據的不一致性);
采用日志的形式來記錄每個寫操作,并追加到文件中;
Redis 重啟會根據日志文件的內容將寫指令從前到后執行一次以完成數據的恢復工作。
1、根據 AOF 文件恢復數據:
將 appendonly.aof 文件拷貝到 redis 的安裝目錄的 bin 目錄下,重啟 redis 訪問即可。
2、配置文件選項:
vim?/etc/redis/6379.conf appendonly?yes?????????????????????//開啟AOF持久化 appendfilename?"appendonly.aof"????//AOF文件名稱 appendfsync?always???? appendfsync?everysec appendfsync?no //解釋:always:同步持久化,每次發生數據變化會立刻寫入磁盤; ???????everysec:默認推薦,每秒異步記錄一次(默認值); ???????no:不同步,交給操作系統決定如何同步。 ???????aof-load-truncated?yes?????????//忽略最后一條可能存在問題的指令
3、AOF 的重寫機制:
AOF 的工作原理是將寫操作追加到文件中,文件的冗余會越來越多;
當 AOF 文件的大小超過所設定的閾值時,Redis 就會對 AOF 文件的內容壓縮;
4、AOF 的重寫原理:
Redis 會 fork 出一條新進程,讀取內存中的數據(并沒有讀取舊文件),并重新到一個臨時文件中,最后替換舊的 aof 文件。
5、AOF 的重寫配置:
vim?/etc/redis/6379.conf 在日志進行?BGREWRITEAOF?時,如果設置為?yes?表示新寫操作不進行同步?fsync,只是暫存在緩沖區里,避免造成磁盤?IO?操作沖突,等重寫完成后在寫入。redis?中默認為?no no-appendfsync-on-rewrite?no //當前?AOF文件大小是上次日志重寫時?AOF?文件大小兩倍時,發生?BGREWRITEAOF操作 auto-aof-rewrite-percentage?100 //當前?AOF文件執行?BGREWRITEAOF命令的最小值,避免剛開始啟動?redis?時由于文件尺寸較小導致頻繁的?BGREWRITEAOF auto-aof-rewrite-min-szie?64mb
六、Redis 性能管理:
(1)內存碎片率:
1、操作系統分配的內存值 used_memory_rss 除以 redis 使用的內存值 used_memory 計算得出的;
2、內存碎片是由操作系統低效的分配/回收物理內存導致的;
不連續的物理內存分配
3、跟蹤內存碎片率對理解 redis 實例的資源性能是非常重要的;
內存碎片率稍大于 1 是合理的,這個值表示內存碎片率比較低;
內存碎片率超過 1.5 ,說明 redis 消耗了實際需要物理內存的 150% ,其中 50% 是內存碎片率;
內存碎片率低于 1 的,說明 Redis 內存分配超出了物理內存,操作系統正在進行內存交換。
(2)內存使用率:
1、 redis 實例的內存使用率超過可用最大內存,操作系統開始進行內存與 swqp 空間交換;
2、避免內存交換:
針對緩存數據大小選擇;
盡可能的使用 Hash 數據結構;
設置 key 的過期時間
(3)回收 Key:
1、保證合理分配 redis 有限的內存資源;
2、當內存使用達到設置的最大閾值時,需要選擇一種 key 的回收策略:
默認情況下回收策略是禁止刪除的;
redis.conf 配置文件中修改 maxmemory-policy 屬性值
--volatile-lru:使用L?.RU算法從已設置過期時間的數據集合中淘汰數據 --voltil-tt:從已設置過期時間的數據集合中挑選即將過期的數據淘汰 --volatile-random:從已設置過期時間的數據集合中隨機挑選數據淘汰 --allkeys-lru:使用LRU算法從所有數據集合中淘汰數據 --allkeys-random:從數據集合中任意選擇數據淘汰 --no-enviction:禁止淘汰數據
補充:
一、關系數據庫(SQL)和非關系數據庫(NoSQL)簡要介紹:
(1)關系型數據庫(SQL):
1、一個結構化的數據庫,創建在關系模型基礎上,一般面向于記錄;
2、包括 Oracle 、Mysql 、 SQL Server 、Microsoft Access 、DB2 等。
優點:
1、易于維護:都是使用表結構,格式一致;
2、使用方便:SQL語言通用,可用于復雜查詢;
3、復雜操作:支持SQL,可用于一個表以及多個表之間非常復雜的查詢。
缺點:
1、讀寫性能比較差,尤其是海量數據的高效率讀寫;
2、固定的表結構,靈活度稍欠;
3、對于高并發讀寫需求,傳統關系型數據庫來說,硬盤I/O是一個很大的瓶頸。
(2)非關系型數據庫(NoSQL):
1、除了主流的關系型數據庫以外的數據庫,都認為是非關系型的;
2、包括 Redis 、 MongBD 、 Hbase 、 CouhDB 、Memcache 等;
3、非關系型數據庫嚴格上不是一種數據庫,應該是一種數據結構化存儲方法的集合,可以是文檔或者鍵值對等。
優點:
1、格式靈活:存儲數據的格式可以是 key-value(鍵-值)形式、文檔形式、圖片形式等等,文檔形式、圖片形式等等,使用靈活,應用場景廣泛,而關系型數據庫則只支持基礎類型;
2、速度快:nosql可以使用硬盤或者隨機存儲器作為載體,而關系型數據庫只能使用硬盤;
3、高擴展性;
4、成本低:nosql數據庫部署簡單,基本都是開源軟件。
缺點:
1、不提供sql支持,學習和使用成本較高;
2、不支持事務,容錯率低;
3、數據結構相對復雜,復雜查詢方面稍欠。
(3)非關系型數據庫產生的背景:
High performance :對數據庫高并發讀寫需求;
Huge Storage:對海量數據高效存儲與訪問需求;
High Scalability && High Availability:對數據庫高可擴展性與高可用性需求。
如本文主角redis便為非關系型數據庫。
二、Redis 和 Memcache 的比較:
1、存儲方式:
Memecache把數據全部存在內存之中,斷電后會掛掉,數據不能超過內存大小;
Redis有部份存在硬盤上,這樣能保證數據的持久性。
2、數據支持類型:
Memcache對數據類型支持相對簡單;
Redis有復雜的數據類型。
3、使用底層模型不同:
它們之間底層實現方式以及與客戶端之間通信的應用協議不一樣;
Redis直接自己構建了VM 機制 ,因為一般的系統調用系統函數的話,會浪費一定的時間去移動和請求。
4、value大小:
redis最大可以達到1GB,而memcache只有1MB。
5、使用redis有哪些好處?
1、速度快,因為數據存在內存中,類似于HashMap,HashMap的優勢就是查找和操作的時間復雜度都是O(1)
2、支持豐富數據類型,支持string,list,set,sorted set,hash
3、支持事務,操作都是原子性,所謂的原子性就是對數據的更改要么全部執行,要么全部不執行。
4、豐富的特性:可用于緩存,消息,按key設置過期時間,過期后將會自動刪除。
redis 相比 memcached 的優勢:
memcached所有的值均是簡單的字符串,redis作為其替代者,支持更為豐富的數據類型;
redis的速度比memcached快很多;
redis可以持久化其數據;
Memcache 支持結構化,但是 Redis支持結構化和非結構化。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。