記錄一下redis 常見的命令,redis練習(xí)命令官網(wǎng)
啟動(dòng)停止命令
-
啟動(dòng)
redis-server以配置項(xiàng)的方式啟動(dòng)
redis-server --{configKey1} {configvalure1}配置文件方式啟動(dòng)
redis-server /opt/redis/redis.conf -
停止
使用redis-cli 客戶端redis-cli shutdown [nosave|save]redis 關(guān)閉過程:
- 斷開與客戶端的連接
- 持久化文件生成
關(guān)于持久化文件的生成可以是用save|nosave選項(xiàng)控制
redis-cli
redis-cli -h {server_ip} -p {port} -a {password}
數(shù)據(jù)庫命令
-
切換數(shù)據(jù)庫
select {dbindex}redis 默認(rèn)配置0到15 總共16個(gè)數(shù)據(jù)庫,各個(gè)數(shù)據(jù)庫之間的數(shù)據(jù)沒有關(guān)聯(lián)。
-
清除當(dāng)前數(shù)據(jù)庫
flushdb -
清除所有的數(shù)據(jù)庫
flushall
鍵管理相關(guān)命令
-
查看所有鍵
keys * -
鍵總數(shù)
dbsize -
檢查鍵是否存在
exist {key} -
刪除鍵
del {key} -
鍵的數(shù)據(jù)結(jié)構(gòu)類型
type {key} -
鍵的內(nèi)部編碼
object encoding {key}鍵一共有5種,但其類型編碼有多種
image.png
鍵過期相關(guān)
- 鍵過期
expire {key} seconds
字符串
-
設(shè)置值
set {key} {value} [ex {seconds}] [px {milliseconds}] [nx|xx] -
獲取值
get {key}如果獲取的鍵不存在,則返回
nil -
批量設(shè)置值
mset {key} {value} {key} {value} ... -
批量獲取值
mget {key} {key} ... -
計(jì)數(shù)
incr {key}結(jié)果分為3種情況:
- 值不是整數(shù)
- 值是整數(shù),返回自增后的結(jié)果
- 鍵不存在,按照值為0自增,返回結(jié)果為1
類似的,還提供了自減命令decr {key},自增指定數(shù)字incrby {key} {increment},自減指定數(shù)字decrby {key} {decrement},自增浮點(diǎn)數(shù)incrbyfloat key increment
-
追加
append {key} {value} -
返回value的長度
strlen {key}
哈希
- 設(shè)置
設(shè)置成功返回1,反之返回0hset {key} {field} {value} eg: hset user:1 name tom - 獲取
如果鍵不存在,則返回hget {key} {field} eg: hget user1:1 namenil - 批量設(shè)置
- 批量獲取
- 刪除
返回刪除的個(gè)數(shù)hdel {key} {field} {field} ... - 計(jì)算個(gè)數(shù)
hlen key - 判斷 field 是否存在
{key}中包含{field}域,返回1,不包含返回0hexists {key} {field} - 獲取所有的 field
hkeys {key} - 獲取所有的 value
hvals {key} - 獲取所有的 field-value
hgetall {key}
列表
-
添加
-
從右向左插入元素
rpush {key} {value} {value} ...eg: rpush list 100 4 89 55 11,將會是:
image.png -
從左向右插入元素
lpush {key} {value} {value} ...eg: lpush list 100 4 89 55 11,將會是:
image.png -
向某個(gè)元素的前或者后插入元素
linsert {key} befor|after {pivot} {value}
-
-
查詢
- 獲取指定范圍的元素
lrange {key} {start} {end} - 獲取指定索引的元素
lindex {key} {index}
- 獲取指定范圍的元素
-
獲取列表元素?cái)?shù)量
llen {key} -
刪除
- 從左側(cè)彈出元素
lpop {key} - 從右側(cè)彈出元素
rpop {key} - 刪除指定元素
從列表中找到等于value的元素,按照count的不同分為3種情況lrem {key} {count} {value}- count > 0
- count < 0
- count = 0 刪除所有
- 從左側(cè)彈出元素
-
按照范圍修剪列表
ltrim {key} {start} {end} eg: ltrim lis 1 3 // 將會只保留第[2, 4] -
修改指定索引下標(biāo)的元素
lset {key} {index} {newValue} -
阻塞操作
bloop {key}
集合
集合中不允許有重復(fù)的元素,并且集合中的元素是無序的,不能通過下標(biāo)獲取元素。但是集合方便的是可以多個(gè)集合取交集,并集,差集。
集合的內(nèi)部編碼有2種:
- 添加元素
返回結(jié)果為添加成功的元素個(gè)數(shù)sadd {key} {element} [{element} ...] - 刪除元素
返回結(jié)果為刪除成功的元素個(gè)數(shù)srem {key} {element} [{element}...] - 計(jì)算元素個(gè)數(shù)
scard {key} - 判斷元素是否在集合中
sismember {key} {element} - 隨機(jī)從集合返回指定個(gè)數(shù)元素
[count]為可選參數(shù),默認(rèn)為1srandmember {key} [count] - 從集合隨機(jī)彈出元素
3.2版本后支持[count]為可選參數(shù),默認(rèn)為1spop {key} [count] - 獲取所有元素
smembers {key} - 求多個(gè)集合的交集
還可以將結(jié)果保存在新的集合中sinter {key} {key} ...sinterstore {destination} {key} {key} ... - 求多個(gè)集合的并集
還可以將結(jié)果保存在新的集合中sunion {key} {key}sunionstore {destination} {key} {key} ... - 求多個(gè)集合的差集
還可以將結(jié)果保存在新的集合中sdiff {key} {key}sdiffstore {destination} {key} {key} ...
有序集合
有序集合中的元素可以排序,它給每個(gè)元素設(shè)置一個(gè) score 作為排序的依據(jù)。

-
添加成員
zadd {key} {score} {member} [{score} {member} ...]有序集合相比集合提供了排序手段,但是也產(chǎn)生了代價(jià),
zadd時(shí)間復(fù)雜度為,sadd 的時(shí)間復(fù)雜度為
-
計(jì)算成員個(gè)數(shù)
zcard {key} -
查看成員分?jǐn)?shù)
zscore {key} {member}如果成員不存在,則返回
nil -
計(jì)算成員排名
zrank 按照從低到高的順序返回排名zrank {key} {member}zrevrank 按照從高到低的順序返回排名
zrevrank {key} {member} -
刪除成員
zrem {key} {member} [{member}...] -
增加成員分?jǐn)?shù)
zincrby {key} {increment} {member}例如下面,給 tom 增加 9分
> zincrby user:ranking 9 tom 260.0 -
返回指定排名范圍的成員
zrange 按照從低到高的順序zrange {key} {start} {end} [withscores]例如返回排名范圍 [0, 2]的元素:
> zrange user:ranking 0 2 1) "tina" 2) "tom" 3) "jack"如果加上
withscores,同時(shí)會返回成員的分?jǐn)?shù)> zrange user:ranking 0 2 1) "tina" 2) 201.0 3) "tom" 4) 251.0 5) "jack" 6) 300.0zrevrange 按照從高到低的順序
zrevrange {key} {start} {end} [withscores] -
返回指定分?jǐn)?shù)范圍的成員
zrangebyscore 按照從高到低的順序zrangebyscore {key} {min} {max} [withscores]例如返回 [200, 280] 范圍的元素
zrangebyscore user:ranking 200 280 1) "tina" 2) "tom"同時(shí) min 和 max 還支持2個(gè)特殊的
-inf+inf分表表示無窮小和無窮大。zrangebyscore user:ranking -inf +inf 1) "tina" 2) "tom" 3) "jack"zrevrangebyscore 按照從低到高的順序
zrevrangebyscore {key} {min} {max} [withscores] -
返回指定分?jǐn)?shù)范圍成員個(gè)數(shù)
zcount {key} {min} {max} -
刪除指定排名(升序)范圍內(nèi)的元素
zremrangebyrank {key} {start} {end}例如刪除排名[0, 2] 范圍內(nèi)的元素
> zremrangebyrank user:ranking 0 2 3 -
刪除指定分?jǐn)?shù)范圍內(nèi)的元素
zremrangebyscore {key} {min} {max}
Info 命令
使用Redis 時(shí),通常需要診斷很多問題,在診斷之前,可以通過強(qiáng)大的Info命令,可以清晰的知道Redis 內(nèi)部運(yùn)行的一系列參數(shù)。
Info 命令顯示的信息比較多,包括9大塊:
- Server 服務(wù)器運(yùn)行的環(huán)境參數(shù)
- Clients 客戶端相關(guān)信息
- Memory 服務(wù)器運(yùn)行內(nèi)存統(tǒng)計(jì)
- Persistence 持久化信息
- Stats 通用統(tǒng)計(jì)信息
- Replication 主從復(fù)制相關(guān)信息
- CPU CPU使用相關(guān)情況
- Cluster 集群信息
- KeySpace: 鍵值對統(tǒng)計(jì)數(shù)量信息
這里介紹一些常用的:
-
查看Redis 每秒執(zhí)行了多少次命令
Redis 每秒可以執(zhí)行10萬次命令,CPU 幾乎被完全榨干,
-
Redis 連接了多少客戶端
redis-client clients通過這個(gè)可以觀察是否確定意料之外的連接,如果發(fā)現(xiàn)數(shù)量不對勁,那么可以使用
client list指令列出所有的客戶端地址來進(jìn)一步確定。還需要注意的是,它表示因?yàn)槌鲎畲筮B接數(shù)限制而被拒絕的客戶端連接次數(shù),如果這個(gè)數(shù)字很大,那么意味著服務(wù)器最大連接數(shù)設(shè)置得過低,需要調(diào)整maxclients 參數(shù)。
-
Redis 內(nèi)存占用多大
redis-cli info memory如果redis內(nèi)存占用過大,并且在業(yè)務(wù)上沒有太多壓縮的空間,那么可以考慮集群化了。
-
復(fù)制積壓緩沖區(qū)多大
復(fù)制積壓緩沖區(qū)大小非常重要,它嚴(yán)重影響了主從復(fù)制的效率。當(dāng)從節(jié)點(diǎn)因?yàn)榫W(wǎng)絡(luò)原因臨時(shí)斷開了對主節(jié)點(diǎn)的復(fù)制,然后網(wǎng)絡(luò)恢復(fù)又重新連接上的時(shí)候,這段斷開的時(shí)間內(nèi)發(fā)生在主節(jié)點(diǎn)上的修改操作指令都會被放在積壓緩沖區(qū)內(nèi),這樣從節(jié)點(diǎn)可以通過積壓緩沖區(qū)恢復(fù)中斷的主從同步過程。
image.png積壓緩沖區(qū)是環(huán)形的,后來的指令會覆蓋掉前面的內(nèi)容,如果從節(jié)點(diǎn)斷開的時(shí)間過長,或者緩沖區(qū)的容量設(shè)置得太小,都會導(dǎo)致從節(jié)點(diǎn)無法快速恢復(fù)中斷的主從同步過程。
慢查詢相關(guān)
慢查詢?nèi)罩揪褪窍到y(tǒng)在命令執(zhí)行前后計(jì)算每條命令的執(zhí)行時(shí)間,當(dāng)超過預(yù)設(shè)閾值,就將這條命令的相關(guān)信息記錄下來。
-
慢查詢的兩個(gè)配置
slowlog-log-slower-than預(yù)設(shè)閾值,單位是微秒,默認(rèn)值是10000,值設(shè)置為0會記錄所有的命令。
slowlog-max-lenRedis 使用了一個(gè)列表來存儲慢查詢?nèi)罩荆?code>slowlog-max-len 就是列表的最大長度,當(dāng)慢查詢?nèi)罩疽呀?jīng)處于最大長度時(shí),最早插入的一條命令將會從列表中移除。在 Redis 中有兩種修改配置的方法:
- 修改配置文件
- 使用config set 命令動(dòng)態(tài)修改
config set slowlog-log-slower-than 20000 config set slowlog-max-len 1000 config rewrite # 可選,將當(dāng)前配置持久化到本地配置文件
- 配置建議
- 線上建議調(diào)大慢查詢列表
- 默認(rèn)值為10毫秒,對于高流量場景,如果命令執(zhí)行時(shí)間在1毫秒以上,則OPS最多可支撐不帶1000,所以高OPS場景,建議設(shè)置為1毫秒。
-
獲取慢查詢?nèi)罩?/p>
slowlog get [n] # n 指定條數(shù) 1) 1) (integer) 666 # 慢查詢標(biāo)識id 2) (integer) 1456786500 # 時(shí)間戳 3) (integer) 12006 # 記錄命令耗時(shí) 4) 1) "BGREWRITEAOF" # 命令 -
獲取慢查詢?nèi)罩玖斜淼漠?dāng)前的長度
slowlog len -
重置慢查詢?nèi)罩?/p>
slowlog reset



