石家莊學校網站建設關鍵路徑
一、redis與memcache總體對比
1.性能
Redis:只使用單核,平均每一個核上Redis在存儲小數(shù)據時比Memcached性能更高。
Memcached:可以使用多核,而在100k以上的數(shù)據中,Memcached性能要高于Redis。
2.內存使用效率
MemCached:使用簡單的key-value存儲,Memcached的內存利用率更高。
Redis:如果采用hash結構來做key-value存儲,由于其組合式的壓縮,其內存利用率會高于Memcached。
3.內存空間和數(shù)據量大小
MemCached:可以修改最大內存,采用LRU算法。Memcached單個key-value大小有限,一個value最大只支持1MB。
Redis:增加了VM的特性,突破了物理內存的限制。Redis單個key-value大小最大支持512MB 。
4.數(shù)據結構支持
MemCached:數(shù)據結構單一,僅用來緩存數(shù)據。
Redis:支持更加豐富的數(shù)據類型,Redis不僅僅支持簡單的k/v類型的數(shù)據,同時還提供list,set,zset,hash等數(shù)據結構的存儲。
可以在服務器端直接對數(shù)據進行豐富的操作,這樣可以減少網絡IO次數(shù)和數(shù)據體積。
5.可靠性
Memcached:只是個內存緩存,對可靠性要求低。MemCached不支持數(shù)據持久化,斷電或重啟后數(shù)據消失,但穩(wěn)定性是有保證的。
Redis:對可靠性要求高,支持數(shù)據持久化和數(shù)據恢復,允許單點故障,同時也會影響部分性能。支持數(shù)據的備份,即master-slave模式的數(shù)據備份。Redis支持數(shù)據的持久化,可以將內存中的數(shù)據保存到磁盤中,重啟的時候可以再次加載進行使用。
6.應用場景
Memcached:動態(tài)系統(tǒng)中減輕數(shù)據庫負載,提升性能;做緩存,適合多讀少寫,大數(shù)據量場景。
Redis:適用于對讀寫效率要求都很高,數(shù)據處理業(yè)務復雜和對安全性要求較高的系統(tǒng)。
二、redis與memcache內存管理機制對比
1. Memcached的內存管理機制
Memcached默認使用Slab Allocation機制管理內存,其主要思想是按照預先規(guī)定的大小,將分配的內存分割成特定長度的塊以存儲相應長度的key-value數(shù)據記錄,以完全解決內存碎片問題。Slab Allocation機制只為存儲外部數(shù)據而設計,也就是說所有的key-value數(shù)據都存儲在Slab Allocation系統(tǒng)里,而Memcached的其它內存請求則通過普通的malloc/free來申請,因為這些請求的數(shù)量和頻率決定了它們不會對整個系統(tǒng)的性能造成影響
2. Redis的內存管理機制
Redis的內存管理主要通過源碼中zmalloc.h和zmalloc.c兩個文件來實現(xiàn)的。Redis為了方便內存的管理,在分配一塊內存之后,會將這塊內存的大小存入內存塊的頭部。如圖 5所示,real_ptr是redis調用malloc后返回的指針。redis將內存塊的大小size存入頭部,size所占據的內存大小是已知的,為 size_t類型的長度,然后返回ret_ptr。當需要釋放內存的時候,ret_ptr被傳給內存管理程序。通過ret_ptr,程序可以很容易的算出 real_ptr的值,然后將real_ptr傳給free釋放內存。Redis采用的是包裝的mallc/free,相較于Memcached的內存管理方法來說,要簡單很多。
三、 Redis和Memcached的集群實現(xiàn)機制對比
1. Memcached的分布式存儲
Memcached本身并不支持分布式,因此只能在客戶端通過像一致性哈希這樣的分布式算法來實現(xiàn)Memcached的分布式存儲。
當客戶端向Memcached集群發(fā)送數(shù)據之前,首先會通過內置的分布式算法計算出該條數(shù)據的目標節(jié)點,然后數(shù)據會直接發(fā)送到該節(jié)點上存儲。但客戶端查詢數(shù)據時,同樣要計算出查詢數(shù)據所在的節(jié)點,然后直接向該節(jié)點發(fā)送查詢請求以獲取數(shù)據。
2. Redis的分布式存儲
Redis在服務器端構建分布式存儲。Redis Cluster是一個實現(xiàn)了分布式且允許單點故障的Redis高級版本,它沒有中心節(jié)點,具有線性可伸縮的功能。其中節(jié)點與節(jié)點之間通過二進制協(xié)議進行通信,節(jié)點與客戶端之間通過ascii協(xié)議進行通信。在數(shù)據的放置策略上,Redis Cluster將整個key的數(shù)值域分成4096個哈希槽,每個節(jié)點上可以存儲一個或多個哈希槽,Redis Cluster支持的最大節(jié)點數(shù)就是4096。Redis Cluster使用的分布式算法:crc16( key ) % HASH_SLOTS_NUMBER。
為了保證單點故障下的數(shù)據可用性,Redis Cluster引入了Master節(jié)點和Slave節(jié)點。在Redis Cluster中,每個Master節(jié)點都會有對應的兩個用于冗余的Slave節(jié)點。這樣在整個集群中,任意兩個節(jié)點的宕機都不會導致數(shù)據的不可用。當Master節(jié)點退出后,集群會自動選擇一個Slave節(jié)點成為新的Master節(jié)點。
一:redis的安裝
1:安裝
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum -y install gcc* zlib-devel
[root@localhost ~]#?tar xvzf redis-4.0.9.tar.gz
[root@localhost ~]#?cd redis-4.0.9/
[root@localhost redis-4.0.9]# make
注意:
在make的時候,可能會出現(xiàn)如下錯誤提示:
解決方法1:用make MALLOC=libc指定內存分配器為 libc進行編譯
解決方法2:make clean && make?distclean
[root@localhost redis-4.0.9]# make PREFIX=/usr/local/redis install
[root@localhost ~]# ln -s /usr/local/redis/bin/* /usr/local/bin/
[root@localhost redis-4.0.9]# cd /root/redis-4.0.9/utils/
[root@localhost utils]# ./install_server.sh
備注:
Config file : /etc/redis/6379.conf ???//配置文件路徑
Log file : /var/log/redis_6379.log ???//日志文件路徑
Data dir : /var/lib/redis/6379 ???//數(shù)據文件路徑
Executable : /usr/local/redis/bin/redis-server ???//可執(zhí)行文件路徑
Cli Executable : /usr/local/redis/bin/redis-cli ???//客戶端命令行工具
2:查看進程
[root@localhost utils]# netstat -anpt | grep redis
3:服務控制
[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:配置參數(shù)的修改
[root@localhost ~]#vim /etc/redis/6379.conf
bind 127.0.0.1?192.168.10.101 ?? //監(jiān)聽的主機地址
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 命令行工具。
1:redis-cli 命令行工具
(1)連接本機redis
[root@localhost ~]# redis-cli
127.0.0.1:6379>
(2)測試redis服務是否啟動
127.0.0.1:6379> ping
PONG
(3)遠程連接
[root@localhost ~]#redis-cli -h 192.168.10.101 -p 6379
2:獲取幫助
? help @<group>:獲取<group>中的命令列表;
? help <command>:獲取某個命令的幫助;
? help <tab>:獲取可能幫助的主題列表。
備注:
? help <tab>:獲取可能幫助的主題列表。
輸入help后,按下tab鍵
(1)查看所有與 List 數(shù)據類型的相關命令
127.0.0.1:6379>help @list
(2)查看 set 命令的命令幫助
127.0.0.1:6379>help set
3:redis-benchmark 測試工具
redis-benchmark 是官方自帶的 Redis 性能測試工具,可以有效的測試 Redis 服務的性能。
? -h:指定服務器主機名;
? -p:指定服務器端口;
? -s:指定服務器 socket;
? -c:指定并發(fā)連接數(shù);
? -n:指定請求數(shù);
? -d:以字節(jié)的形式指定 SET/GET 值的數(shù)據大小;
? -k:1=keep alive 0=reconnect;
? -r:SET/GET/INCR 使用隨機 key, SADD 使用隨機值;
? -P:通過管道傳輸<numreq>請求;
? -q:強制退出 redis。僅顯示 query/sec 值;
? --csv:以 CSV 格式輸出;
? -l:生成循環(huán),永久執(zhí)行測試;
? -t:僅運行以逗號分隔的測試命令列表;
? -I:Idle 模式。僅打開 N 個 idle 連接并等待。
(1)測試請求性能
[root@localhost ~]#redis-benchmark -h 192.168.10.101 -p 6379 -c 100 -n 100000
備注:
? -h:指定服務器主機名;
? -p:指定服務器端口;
? -c:指定并發(fā)連接數(shù);
? -n:指定請求數(shù);
====== MSET (10 keys) ======
??100000 requests completed in 1.02 seconds
??100 parallel clients ##100個并發(fā)連接
??3 bytes payload
??keep alive: 1
87.25% <= 1 milliseconds ##87.25%的命令執(zhí)行時間小于等于1毫秒
99.90% <= 2 milliseconds
100.00% <= 2 milliseconds
97943.19 requests per second #每秒的請求數(shù)
備注:
向 IP 地址為 192.168.10.101、端口為6379 的 Redis 服務器發(fā)送 100 個并發(fā)連接與100000 個請求測試性能
(2)測試存取性能
[root@localhost ~]#redis-benchmark -h 192.168.10.101 -p 6379 -q -d 100
備注:
? -h:指定服務器主機名;
? -p:指定服務器端口;
? -d:以字節(jié)的形式指定 SET/GET 值的數(shù)據大小;
? -q:強制退出 redis。僅顯示 query/sec 值;
PING_INLINE: 121506.68 requests per second
PING_BULK: 124378.11 requests per second
SET: 121654.50 requests per second
GET: 122100.12 requests per second
INCR: 118764.84 requests per second
LPUSH: 112612.61 requests per second
RPUSH: 118623.96 requests per second
LPOP: 107874.87 requests per second
RPOP: 114416.48 requests per second
SADD: 123304.56 requests per second
HSET: 122249.38 requests per second
SPOP: 128040.97 requests per second
LPUSH (needed to benchmark LRANGE): 116686.12 requests per second
LRANGE_100 (first 100 elements): 40016.00 requests per second
LRANGE_300 (first 300 elements): 11991.85 requests per second
LRANGE_500 (first 450 elements): 7381.71 requests per second
LRANGE_600 (first 600 elements): 5230.67 requests per second
MSET (10 keys): 92421.44 requests per second
備注:
測試存取大小為 100 字節(jié)的數(shù)據包的性能
(1)PING_INLINE:每秒完成多少次PING操作
(2)GET:每秒完成多少次GET key vlaue
(3)SET:每秒完成多少次SET key vlaue
(4)INCR:每秒完成多少次原子計數(shù)
(5)MSET:每秒多個key vlaue請求次數(shù)
(3)set 與 lpush 操作性能
[root@localhost ~]# redis-benchmark -t set,lpush -n 100000 -q
備注:
? -n:指定請求數(shù);
? -q:強制退出 redis。僅顯示 query/sec 值;
? -t:僅運行以逗號分隔的測試命令列表;
SET: 121951.22 requests per second
LPUSH: 127226.46 requests per second
備注:
測試本機上 Redis 服務在進行 set 與 lpush 操作時的性能。
Lpush 命令將一個或多個值插入到列表頭部
三:Redis 數(shù)據庫常用命令
? set:存放數(shù)據,基本的命令格式為 set key value。
? get:獲取數(shù)據,基本的命令格式為 get key。
127.0.0.1:6379>set teacher zhanglong
127.0.0.1:6379>get teacher
1.key 相關命令
在 Redis 數(shù)據庫中,與 key 相關的命令主要包含以下幾種。
(1)添加鍵值對
使用 keys 命令可以取符合規(guī)則的鍵值列表,通常情況可以結合*、?等選項來使用。
127.0.0.1:6379>set k1 1
OK
127.0.0.1:6379>set k2 2
OK
127.0.0.1:6379>set k3 3
OK
127.0.0.1:6379>set v1 4
OK
127.0.0.1:6379>set v5 5
OK
(2)查看當前數(shù)據庫中所有鍵
127.0.0.1:6379>KEYS??* ?
1) "teacher"
2) "k1"
3) "k2"
4) "k3"
5) "v1"
6) "v5"
127.0.0.1:6379>set v22 5
OK
(3)查看當前數(shù)據庫中以 v 開頭的數(shù)據
127.0.0.1:6379>KEYS v* ???
1) "v1"
2) "v5"
3) "v22"
(4)查看當前數(shù)據庫中以 v 開頭后面包含任意一位的數(shù)據
127.0.0.1:6379>KEYS v? ??
1) "v1"
2) "v5"
(5)查看當前數(shù)據庫中以 v 開頭 v 開頭后面包含任意兩位的數(shù)據
127.0.0.1:6379>KEYS v?? ??
1) "v22"
2:exists
exists 命令可以判斷鍵值是否存在
127.0.0.1:6379>exists teacher
(integer) 1
結果為1,表示 teacher 鍵是存在
127.0.0.1:6379>exists tea
(integer) 0
結果為0,表示 tea 鍵不存在
3:del
del 命令可以刪除當前數(shù)據庫的指定 key
127.0.0.1:6379>keys *
1) "teacher"
2) "v1"
3) "v22"
4) "k3"
5) "k1"
6) "k2"
7) "v5"
127.0.0.1:6379> del v5
(integer) 1
127.0.0.1:6379>get v5
(nil)
4:type
使用 type 命令可以獲取 key 對應的 value 值類型
127.0.0.1:6379>type k1
string
備注:
redis支持的數(shù)據類型
- String:最簡單的類型,就是普通的set和get,作key value緩存。?
- Hash:類似map的一種結構,一般就是可以將結構化的數(shù)據,比如一個對象給緩存在redis里
- List:List是有序列表,可以通過list存儲一些列表型的數(shù)據結構,類似粉絲列表、文章的評論列表之類的東西
- Set:Set是無序集合,自動去重。
- Sorted Set:Sorted Set是排序的set,去重但可以排序,寫進去的時候給一個分數(shù),自動根據分數(shù)排序。
5:rename
rename 命令是對已有 key 進行重命名
在實際使用過程中,建議先用 exists 命令查看目標 key 是否存在,然后再決定是否執(zhí)行 rename 命令,以避免覆蓋重要數(shù)據
127.0.0.1:6379>keys v*
1) "v1"
2) "v22"
127.0.0.1:6379>rename v22 v2
OK
127.0.0.1:6379>keys v*
1) "v1"
2) "v2"
127.0.0.1:6379>get v1
"4"
127.0.0.1:6379>get v2
"5"
127.0.0.1:6379>rename v1 v2
OK
127.0.0.1:6379>get v1
(nil)
127.0.0.1:6379>get v2
"4"
6:renamenx
renamenx 命令的作用是對已有 key 進行重命名,并檢測新名是否存在。
使用renamenx 命令進行重命名時,如果目標 key 存在則不進行重命名。
127.0.0.1:6379>keys *
1) "teacher"
2) "k3"
3) "k1"
4) "k2"
5) "v2"
127.0.0.1:6379>get teacher
"zhanglong"
127.0.0.1:6379>get v2
"4"
127.0.0.1:6379>renamenx v2 teacher
(integer) 0
127.0.0.1:6379>keys *
1) "teacher"
2) "k3"
3) "k1"
4) "k2"
5) "v2"
127.0.0.1:6379>get teacher
"zhanglong"
127.0.0.1:6379>get v2
"4
7:dbsize
dbsize 命令的作用是查看當前數(shù)據庫中 key 的數(shù)目。
127.0.0.1:6379> dbsize
(integer) 5
四:多數(shù)據庫常用命令
1:多數(shù)據庫間切換
Redis 在沒有任何改動的情況下默認包含 16 個數(shù)據庫,數(shù)據庫名稱是用數(shù)字 0-15 來依次命名的
(1)切換至序號為 10 的數(shù)據庫
127.0.0.1:6379>select 10
OK
(2)切換至序號為 15 的數(shù)據庫
127.0.0.1:6379[10]>select 15
OK
(3)切換至序號為 0 的數(shù)據庫
127.0.0.1:6379[15]>select 0
2:多數(shù)據庫間移動數(shù)據
Redis 的多數(shù)據庫在一定程度上是相對獨立的,例如在數(shù)據庫 0 上面存放 k1 的數(shù)據,在其它 1-15 的數(shù)據庫上是無法查看到的。
127.0.0.1:6379>set k1 100
OK
127.0.0.1:6379>get k1
"100"
127.0.0.1:6379>select 1
OK
127.0.0.1:6379[1]>get k1
(nil)
127.0.0.1:6379[1]>select 0 //切換至目標數(shù)據庫 0
OK
127.0.0.1:6379>get k1 //查看目標數(shù)據是否存在
"100"
127.0.0.1:6379>move k1 1 //將數(shù)據庫 0 中 k1 移動到數(shù)據庫 1 中
(integer) 1
127.0.0.1:6379>select 1 //切換至目標數(shù)據庫 1
OK
127.0.0.1:6379[1]>get k1 //查看被移動數(shù)據
"100"
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> get k1 //在數(shù)據庫 0 中無法查看到 k1 的值
(nil)
3:清除數(shù)據庫內數(shù)據
清空當前數(shù)據庫數(shù)據,使用 FLUSHDB
命令實現(xiàn);清空所有數(shù)據庫的數(shù)據,使用 FLUSHALL 命令實現(xiàn)
五:Redis 持久化
Redis 的所有數(shù)據都是保存在內存中,然后不定期的通過異步方式保存到磁盤上(這稱為“半持久化模式”);也可以把每一次數(shù)據變化都寫入到一個 append only file(aof)里面(這稱為“全持久化模式”)。
由于 Redis 的數(shù)據都存放在內存中,如果沒有配置持久化,Redis 重啟后數(shù)據就全丟失了。所以,需要開啟 Redis 的持久化功能,將數(shù)據保存到磁盤上,當 Redis 重啟后,可以從磁盤中恢復數(shù)據。Redis 提供兩種方式進行持久化,一種是 RDB(Redis DataBase)?持久化(原理是將 Reids在內存中的數(shù)據庫記錄定時 dump 到磁盤上的 RDB 持久化),另外一種是 AOF(append only?file)持久化(原理是將 Reids 的操作日志以追加的方式寫入文件)。
1:RDB 和 AOF 的區(qū)別
(1)RDB是什么?
默認采用的方法
RDB持久化是把當前進程數(shù)據生成快照保存到硬盤的過程,觸發(fā)RDB持久化過程分為手動觸發(fā)和自動觸發(fā)。
觸發(fā)機制:手動觸發(fā)分別對應為save和bgsave命令
save命令:阻塞當前Redis服務器,直到RDB過程完成為止,對于內存比較多的實例會造成時間阻塞。線上環(huán)境不建議使用。
bgsave命令:Redis進程執(zhí)行fork(用于創(chuàng)建進程的函數(shù))操作創(chuàng)建子進程,RDB持久化過程由子進程負責,完成后自動結束。阻塞只發(fā)生在fork階段。
(2)RDB的優(yōu)缺點:
RDB的優(yōu)點:
RDB是一個緊湊壓縮的二進制文件,代表Redis在某一個時間點上的數(shù)據快照。非常適用于備份,全量復制等場景。比如每6小時執(zhí)行bgsave備份,并把RDB文件拷貝到遠程機器或者文件系統(tǒng)中,用于災難恢復。
Redis加載RDB恢復數(shù)據遠遠快于AOF方式。
RDB的缺點:
RDB方式數(shù)據沒辦法做到實時持久化/秒級持久化。因為bgsave每次運行都有執(zhí)行fork操作創(chuàng)建子進程,屬于重量級操作,頻繁執(zhí)行成本過高。
RDB文件使用特定二進制格式保存,Redis版本演進過程中有多個格式的RDB版本,存在老版本Redis服務無法兼容新版RDB格式的問題。
二、AOF是什么
AOF(append only file)持久化:以獨立日志的方式記錄每次寫命令,重啟時再重新執(zhí)行AOF文件中命令達到恢復數(shù)據的目的。AOF的主要作用是解決了數(shù)據持久化的實時性,目前已經是Redis持久化的主流
二者選擇的標準:
犧牲一些性能,換取更高的緩存一致性(AOF),
寫操作頻繁的時候,不啟用備份來換取更高的性能,待手動運行 save 的時候,再做備份(RDB)
備注:
如果redies重啟之后,需要加載一個持久化文件,有限會選擇AOF文件。
如果先開啟了RDB,再開啟AOF,RDB先執(zhí)行了持久化,那么RDB文件中的內容會被AOF覆蓋掉。
3:Redis 持久化配置
(1)RDB 持久化配置
[root@localhost ~]# vim /etc/redis/6379.conf
打開 6379.conf 文件之后,搜索 save,可以看到如下所示配置信息。
- ? save 900 1:在 900 秒(15 分鐘)之后,如果至少有 1 個 key 發(fā)生變化,則 dump內存快照。
- ? save 300 10:在 300 秒(5 分鐘)之后,如果至少有 10 個 key 發(fā)生變化,則 dump內存快照。
- ? save 60 10000:在 60 秒(1 分鐘)之后,如果至少有 10000 個 key 發(fā)生變化,則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:同步持久化,每次發(fā)生數(shù)據變化會立刻寫入磁盤
everysec:默認推薦,每秒異步記錄一次(默認值)
no:不同步,交給操作系統(tǒng)決定如何同步
- aof-load-truncated yes?? ##769行
忽略最后一條可能存在問題的指令
[root@localhost ~]#/etc/init.d/redis_6379 restart
(2)AOF重寫
為了解決 AOF 文件體積不斷增大的問題,用戶可以向 Redis 發(fā)送 BGREWRITEAOF命令。BGREWRITEAOF 命令會通過移除 AOF 文件中的冗余命令來重寫(rewrite)AOF文件,使 AOF 文件的體積盡可能地變小。
127.0.0.1:6379> bgrewriteaof
Background append only file rewriting started
# 在日志進行BGREWRITEAOF時,如果no-appendfsync-on-rewrite設置為yes表示新寫操作不進行同步fsync,只是暫存在緩沖區(qū)里,避免造成磁盤IO操作沖突,等重寫完成后再寫入。Redis中默認為no
no-appendfsync-on-rewrite no ?
# 當前AOF文件大小是上次日志重寫時AOF文件大小兩倍時,發(fā)生BGREWRITEAOF操作
auto-aof-rewrite-percentage 100 ?
備注:
100指的是aof文件增長比例,指當前aof文件比上次重寫的增長比例大小,100為兩倍
#當前AOF文件執(zhí)行BGREWRITEAOF命令的最小值,避免剛開始啟動Reids時由于文件尺寸較小導致頻繁的BGREWRITEAOF
auto-aof-rewrite-min-size 64mb
六:性能管理
1:查看內存信息
192.168.9.236:7001> info memory
used_memory:1210776 #已經內存使用的大小,以字節(jié)為單位
used_memory_human:1.15M # 帶單位展示,以M為單位
used_memory_rss:7802880 # 從操作系統(tǒng)角度看redis內存占用多少
used_memory_rss_human:7.44M # 帶單位展示
maxmemory:1073741824 # 最大內存大小
maxmemory_human:1.00G # 帶單位展示
2:回收策略
maxmemory-policy:回收策略
? volatile-lru:它允許 Redis 從整個數(shù)據集中挑選最近最少使用的 key 進行刪除
? volatile-ttl:按照key的過期時間進行淘汰?
? volatile-random:從已設置過期時間的數(shù)據集合中隨機挑選數(shù)據淘汰;
? allkeys-lru:使用 LRU 算法從所有數(shù)據集合中淘汰數(shù)據;
? allkeys-random:從數(shù)據集合中任意選擇數(shù)據淘汰;
? noeviction:禁止淘汰數(shù)據(默認值)
備注:
設置key的過期時間
expire v1 10
v1的過期時間為10秒
備注:
當 Redis 由于內存壓力需要回收一個 key 時,Redis 首先考慮的不是回收最舊的數(shù)據,而是在最近最少使用的 key 或即將過期的 key 中隨機選擇一個 key,從數(shù)據集中刪除
redis設置密碼
一、設置方法
方法一:通過配置文件redis.conf設置密碼
找到requirepass關鍵字,后面就是跟的密碼,默認情況下是注釋掉的,即默認不需要密碼,如下:
? 打開注釋,設置為自己的密碼,重啟即可
方法二:通過命名設置密碼
使用redis-cli連接上redis,執(zhí)行如下命令
config set requirepass 123456
執(zhí)行完畢,無需重啟,退出客戶端,重新登錄就需要輸入密碼了
二、連接方法
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
四、區(qū)別
1)修改配置文件設置的密碼永久生效;使用命令設置的密碼臨時生效,重啟后失效
2)修改配置文件設置的密碼,需要重啟生效;使用命令設置的密碼,退出后再登錄生效,重啟后失效
3)命令的優(yōu)先級高于配置文件的優(yōu)先級