1. 安裝redis
yum install redis 或wget官網(wǎng)的最新版本
配置文件默認(rèn)在/etc/redis.conf
redis-benchmark 性能測試工具
redis-check-aof appendonly.aof日志校驗(yàn)工具
redis-check-dump?dump.rdb日志校驗(yàn)工具
redis-cli redis 客戶端
redis-server redis服務(wù)器端
2. redis服務(wù)的啟動(dòng)和redis客戶端的連接
啟動(dòng):redis-server /etc/redis.conf
cli連接:redis-cli 或者telnet ip port, 不建議用telnet,因?yàn)闆]有智能命令行
3. redis配置文件全解
==基本配置
daemonize no 是否以后臺(tái)進(jìn)程啟動(dòng)
databases 16 創(chuàng)建database的數(shù)量(默認(rèn)選中的是database 0)
save 900 1? ? #刷新快照到硬盤中急前,必須滿足兩者要求才會(huì)觸發(fā)粱侣,即900秒之后至少1個(gè)關(guān)鍵字發(fā)生變化。
save 300 10? #必須是300秒之后至少10個(gè)關(guān)鍵字發(fā)生變化熄云。
save 60 10000 #必須是60秒之后至少10000個(gè)關(guān)鍵字發(fā)生變化葫录。
stop-writes-on-bgsave-error yes? ? #后臺(tái)存儲(chǔ)錯(cuò)誤停止寫剧董。
rdbcompression yes? ? #使用LZF壓縮rdb文件。
rdbchecksum yes? ? #存儲(chǔ)和加載rdb文件時(shí)校驗(yàn)茫负。
dbfilename dump.rdb? ? #設(shè)置rdb文件名蕉鸳。
dir ./? ? #設(shè)置工作目錄,rdb文件會(huì)寫入該目錄。
==主從配置
slaveof <masterip> <masterport> 設(shè)為某臺(tái)機(jī)器的從服務(wù)器
masterauth <master-password>? 連接主服務(wù)器的密碼
slave-serve-stale-data yes? # 當(dāng)主從斷開或正在復(fù)制中,從服務(wù)器是否應(yīng)答
slave-read-only yes #從服務(wù)器只讀
repl-ping-slave-period 10 #從ping主的時(shí)間間隔,秒為單位
repl-timeout 60 #主從超時(shí)時(shí)間(超時(shí)認(rèn)為斷線了),要比period大
slave-priority 100? ? #如果master不能再正常工作潮尝,那么會(huì)在多個(gè)slave中榕吼,選擇優(yōu)先值最小的一個(gè)slave提升為master,優(yōu)先值為0表示不能提升為master勉失。
repl-disable-tcp-nodelay no #主端是否合并數(shù)據(jù),大塊發(fā)送給slave
slave-priority 100 從服務(wù)器的優(yōu)先級(jí),當(dāng)主服掛了,會(huì)自動(dòng)挑slave priority最小的為主服
===安全
requirepass foobared # 需要密碼
rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 #如果公共環(huán)境,可以重命名部分敏感命令 如config
===限制
maxclients 10000 #最大連接數(shù)
maxmemory <bytes> #最大使用內(nèi)存
maxmemory-policy volatile-lru #內(nèi)存到極限后的處理
volatile-lru -> LRU算法刪除過期key
allkeys-lru -> LRU算法刪除key(不區(qū)分過不過期)
volatile-random -> 隨機(jī)刪除過期key
allkeys-random -> 隨機(jī)刪除key(不區(qū)分過不過期)
volatile-ttl -> 刪除快過期的key
noeviction -> 不刪除,返回錯(cuò)誤信息
#解釋 LRU ttl都是近似算法,可以選N個(gè),再比較最適宜T踢出的數(shù)據(jù)
maxmemory-samples 3
====日志模式
appendonly no #是否需要AOF日志
appendfsync no # 系統(tǒng)緩沖,統(tǒng)一寫,速度快
appendfsync always # 系統(tǒng)不緩沖,直接寫,慢,丟失數(shù)據(jù)少
appendfsync everysec #折衷,每秒寫1次
no-appendfsync-on-rewrite no #為yes,則其他線程的數(shù)據(jù)放內(nèi)存里,合并寫入(速度快,容易丟失的多)
auto-AOF-rewrite-percentage 100 當(dāng)前aof文件是上次重寫是大N%時(shí)重寫
auto-AOF-rewrite-min-size 64mb aof重寫至少要達(dá)到的大小
====慢查詢
slowlog-log-slower-than 10000 #記錄響應(yīng)時(shí)間大于10000微秒的慢查詢
slowlog-max-len 128? # 最多記錄128條
====服務(wù)端命令
time? 返回時(shí)間戳+微秒
dbsize 返回key的數(shù)量
bgrewriteaof 重寫aof
bgsave 后臺(tái)開啟子進(jìn)程dump數(shù)據(jù)
save 阻塞進(jìn)程dump數(shù)據(jù)
lastsave
slaveof host port 做host port的從服務(wù)器(數(shù)據(jù)清空,復(fù)制新主內(nèi)容)
slaveof no one 變成主服務(wù)器(原數(shù)據(jù)不丟失,一般用于主服失敗后)
flushdb? 清空當(dāng)前數(shù)據(jù)庫的所有數(shù)據(jù)
flushall 清空所有數(shù)據(jù)庫的所有數(shù)據(jù)(誤用了怎么辦?)
shutdown [save/nosave] 關(guān)閉服務(wù)器,保存數(shù)據(jù),修改AOF(如果設(shè)置)
slowlog get 獲取慢查詢?nèi)罩?/p>
slowlog len 獲取慢查詢?nèi)罩緱l數(shù)
slowlog reset 清空慢查詢
info []
config get 選項(xiàng)(支持*通配)
config set 選項(xiàng) 值
config rewrite 把值寫到配置文件
config restart 更新info命令的信息
debug object key #調(diào)試選項(xiàng),看一個(gè)key的情況
debug segfault #模擬段錯(cuò)誤,讓服務(wù)器崩潰
object key (refcount|encoding|idletime)
monitor #打開控制臺(tái),觀察命令(調(diào)試用)
client list #列出所有連接
client kill #殺死某個(gè)連接? CLIENT KILL 127.0.0.1:43501
client getname #獲取連接的名稱 默認(rèn)nil
client setname "名稱" #設(shè)置連接名稱,便于調(diào)試
====連接命令===
auth 密碼 #密碼登陸(如果有密碼)
ping #測試服務(wù)器是否可用
echo "some content" #測試服務(wù)器是否正常交互
select 0/1/2... #選擇數(shù)據(jù)庫
quit #退出連接
4. redis 常用命令
見官網(wǎng) https://redis.io/commands
常用
select move
set mset get mget getset?keys rename renamenx randomkey exist type
ttl expire persist
incr incrby decr decrby
鏈表
lpush rpush lrange lrem(刪特定值) ltrim(截取指定范圍的值) lindex(獲取指定index的值) llen linsert
rpop|lpush task job(實(shí)現(xiàn)原子的將task任務(wù)隊(duì)列移到處理任務(wù)中羹蚣,并保證不丟失每個(gè)task)
字節(jié)操作
bitcount bitfield bitop bitpos getbit setbit
用位圖法統(tǒng)計(jì)用戶登錄情況,節(jié)省內(nèi)存和空間
無序集合
sadd smembers srem(刪指定值) spop(隨機(jī)刪除一個(gè)值) sismember scard(獲取元素個(gè)數(shù))?
smove(在2個(gè)集合中移動(dòng)元素) sinter(求交集) sunion(求并集) sdiff(求差集)
有序集合?
zadd zrange乱凿。顽素。。徒蟆。胁出。。 能實(shí)現(xiàn)部分聚合運(yùn)算和類sql的運(yùn)算
hash
hset hmset hgetall hdel hlen hexists hinrby
事務(wù)操作---->訂票系統(tǒng)
watch multi exec discard unwatch
pub/sub發(fā)布訂閱模式-----> 在線聊天段审,消息推送
publish subscribe psubscribe(同時(shí)監(jiān)聽多個(gè)頻道)
5. 主從配置方案
1主2從
master:
關(guān)閉dump.rdb開啟aof
slave:
指定slave-of
某個(gè)slave開dump.rdb功能
配置從為只讀模式全蝶,否則出現(xiàn)主從不同步問題
6. 運(yùn)維相關(guān)
6.1 運(yùn)維常用命令
TIME 查看時(shí)間戳與微秒數(shù)
DBSIZE 查看當(dāng)前庫中的key數(shù)量
BGREWRITEAOF 后臺(tái)進(jìn)程重寫AOF
BGSAVE?????? 后臺(tái)保存rdb快照
SAVE???????? 保存rdb快照
LASTSAVE???? 上次保存時(shí)間
SLAVEOF????? 設(shè)為slave服務(wù)器
FLUSHALL???? 清空所有db
FLUSHDB????? 清空當(dāng)前db
SHUTDOWN[""|save|nosave]???? 斷開連接,關(guān)閉服務(wù)器
SLOWLOG?? 顯示慢查詢
INFO????? 顯示服務(wù)器信息
CONFIG GET 獲取配置信息
CONFIG SET 設(shè)置配置信息
MONITOR??? 打開控制臺(tái)
SYNC?????? 主從同步
CLIENT LIST 客戶端列表
CLIENT KILL 關(guān)閉某個(gè)客戶端
CLIENT SETNAME 為客戶端設(shè)置名字
CLIENT GETNAME 獲取客戶端名字
6.2 運(yùn)維查看redis狀態(tài)
1: 內(nèi)存
#Memory
used_memory:859192
數(shù)據(jù)結(jié)構(gòu)的空間
used_memory_rss:7634944
實(shí)占空間
mem_fragmentation_ratio:8.89
前2者的比例,1.N為佳
2:
主從復(fù)制
#Replication
role:slave
master_host:192.168.1.128
master_port:6379
master_link_status:up
3:持久化
#Persistence
rdb_changes_since_last_save:0
rdb_last_save_time:1375224063
4:fork耗時(shí)
#Status
latest_fork_usec:936? 上次持久化花費(fèi)微秒
5:慢日志
config
get/set slowlog-log-slower-than
CONFIG
get/SET slowlog-max-len
slow
log get 獲取慢日志
7. redis key 設(shè)計(jì)技巧
7.1 基本設(shè)計(jì)
1. 把表名轉(zhuǎn)換為key前綴如, tag:
2: 第2段放置用于區(qū)分區(qū)key的字段--對應(yīng)mysql中的主鍵的列名,如userid
3: 第3段放置主鍵值,如2,3,4...., a , b ,c
4: 第4段,寫要存儲(chǔ)的列名
7.2 類似索引設(shè)計(jì)
需要建索引的定義在前面
之后在在7.1中進(jìn)行詳細(xì)查詢