做公司網(wǎng)站有什么亮點(diǎn)seo基礎(chǔ)培訓(xùn)
?本站以分享各種運(yùn)維經(jīng)驗(yàn)和運(yùn)維所需要的技能為主
《python零基礎(chǔ)入門》:python零基礎(chǔ)入門學(xué)習(xí)
《python運(yùn)維腳本》:?python運(yùn)維腳本實(shí)踐
《shell》:shell學(xué)習(xí)
《terraform》持續(xù)更新中:terraform_Aws學(xué)習(xí)零基礎(chǔ)入門到最佳實(shí)戰(zhàn)
《k8》暫未更新
《docker學(xué)習(xí)》暫未更新
《ceph學(xué)習(xí)》ceph日常問(wèn)題解決分享
《日志收集》ELK+各種中間件
《運(yùn)維日?!愤\(yùn)維日常
《linux》運(yùn)維面試100問(wèn)
《DBA》db的介紹使用(mysql、redis、mongodb...)
一、Redis簡(jiǎn)介
1.redis是什么
CopyRedis是一款開(kāi)源的,ANSI C語(yǔ)言編寫的,高級(jí)鍵值(key-value)緩存和支持永久存儲(chǔ)NoSQL數(shù)據(jù)庫(kù)產(chǎn)品。 Redis采用內(nèi)存(In-Memory)數(shù)據(jù)集(DataSet) 。 支持多種數(shù)據(jù)類型。 運(yùn)行于大多數(shù)POSIX系統(tǒng),如Linux、*BSD、OS X等。 ? redis就是非關(guān)系型數(shù)據(jù)庫(kù)的一種,存儲(chǔ)方式是:key:value
2.redis的作用
Copy1.會(huì)話保持(鍵過(guò)期) 2.緩存(放在數(shù)據(jù)庫(kù)前面,memcache,mongodb) 3.消息隊(duì)列(kafka)
3.為什么要用Redis
Copy1.redis功能全面 2.redis企業(yè)使用率高
4.redis優(yōu)點(diǎn)
Copy1.高速讀寫將所有數(shù)據(jù)存儲(chǔ)在內(nèi)存,單線程服務(wù),使用C語(yǔ)言 2.部署簡(jiǎn)單,使用穩(wěn)定 3.數(shù)據(jù)類型豐富String: 字符串類型Hash: 哈希類型List: 列表類型Set: 集合類型Sorted set: 順序集合類型 4.支持持久化將內(nèi)存的數(shù)據(jù)寫入磁盤 5.多種內(nèi)存分配及回收策略 6.支持事物、鎖 7.消息隊(duì)列、消息訂閱 8.支持高可用哨兵模式 9.支持分布式分片集群 10.支持的客戶端語(yǔ)言很多java,php,python,nodejs,C語(yǔ)言 ? 11.redis為什么速度快呢:· 因?yàn)榇鎯?chǔ)在內(nèi)存當(dāng)中,所以讀寫數(shù)據(jù)的時(shí)候不會(huì)受到磁盤i/o速度的限制,所以速度極快 12.redis為什么要部署多實(shí)例呢:· 因?yàn)閞edis是使用單線程方式,所以無(wú)法發(fā)揮多核cpu的性能,所以可能通過(guò)多實(shí)例來(lái)完善 13.為什么redis要基于單線程呢?· 單線程在每秒就能抗住10萬(wàn)+的并發(fā),速度已經(jīng)非??炝?#xff0c;所以就沒(méi)有考慮多線程,畢竟也比較復(fù)雜,但是在redis4.0版本之后就 ? ? ? 在某些功能上進(jìn)行多線程操作
5.redis幫助
Copy官方網(wǎng)站:https://redis.io/ 下載網(wǎng)站:http://download.redis.io/releases/ 幫助網(wǎng)站:http://redisdoc.com/
6.緩存服務(wù)對(duì)比
Copy#Memcached: 1.優(yōu)點(diǎn):高性能讀寫、單一數(shù)據(jù)類型、支持客戶端式分布式集群、一致性hash多核結(jié)構(gòu)、多線程讀寫性能高。 2.缺點(diǎn):無(wú)持久化、節(jié)點(diǎn)故障可能出現(xiàn)緩存穿透、分布式需要客戶端實(shí)現(xiàn)、跨機(jī)房數(shù)據(jù)同步困難、架構(gòu)擴(kuò)容復(fù)雜度高 ? #Redis: 1.優(yōu)點(diǎn):高性能讀寫、多數(shù)據(jù)類型支持、數(shù)據(jù)持久化、高可用架構(gòu)、支持自定義虛擬內(nèi)存、支持分布式分片集群、單線程讀寫性能極高 2.缺點(diǎn):多線程讀寫較Memcached慢 ? #Tair: 1.優(yōu)點(diǎn):高性能讀寫、支持三種存儲(chǔ)引擎(ddb、rdb、ldb)、支持高可用、支持分布式分片集群、支撐了幾乎所有淘寶業(yè)務(wù)的緩存。 2.缺點(diǎn):單機(jī)情況下,讀寫性能較其他兩種產(chǎn)品較慢 ? #對(duì)比結(jié)論: 1.Memcached:多核的緩存服務(wù),更加適合于多用戶并發(fā)訪問(wèn)次數(shù)(訪問(wèn)次數(shù)較少的應(yīng)用場(chǎng)景)。 2.Redis:單核緩存服務(wù),在單節(jié)點(diǎn)情況下,更加適合少量用戶,多次訪問(wèn)的應(yīng)用場(chǎng)景。
二、Redis使用場(chǎng)景
Copy1.緩存放在數(shù)據(jù)庫(kù)前面 2.會(huì)話保持登錄cookie、session折扣券,代金券 3.排行榜 4.計(jì)數(shù)器論壇帖子點(diǎn)贊點(diǎn)踩 5.社交軟件QQ共同好友,微博共同愛(ài)好 6.消息隊(duì)列結(jié)合ELK做日志收集
三、redis搭建
1.下載軟件包
Copy[root@db01 ~]# rz redis-3.2.12.tar.gz 或者 [root@db01 ~]# wget http://download.redis.io/releases/redis-3.2.12.tar.gz
2.安裝依賴
Copy[root@db01 ~]# yum install -y gcc gcc-c++
3.解壓移動(dòng)
Copy[root@db01 ~]# tar xf redis-3.2.12.tar.gz [root@db01 ~]# mv redis-3.2.12 /usr/local/ [root@db01 ~]# ln -s /usr/local/redis-3.2.12 /usr/local/redis
4.安裝
Copy[root@db01 ~]# cd /usr/local/redis [root@db01 redis]# make
5.啟動(dòng)redis
Copy[root@db01 redis]# ./src/redis-server & ? [root@db01 redis]# netstat -lntp ? tcp ? ? ? ?0 ? ? ?0 0.0.0.0:6379 ? ? ? ? ? ?0.0.0.0:* ? ? ? ? ? ? ? LISTEN ? ? ?11759/./src/redis-s
6.連接redis
Copy#配置環(huán)境變量 [root@db01 redis]# vim /etc/profile.d/redis.sh export PATH=/usr/local/redis/src:$PATH ? #連接 [root@db01 redis]# redis-cli 127.0.0.1:6379>
7.關(guān)閉redis
Copy[root@db01 redis]# redis-cli shutdown 11759:M 03 Aug 10:20:20.535 # User requested shutdown... 11759:M 03 Aug 10:20:20.535 * Saving the final RDB snapshot before exiting. 11759:M 03 Aug 10:20:20.546 * DB saved on disk 11759:M 03 Aug 10:20:20.546 # Redis is now ready to exit, bye bye... [1]+ Done ? ? ? ? ? ? ? ? ? ./src/redis-server ? ? [root@db01 redis]# redis-cli 127.0.0.1:6379> shutdown 11851:M 03 Aug 10:20:59.580 # User requested shutdown... 11851:M 03 Aug 10:20:59.580 * Saving the final RDB snapshot before exiting. 11851:M 03 Aug 10:20:59.584 * DB saved on disk 11851:M 03 Aug 10:20:59.584 # Redis is now ready to exit, bye bye... not connected> quit [1]+ Done ? ? ? ? ? ? ? ? ? ./src/redis-server
四、redis配置文件
1.配置
Copy#默認(rèn)的配置文件 [root@db01 redis]# pwd /usr/local/redis [root@db01 redis]# ll -rw-rw-r-- ?1 root root 46695 Jun 13 ?2018 redis.conf ? #創(chuàng)建reids配置文件目錄 [root@db01 redis]# mkdir /service/redis/6379 -p ? #編寫配置文件 [root@db01 redis]# vim /service/redis/6379/redis.conf bind 172.16.1.51 127.0.0.1 ? ? ? ? ? #綁定的主機(jī)地址 port 6379 ? #端口 daemonize no ? ? ? ? ? #守護(hù)進(jìn)程模式啟動(dòng) pidfile /service/redis/6379/redis_6379.pid ? ? ? ? ? ? ? ? ? ? ? ? ? #指定pid文件 loglevel notice ?#指定日志級(jí)別 logfile /service/redis/6379/redis_6379.log ? ? ? ? ? ? ? ? ? ? ? ? ?#指定日志文件 databases 16 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#設(shè)置數(shù)據(jù)庫(kù)的數(shù)量,默認(rèn)數(shù)據(jù)庫(kù)為0 dbfilename redis_6379.rdb ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #指定本地持久化文件的文件名,默認(rèn)是dump.rdb dir /etc/redis/6379 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #持久化數(shù)據(jù)文件存儲(chǔ)地址
2.指定配置文件啟動(dòng)
Copy[root@db01 redis]# redis-server /service/redis/6379/redis.conf
五、redis操作
1.基本操作
Copy1.連接redis[root@db01 redis]# redis-cli 127.0.0.1:6379> 2.查看所有數(shù)據(jù)127.0.0.1:6379> keys *(empty list or set)#查看時(shí)注意不要輕易使用,如想查看數(shù)據(jù),先查看數(shù)據(jù)量DBSIZE127.0.0.1:6379> DBSIZE(integer) 2018041 3.添加數(shù)據(jù)127.0.0.1:6379> set k1 v1OK 4.查看數(shù)據(jù)127.0.0.1:6379> keys *1) "k1"127.0.0.1:6379> get k1"v1" 5.刪除數(shù)據(jù)127.0.0.1:6379> keys *1) "k1"127.0.0.1:6379> DEL k1(integer) 1127.0.0.1:6379> keys *(empty list or set) 6.修改數(shù)據(jù)127.0.0.1:6379> set k1 v1OK127.0.0.1:6379> set k1 v11111OK127.0.0.1:6379> get k1"v11111" 7.追加數(shù)據(jù)127.0.0.1:6379> APPEND k1 000000(integer) 12127.0.0.1:6379> get k1"v11111000000" 8.切換庫(kù)127.0.0.1:6379> SELECT 1OK127.0.0.1:6379[1]> SELECT 2OK127.0.0.1:6379[2]> SELECT 3OK127.0.0.1:6379> SELECT 16(error) ERR invalid DB index
2.密碼的設(shè)置
Copy1.配置文件配置密碼[root@db01 redis]# vim redis.conf requirepass 123 2.使用密碼連接[root@db01 redis]# redis-cli -a 123 3.登陸后輸入密碼[root@db01 redis]# redis-cli127.0.0.1:6379> AUTH 123OK127.0.0.1:6379> DBSIZE(integer) 2018041 4.redis連接后獲取密碼127.0.0.1:6379> CONFIG GET requirepass1) "requirepass"2) "123" 5.redis連接后修改密碼127.0.0.1:6379> CONFIG set requirepass 234OK[root@db01 redis]# redis-cli127.0.0.1:6379> DBSIZE(error) NOAUTH Authentication required.127.0.0.1:6379> auth 123(error) ERR invalid password127.0.0.1:6379> auth 234OK
3.通用操縱
Copy1.判斷key是否存在127.0.0.1:6379> EXISTS k1(integer) 1 #存在則返回1127.0.0.1:6379> EXISTS k2(integer) 0 #不存在則返回0 ? 狀態(tài)碼: 0 ? 表示這個(gè)key不存在 1 ? 表示這個(gè)key存在 N ? 表示有的N個(gè)key存在 ? 2.修改key的名字127.0.0.1:6379> KEYS *1) "k1"127.0.0.1:6379> RENAME k1 k100OK127.0.0.1:6379> KEYS *1) "k100" 3.查看數(shù)據(jù)類型127.0.0.1:6379> TYPE k100string 4.設(shè)置生存時(shí)間#以秒為單位127.0.0.1:6379> EXPIRE qiudao 10(integer) 1#以毫秒為單位127.0.0.1:6379> PEXPIRE k100 10000(integer) 1 5.查看生存時(shí)間127.0.0.1:6379> TTL k100(integer) 1 #正整數(shù)生存時(shí)間倒計(jì)時(shí)127.0.0.1:6379> TTL k100(integer) -1 #-1代表沒(méi)有設(shè)置生存時(shí)間127.0.0.1:6379> TTL k100(integer) -2 #代表設(shè)置過(guò)生存時(shí)間已刪除,已過(guò)期 6.取消生存時(shí)間127.0.0.1:6379> TTL qiudao(integer) 93127.0.0.1:6379> PERSIST qiudao(integer) 1127.0.0.1:6379> TTL qiudao(integer) -1
六、持久化
1.什么是持久化
Copy將內(nèi)存中的數(shù)據(jù)寫入到磁盤,永久保存
2.持久化的模式
Copy1.RDB模式 2.AOF模式
3.RDB和AOF優(yōu)缺點(diǎn)
Copy1.RDB和AOF優(yōu)缺點(diǎn) RDB: 可以在指定的時(shí)間間隔內(nèi)生成數(shù)據(jù)集的時(shí)間點(diǎn)快照,把當(dāng)前內(nèi)存里的狀態(tài)快照到磁盤上 優(yōu)點(diǎn): 壓縮格式/恢復(fù)速度快,適用于備份,主從復(fù)制也是基于rdb持久化功能實(shí)現(xiàn) 缺點(diǎn): 可能會(huì)丟失數(shù)據(jù) ? AOF: 類似于mysql的binlog,重寫,、每次操作都寫一次/1秒寫一次,文件中的命令全部以redis協(xié)議的格式保存,新命令會(huì)被追加到文件的末尾 優(yōu)點(diǎn): 安全,有可能會(huì)丟失1秒的數(shù)據(jù) 缺點(diǎn): 文件比較大,恢復(fù)速度慢
4.RDB模式
Copy可以在指定的時(shí)間間隔內(nèi)生成數(shù)據(jù)集的時(shí)間點(diǎn)快照(point-in-time snapshot)
1)RDB工作模式
Copy1.默認(rèn)情況下,Redis保存數(shù)據(jù)集快照到磁盤,名為dump.rdb的二進(jìn)制文件。你可以設(shè)置讓Redis在N秒內(nèi)至少有M次數(shù)據(jù)集改動(dòng)時(shí)保存數(shù)據(jù)集,或者你也可以手動(dòng)調(diào)用SAVE或者BGSAVE命令。 ? 2.在上文中我們已經(jīng)在配置文件中做過(guò)對(duì)應(yīng)的配置: 例如,這個(gè)配置會(huì)讓Redis在每個(gè)60秒內(nèi)至少有1000次鍵改動(dòng)時(shí)自動(dòng)轉(zhuǎn)儲(chǔ)數(shù)據(jù)集到磁盤: save 60 1000 ? 3.當(dāng) Redis 需要保存 dump.rdb 文件時(shí),服務(wù)器執(zhí)行以下操作: Redis 調(diào)用 fork() ,同時(shí)擁有父進(jìn)程和子進(jìn)程。 子進(jìn)程將數(shù)據(jù)集寫入到一個(gè)臨時(shí)的 RDB 文件中。當(dāng)子進(jìn)程完成對(duì)新 RDB 文件的寫入時(shí), Redis 用新RDB 文件替換原來(lái)的 RDB 文件,并刪除舊的 RDB 文件。 ? 4.這種方式使得 Redis 可以從寫時(shí)復(fù)制機(jī)制中獲益。
2)配置RDB持久化
Copy#編輯配置文件 [root@db01 ~]# vim /service/redis/6379/redis.conf bind 172.16.1.51 127.0.0.1 port 6379 daemonize yes pidfile /service/redis/6379/redis_6379.pid loglevel notice logfile /service/redis/6379/redis_6379.log #設(shè)置redis密碼 requirepass 123 #持久化數(shù)據(jù)文件存儲(chǔ)位置 dir /etc/redis/6379 #rdb持久化數(shù)據(jù)文件名 dbfilename dump.rdb #900秒(15分鐘)內(nèi)有1個(gè)更改 save 900 1 #300秒(5分鐘)內(nèi)有10個(gè)更改 save 300 10 #60秒(1分鐘)內(nèi)有10000個(gè)更改 save 60 10000
3)使用RDB文件
Copy1.先停止redis 2.將rdb文件放到指定目錄下 3.啟動(dòng)redis ? 結(jié)論: 1.執(zhí)行shutdown的時(shí)候,內(nèi)部會(huì)自動(dòng)執(zhí)行bgsave,然后再執(zhí)行shutdown 2.pkill kill killall 都類似于執(zhí)行shutdown命令.會(huì)觸發(fā)bgsave持久化 3.恢復(fù)的時(shí)候,rdb文件名稱要和配置文件里寫的一樣 4.如果沒(méi)有配置save參數(shù),執(zhí)行shutdown不會(huì)自動(dòng)bgsave持久化 5.如果沒(méi)有配置save參數(shù),可以手動(dòng)執(zhí)行bgsave觸發(fā)持久化保存 6.kill -9 redis 不會(huì)出發(fā)持久化