03-NoSQL之Redis配置與優化

一、redis與memcache總體對比

1.性能

Redis:只使用單核,平均每一個核上Redis在存儲小數據時比Memcached性能更高。

Memcached:可以使用多核,而在100k以上的數據中,Memcached性能要高于Redis。

2.內存使用效率

MemCached:使用簡單的key-value存儲,Memcached的內存利用率更高。

Redis:如果采用hash結構來做key-value存儲,由于其組合式的壓縮,其內存利用率會高于Memcached。

3.內存空間和數據量大小

MemCached:可以修改最大內存,采用LRU算法。Memcached單個key-value大小有限,一個value最大只支持1MB。

Redis:增加了VM的特性,突破了物理內存的限制。Redis單個key-value大小最大支持512MB 。

4.數據結構支持

MemCached:數據結構單一,僅用來緩存數據。

Redis:支持更加豐富的數據類型,Redis不僅僅支持簡單的k/v類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。

可以在服務器端直接對數據進行豐富的操作,這樣可以減少網絡IO次數和數據體積。

5.可靠性

Memcached:只是個內存緩存,對可靠性要求低。MemCached不支持數據持久化,斷電或重啟后數據消失,但穩定性是有保證的。

Redis:對可靠性要求高,支持數據持久化和數據恢復,允許單點故障,同時也會影響部分性能。支持數據的備份,即master-slave模式的數據備份。Redis支持數據的持久化,可以將內存中的數據保存到磁盤中,重啟的時候可以再次加載進行使用。

6.應用場景

Memcached:動態系統中減輕數據庫負載,提升性能;做緩存,適合多讀少寫,大數據量場景。

Redis:適用于對讀寫效率要求都很高,數據處理業務復雜和對安全性要求較高的系統。

2.實驗案例

1.redis的安裝

先把防火墻關掉

先把防火墻關掉
systemctl stop firewalld
set setenforce 0[root@localhost ~]# yum -y install gcc* zlib-devel
解壓 redis包
[root@localhost ~]# tar xvzf redis-4.0.9.tar.gz 
[root@localhost ~]# cd redis-4.0.9/ make

2:查看進程
[root@localhost utils]# netstat -anpt | grep redis

3:redis服務控制
[root@localhost ~]#/etc/init.d/redis_6379 stop 
[root@localhost ~]#/etc/init.d/redis_6379 start 
[root@localhost ~]#/etc/init.d/redis_6379 restart 
[root@localhost ~]#/etc/init.d/redis_6379 status 

4.配置參數的修改
[root@localhost ~]#vim /etc/redis/6379.conf 
bind 127.0.0.1 192.168.10.101   	//監聽的主機地址 
port 6379 		//端口 
daemonize yes 	//啟用守護進程 
pidfile /var/run/redis_6379.pid 	//指定 PID 文件 
loglevel notice 	//日志級別 
logfile /var/log/redis_6379.log 	//指定日志文件 [root@localhost~]#/etc/init.d/redis_6379 restart 
[root@localhost utils]# netstat -anpt | grep redis

二:Redis 命令工具
? redis-server:用于啟動 Redis 的工具; 
? redis-benchmark:用于檢測 Redis 在本機的運行效率; 
? redis-check-aof:修復 AOF 持久化文件; 
? redis-check-rdb:修復 RDB 持久化文件; 
? redis-cli:Redis 命令行工具。

redis常用命令:

set ? ? ? ? 創建
get ? ? ? ? 查看
keys * ? 查看所有
rename (會覆蓋)?
renamenx (檢查有沒有同名,然后再決定是否執行 rename 命令,)
del ? ? ? ?(命令可以刪除當前數據庫的指定 key)
exists ? ?(命令可以判斷鍵值是否存在)
type ? ? ?(使用 type 命令可以獲取 key 對應的 value 值類型)
select ? ?(切換數據庫)
move ? ?(移動數據)
flushdb (清空當前數據庫數據)
flushall ?(清空所有數據庫的數據)

? -p:指定服務器端口; 
? -s:指定服務器 socket; 
? -c:指定并發連接數; 
? -n:指定請求數; 
? -d:以字節的形式指定 SET/GET 值的數據大小; 
? -k:1=keep alive 0=reconnect; 
? -r:SET/GET/INCR 使用隨機 key, SADD 使用隨機值; 
? -P:通過管道傳輸<numreq>請求; 
? -q:強制退出 redis。僅顯示 query/sec 值; 
? --csv:以 CSV 格式輸出;
? -l:生成循環,永久執行測試; 
? -t:僅運行以逗號分隔的測試命令列表; 
? -I:Idle 模式。僅打開 N 個 idle 連接并等待。

五:Redis 持久化

Redis 的所有數據都是保存在內存中,然后不定期的通過異步方式保存到磁盤上(這稱為半持久化模式”);也可以把每一次數據變化都寫入到一個 append only file(aof)里面(這稱為全持久化模式”)

由于 Redis 的數據都存放在內存中,如果沒有配置持久化,Redis 重啟后數據就全丟失了。所以,需要開啟 Redis 的持久化功能,將數據保存到磁盤上,當 Redis 重啟后,可以從磁盤中恢復數據。Redis 提供兩種方式進行持久化,一種是 RDBRedis DataBase 持久化(原理是將 Reids在內存中的數據庫記錄定時 dump 到磁盤上的 RDB 持久化),另外一種是 AOFappend only file持久化(原理是將 Reids 的操作日志以追加的方式寫入文件)。

1:RDB 和 AOF 的區別

(1)RDB是什么?

默認采用的方法

RDB持久化是把當前進程數據生成快照保存到硬盤的過程,觸發RDB持久化過程分為手動觸發和自動觸發。

觸發機制:手動觸發分別對應為save和bgsave命令

save命令:阻塞當前Redis服務器,直到RDB過程完成為止,對于內存比較多的實例會造成時間阻塞。線上環境不建議使用。

bgsave命令:Redis進程執行fork(用于創建進程的函數)操作創建子進程,RDB持久化過程由子進程負責,完成后自動結束。阻塞只發生在fork階段。

(2)RDB的優缺點:

RDB的優點:

RDB是一個緊湊壓縮的二進制文件,代表Redis在某一個時間點上的數據快照。非常適用于備份,全量復制等場景。比如每6小時執行bgsave備份,并把RDB文件拷貝到遠程機器或者文件系統中,用于災難恢復。

Redis加載RDB恢復數據遠遠快于AOF方式。

RDB的缺點:

RDB方式數據沒辦法做到實時持久化/秒級持久化。因為bgsave每次運行都有執行fork操作創建子進程,屬于重量級操作,頻繁執行成本過高。

RDB文件使用特定二進制格式保存,Redis版本演進過程中有多個格式的RDB版本,存在老版本Redis服務無法兼容新版RDB格式的問題。

二、AOF是什么

AOF(append only file)持久化:以獨立日志的方式記錄每次寫命令,重啟時再重新執行AOF文件中命令達到恢復數據的目的。AOF的主要作用是解決了數據持久化的實時性,目前已經是Redis持久化的主流

二者選擇的標準:

犧牲一些性能,換取更高的緩存一致性(AOF),

寫操作頻繁的時候,不啟用備份來換取更高的性能,待手動運行 save 的時候,再做備份(RDB

備注:

如果redies重啟之后,需要加載一個持久化文件,有限會選擇AOF文件。

如果先開啟了RDB,再開啟AOF,RDB先執行了持久化,那么RDB文件中的內容會被AOF覆蓋掉。

3:Redis 持久化配置

(1)RDB 持久化配置

[root@localhost ~]# vim /etc/redis/6379.conf

打開 6379.conf 文件之后,搜索 save,可以看到如下所示配置信息。

  • ? save 900 1:在 900 秒(15 分鐘)之后,如果至少有 1 個 key 發生變化,則 dump內存快照。
  • ? save 300 10:在 300 秒(5 分鐘)之后,如果至少有 10 個 key 發生變化,則 dump內存快照。
  • ? save 60 10000:在 60 秒(1 分鐘)之后,如果至少有 10000 個 key 發生變化,則dump 內存快照。
  • dbfilename dump.rdb :RDB文件名稱?????????? ##254行
  • dir /var/lib/redis/6379 :RDB文件路徑????????? ##264行
  • rdbcompression yes :是否進行壓縮?????????????? ##242行

(2)AOF 持久化配置

Redis 的配置文件中存在三種同步方式,它們分別是:

  • appendonly yes? :開啟AOF持久化(默認為no)??????????????? ##673行
  • appendfilename "appendonly.aof "? :AOF文件名稱??????????? ##677行
  • # appendfsync always
  • appendfsync everysec
  • # appendfsync no

always:同步持久化,每次發生數據變化會立刻寫入磁盤

everysec:默認推薦,每秒異步記錄一次(默認值)

no:不同步,交給操作系統決定如何同步

  • aof-load-truncated yes? ??????? ##769行

忽略最后一條可能存在問題的指令

[root@localhost ~]#/etc/init.d/redis_6379 restart

(2)AOF重寫

為了解決 AOF 文件體積不斷增大的問題,用戶可以向 Redis 發送 BGREWRITEAOF命令。BGREWRITEAOF 命令會通過移除 AOF 文件中的冗余命令來重寫(rewriteAOF文件,使 AOF 文件的體積盡可能地變小。

127.0.0.1:6379> bgrewriteaof

Background append only file rewriting started

# 在日志進行BGREWRITEAOF時,如果no-appendfsync-on-rewrite設置為yes表示新寫操作不進行同步fsync,只是暫存在緩沖區里,避免造成磁盤IO操作沖突,等重寫完成后再寫入。Redis中默認為no

no-appendfsync-on-rewrite no?

# 當前AOF文件大小是上次日志重寫時AOF文件大小兩倍時,發生BGREWRITEAOF操作

auto-aof-rewrite-percentage 100?

備注:

100指的是aof文件增長比例,指當前aof文件比上次重寫的增長比例大小100為兩倍

#當前AOF文件執行BGREWRITEAOF命令的最小值,避免剛開始啟動Reids時由于文件尺寸較小導致頻繁的BGREWRITEAOF

auto-aof-rewrite-min-size 64mb

六:性能管理

1:查看內存信息

192.168.9.236:7001> info memory

used_memory:1210776 #已經內存使用的大小,以字節為單位
used_memory_human:1.15M # 帶單位展示,以M為單位
used_memory_rss:7802880 # 從操作系統角度看redis內存占用多少
used_memory_rss_human:7.44M # 帶單位展示
maxmemory:1073741824 # 最大內存大小
maxmemory_human:1.00G # 帶單位展示

2:回收策略

maxmemory-policy:回收策略

? volatile-lru:它允許 Redis 從整個數據集中挑選最近最少使用的 key 進行刪除

? volatile-ttl按照key的過期時間進行淘汰

? volatile-random:從已設置過期時間的數據集合中隨機挑選數據淘汰;

? allkeys-lru:使用 LRU 算法從所有數據集合中淘汰數據;

? allkeys-random:從數據集合中任意選擇數據淘汰;

? noeviction:禁止淘汰數據(默認值)

備注:

設置key的過期時間

expire v1 10

v1的過期時間為10秒

備注:

Redis 由于內存壓力需要回收一個 key 時,Redis 首先考慮的不是回收最舊的數據,而是在最近最少使用的 key 或即將過期的 key 中隨機選擇一個 key,從數據集中刪除

redis設置密碼

  一、設置方法

  方法一:通過配置文件redis.conf設置密碼

  找到requirepass關鍵字,后面就是跟的密碼,默認情況下是注釋掉的,即默認不需要密碼,如下:

  

?  打開注釋,設置為自己的密碼,重啟即可

  方法二:通過命名設置密碼

  使用redis-cli連接上redis,執行如下命令

config set requirepass 123456

  執行完畢,無需重啟,退出客戶端,重新登錄就需要輸入密碼了

  二、連接方法

  1、連接時輸入密碼

[root@localhost bin]# ./redis-cli -a 123456

  2、先連接再輸入密碼

[root@localhost bin]# ./redis-cli127.0.0.1:6379> auth 123456

  三、關閉方法

[root@localhost bin]# ./redis-cli -a 123456 shutdown

  四、區別

  1)修改配置文件設置的密碼永久生效;使用命令設置的密碼臨時生效,重啟后失效

  2)修改配置文件設置的密碼,需要重啟生效;使用命令設置的密碼,退出后再登錄生效,重啟后失效

  3)命令的優先級高于配置文件的優先級

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/43587.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/43587.shtml
英文地址,請注明出處:http://en.pswp.cn/web/43587.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

springboot文達辦公物資管理系統-計算機畢業設計源碼51191

摘要 本文介紹了一種名為"文達辦公物資管理系統"的基于JAVA語言、基于Springboot框架和MYSQL數據庫開發的管理系統。該系統主要分為管理員和員工用戶兩個角色&#xff0c;以滿足不同用戶的需求。 對于管理員用戶&#xff0c;系統提供了儀器設備管理、設備借用管理、設…

【大數據技術】換新電腦了,如何快速遷移MySQL到新電腦上(含程序+數據),這樣既快速又高效,省去了“各種安裝+各種配置+各種遷移數據”帶來的麻煩和時間

【大數據技術】換新電腦了&#xff0c;如何快速遷移MySQL到新電腦上(含程序數據 背景步驟總結 背景 很久沒有寫博文了哦&#xff0c;最近我換了新的筆記本,于是需要在新筆記本電腦上搭建MySQL環境&#xff0c;因為我原電腦上是安裝的MySQL解壓版&#xff0c;故我想偷偷懶&…

可理解性評估:使用Google Gemini優化語音識別的意義保留

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

nftables(5)表達式(3)PAYLOAD EXPRESSIONS

PAYLOAD EXPRESSIONS Payload expressions在nftables中扮演著重要的角色&#xff0c;因為它們允許用戶定義復雜的規則&#xff0c;這些規則可以基于數據包的內容&#xff08;即有效載荷&#xff09;來過濾、修改或允許數據包通過。這些表達式可以執行諸如數據拷貝、比較、位操…

實驗1 —— 安全策略的練習

實驗拓撲圖 實驗要求 1.DMZ區內的服務器&#xff0c;辦公區僅能在辦公時間內&#xff08;9&#xff1a;00-18&#xff1a;00&#xff09;可以訪問&#xff0c;生產區的設備全天可以訪問&#xff1b; 2.生產區不允許訪問互聯網&#xff0c;辦公區和游客區允許訪問互聯網 3.辦公區…

RabbitMQ保證消息被成功發送和消費

一 : 在使用 RabbitMQ 作為消息隊列時&#xff0c;保證消息被成功發送和消費是一個非常重要的問題。以下是一些關鍵點和最佳實踐&#xff0c;以確保消息的可靠傳輸和處理。* 配置方式: 保證消息被成功發送 確認模式&#xff08;Confirm Mode&#xff09;&#xff1a;生產者可以…

在SpringBoot使用AOP防止接口重復提交

前言 防止接口重復提交有跟多種方法&#xff0c;可以在前端做處理。同樣在后端也能處理&#xff0c;而且后端的處理也有很多中方法。最先能想到的就是加鎖&#xff0c;也可以直接在該接口的實現過程中進行處理&#xff08;可以參考防止數據重復提交的6種方法(超簡單)&#xff…

動手學Avalonia:基于硅基流動構建一個文生圖應用(一)

文生圖 文生圖&#xff0c;全稱“文字生成圖像”&#xff08;Text-to-Image&#xff09;&#xff0c;是一種AI技術&#xff0c;能夠根據給定的文本描述生成相應的圖像。這種技術利用深度學習模型&#xff0c;如生成對抗網絡&#xff08;GANs&#xff09;或變換器&#xff08;T…

【Mac】Charles for Mac(HTTP協議抓包工具)及同類型軟件介紹

軟件介紹 Charles for Mac 是一款功能強大的網絡調試工具&#xff0c;主要用于HTTP代理/HTTP監視器。以下是它的一些主要特點和功能&#xff1a; 1.HTTP代理&#xff1a;Charles 可以作為HTTP代理服務器&#xff0c;允許你查看客戶端和服務器之間的所有HTTP和SSL/TLS通信。 …

金航標kinghelm宋仕強在介紹自己公司時說

金航標kinghelm宋仕強在介紹自己公司時說&#xff0c;金航標成立于2007年&#xff0c;成立地點在華強北雷圳大廈803室&#xff0c;后搬到華強北廣業大廈24樓CD室&#xff0c;后搬遷到龍華展滔科技大廈C座C809和C817室&#xff0c;現在的辦公地址為龍崗區坂田街道百瑞達大廈&…

WSL安裝USB驅動

wsl用不了USB盤&#xff0c;需要安裝驅動 1、安裝windows驅動 https://github.com/dorssel/usbipd-win/releases 下載msi&#xff0c;并且安裝 2、linux里面安裝 sudo apt install linux-tools-5.4.0-77-generic hwdata sudo update-alternatives --install /usr/local/bin/usb…

PageDTO<T>,PageQuery,BeanUtils,CollUtils的封裝

一、PageDTO<T> import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fasterxml.jackson.annotation.JsonIgnore; import com.tianji.common.utils.BeanUtils; import com.tianji.common.utils.CollUtils; import com.tianji.common.utils.…

C#中的MD5摘要算法與哈希算法

文章目錄 一、哈希算法基礎二、MD5 算法原理三、MD5摘要算法四、哈希算法五、C#實現示例MD5算法示例哈希算法示例字符串MD5值對比 六、總結 一、哈希算法基礎 哈希算法是一種單向密碼體制&#xff0c;它將任意長度的數據轉換成固定長度的字符串。這種轉換是不可逆的&#xff0…

IDEA中配置代理,解決Codearts Snap登陸不了的問題

問題描述&#xff1a;在mac電腦中的idea中安裝了華為的codearts snap插件&#xff0c;一直登錄不了&#xff0c;賬號是沒問題的&#xff0c;后來我懷疑是我的代理有問題&#xff0c;找到IDEA中的代理設置先是有這個問題“You have JVM property "https.proxyHost" se…

千呼新零售2.0分銷商城視頻介紹

千呼新零售2.0系統是零售行業連鎖店一體化收銀系統&#xff0c;包括線下收銀線上商城連鎖店管理ERP管理商品管理供應商管理會員營銷等功能為一體&#xff0c;線上線下數據全部打通。 適用于商超、便利店、水果、生鮮、母嬰、服裝、零食、百貨、寵物等連鎖店使用。 詳細介紹請…

C語言 將兩個字符串連接起來,不用strcat函數

編一個程序,將兩個字符串連接起來,不要用strcat函數。 #include <stdio.h>void my_strcat(char *s1, const char *s2) {while (*s1) {s1;}while (*s2) {*s1 *s2;s1;s2;}*s1 \0; }int main() {char s1[100] "Hello, ";char s2[] "World!";my_str…

Android初學者書籍推薦

書單 1.《Android應用開發項目式教程》&#xff0c;機械工業出版社&#xff0c;2024年出版2.《第一行代碼Android》第二版3.《第一行代碼Android》第三版4.《瘋狂Android講義》第四版5.《Android移動應用基礎教程&#xff08;Android Studio 第2版&#xff09;》 從學安卓到用安…

uniapp 打包成安卓APP預覽base64pdf實現方法

下載PDF.js 問題描述 在uniapp中預覽base64的PDF&#xff0c;可以使用web-view組件嵌入一個PDF.js的實例。以下是一個簡單的示例&#xff1a; 解決方案&#xff1a; 1.在頁面的.vue文件中添加web-view組件&#xff1a; <template><view style"width: 50%;&qu…

【機器學習】支持向量機與主成分分析在機器學習中的應用

文章目錄 一、支持向量機概述什么是支持向量機&#xff1f;超平面和支持向量大邊距直覺 二、數據預處理與可視化數據集的基本信息導入必要的庫加載數據集數據概況數據可視化特征對的散點圖矩陣類別分布條形圖平均面積與平均光滑度的散點圖變量之間的相關性熱圖 三、模型訓練&am…

JS【詳解】類 class ( ES6 新增語法 )

本質上&#xff0c;類只是一種特殊的函數。 console.log(typeof 某類); //"function"聲明類 class 方式 1 – 類聲明 class Car {constructor(model, year) {this.model model;this.year year;} }方式 2 – 類表達式 匿名式 const Car class {constructor(mod…