redis是什么
一種nosql數(shù)據(jù)庫,基于鍵-值型的存儲。
redis的所有功能都是在內(nèi)存中完成,所以性能比較高。
redis的優(yōu)勢
- 豐富的數(shù)據(jù)類型
- 字符串類型 string
- 哈希類型 hash
- 列表類型 list
- 集合類型 set
- 有序集合類型 sortedset
- 高性能
- 100萬較小的鍵存儲字符串,大概消耗100M內(nèi)存
- 由于redis是單線程,如果服務(wù)器主機上有多個CPU,只有一個能夠使用,但并不意味著CPU會成為瓶頸,因為redis是一個比較簡單的K-V數(shù)據(jù)存儲,CPU通常不會成為瓶頸的
- 在常見的linux服務(wù)器上,500K(50萬)的并發(fā),只需要一秒鐘處理,如果主機硬件較好的情況下,每秒鐘可以達到上百萬的并發(fā)
redis的應(yīng)用場景
- 緩存(數(shù)據(jù)查詢、短連接、新聞內(nèi)容、商品內(nèi)容等等)
- 聊天室的在線好友列表
- 任務(wù)隊列。(秒殺、搶購、12306等等)
- 應(yīng)用排行榜
- 網(wǎng)站訪問統(tǒng)計
- 數(shù)據(jù)過期處理(可以精確到毫秒)
- 分布式集群架構(gòu)中的session分離
下載安裝
- Linux下源碼安裝
# 下載安裝包
wget http://download.redis.io/releases/redis-4.0.9.tar.gz
# 解壓到/usr/local/redis目錄
tar xzf redis-4.0.9.tar.gz
mv ./redis-4.0.9 /usr/local/redis/
cd /usr/local/redis/
# 生成
make MALLOC=libc
# 將redis命令安裝到/usr/local/bin目錄
make install
# 安裝完成后,我們進入目錄/usr/local/bin中查看
cd /usr/local/bin
ls -all
* redis-server redis服務(wù)器
* redis-cli redis命令行客戶端
* redis-benchmark redis性能測試工具
* redis-check-aof AOF文件修復(fù)工具
* redis-check-rdb RDB文件檢索工具
# 移動配置文件到/etc/redis目錄下
cp /usr/local/redis/redis.conf /etc/redis/
# 啟動服務(wù)
/usr/local/bin/redis-server /etc/redis/redis.conf
# 客戶端連接
./redis-cli -h 127.0.0.1 -p 6379 -a "123456"
# 關(guān)閉redis服務(wù)端
./redis-cli -h 127.0.0.1 -p 6379 -a "123456" shutdown
# 查看redis運行狀態(tài)
ps aux|grep redis
- rpm方式安裝
yum -y localinstall redis-4.0.6-1.el7.remi.x86_64.rpm
systemctl start redis
- Docker方式安裝
# 拉取鏡像
docker pull redis:5.0.5-alpine
# 根據(jù)鏡像創(chuàng)建容器
docker run -d -p 6379:6379 --name redis-01 redis:5.0.5-alpine --requirepass "mypassword"
redis配置
/etc/redis.conf
# 基礎(chǔ)配置
daemonize no # 表示redis并不會運行成為一個守護進程,如果需要運行成為一個守護進程,則把no,改為yes即可
port 6379 # 監(jiān)聽端口
# 指定tcp-backlog的長度
# 任何的tcp服務(wù)都有可能使用到tcp-backlog功能,backlog是一個等待隊列
# 比如:redis的并發(fā)很高時,redis有可能運行不過來時,就連接本地緩存等隊列都滿了以后,
# 就會使用額外的存儲地方,把新來的請求暫存下來,而這個位置則稱為backlog
tcp-backlog 511 #
bind 127.0.0.1 #監(jiān)聽的地址,默認監(jiān)聽在127.0.0.1地址上,可以指定為0.0.0.0地址,或某個特定的地址,或可以指定多個,使用空格分隔即可
unixsocket /tmp/redis.sock #指定使用sock文件通信及sock文件位置,如果服務(wù)端和客戶都在同一臺主機上,建議打開此項,基于sock方式通信可以直接在內(nèi)存中交換,數(shù)據(jù)不用再經(jīng)過TCP/TP協(xié)議棧進行封裝、拆封
timeout 0 #表示當客戶端連接成功后,空閑(非活躍、或沒有任何數(shù)據(jù)交互)多長時間則連接超時,0表示不啟用此功能
tcp-keepalive 0 //定義是否啟用tcp-keepalive功能
loglevel notice //定義日志級別
logfile /var/log/redis/redis.log //定義日志文件
databases 16 //定義redis默認有多少個databases,但是在分布式中,只能使用一個
# 持久化
save <seconds> <changes> //使用save指令,并指定每隔多少秒,如果發(fā)生多大變化,進行存儲
示例:
save 900 1 //表示在900秒(15分鐘內(nèi)),如果至少有1個鍵發(fā)生改變,則做一次快照(持久化)
save 300 10 //表示在300秒(5分鐘內(nèi)),如果至少有10個鍵發(fā)生改變,則做一次快照(持久化)
save 60 10000 //表示在60秒(1分鐘內(nèi)),如果至少有10000個鍵發(fā)生改變,則做一次快照(持久化)
save "" //如果redis中的數(shù)據(jù)不需做持久化,只是作為緩存,則可以使用此方式關(guān)閉持久化功能
# 主從配置
slaveof <masterip> <masterport> //此項不啟用時,則為主,如果啟動則為從,但是需要指明主服務(wù)器的IP,端口
masterauth <master-password> //如果主服務(wù)設(shè)置了密碼認證,那么從的則需要啟用此項并指明主的認證密碼
slave-read-only yes //定義從服務(wù)對主服務(wù)是否為只讀(僅復(fù)制)
# 定義與連接和資源限制相關(guān)的配置
maxclients 10000 //定義最大連接限制(并發(fā)數(shù))
maxmemory <bytes> //定義使用主機上的最大內(nèi)存,默認此項關(guān)閉,表示最大將使用主機上的最大可用內(nèi)存
# 定義AOF的持久化功能相關(guān)配置,一旦有某一個鍵發(fā)生變化,將修改鍵的命令附加到命令列表的文件中,類似于MySQL二進制日志
appendonly no //定義是否開啟此功能,no表示關(guān)閉,yes表示開啟
說明:RDB和AOF兩種持久功能可以同時啟用,兩者不影響
登陸redis
redis-cli -h
redis-cli -h 192.168.1.63 //連接redis,默認不啟用密碼認證
redis-cli //使用redis-cli直接連接,默認連接是127.0.0.1 IP
exit //退出連接
選項:
-h <hostname> 指定主機IP
-p <port> 指定端口socket文件進行通信
-s <socket> 指定socket文件,如果客戶端和服務(wù)端都在同一臺主機,可以指定socket文件進行通信
-a <password> 指定認證密碼
-r <repeat> 連接成功后指定運行的命令N次
-i <interval> 連接成功后每個命令執(zhí)行完成等待時間,使用-i選項指定
-n <db>