一、 redis-cli命令行參數
1、-x參數:從標准輸入讀取一個參數:
【問題】
【解決】
因為echo命令是默認帶有回車\n的,不帶回車需要echo –n命令:
echo -n "haha"|redis-cli -x set name,從標准輸入讀入一個參數到redis,就不會有回車符;
2、-r參數:重復執行一個命令指定的次數; -i參數:設置命令執行的間隔;
例子:每隔1秒執行一次,一共執行3次info命令
3、-rdb文件:獲取指定redis實例的rdb文件,保存到本地
可以利用這個辦法,將遠程其他redis服務器的rdb文件,集中保存到一個地方
4、--scan和—pattern參數:用scan命令掃描redis中的key,pattern選擇指定掃描的key的pattern,相比key pattern模式,scan命令不會長時間阻塞redis而導致其他客戶端的命名請求一直處於阻塞狀態;
(1)scan命令:SCAN c u r s o r [MATCH p a t t e r n] [COUNT c o u n t]
即用法:
scan <游標值> ##遍歷,默認返回key個數
scan <游標值> <match [pattern]> ##匹配模式
scan <游標值> <count [count]>##自定義返回key個數
scan <游標值> <match [pattern]> <count [count]>##匹配模式,自定義返回key個數
SCAN命令是一個基於游標的迭代器。這意味着命令每次被調用都需要使用上一次這個調用返回的游標作為該次調用的游標參數,以此來延續之前的迭代過程
當SCAN命令的游標參數被設置為 0 時, 服務器將開始一次新的迭代, 而當服務器向用戶返回值為 0 的游標時, 表示迭代已結束;
SCAN命令的返回值 是一個包含兩個元素的數組, 第一個數組元素是用於進行下一次迭代的新游標, 而第二個數組元素則是一個數組, 這個數組中包含了所有被迭代的元素。
在第二次調用 SCAN 命令時, 命令返回了游標 0 , 這表示迭代已經結束, 整個數據集已經被完整遍歷過了;
(2)scan <pattern>命令和keys <pattern>命令功能一樣,都是查看key的,但是scan命令相比keys命令,不會長時間阻塞;
或者
5、-s參數:客戶端和服務器端在同一個機器,可以通過socket方式連接;
Socket方式連接,不用出網卡,類似於進程間通信,性能更高;
6、--stat參數:獲取redis的診斷數據
7、-pipe參數:發送原始的redis protoc格式數據到服務器端執行,要對redis的傳輸協議了解
(1)
【總結】
*3\r\n$3\r\nset\r\n$3\r\nkey\r\n$5\r\nvalue\r\n 這串字符,就是鍵值key:value在redis的rdb文件里存儲的格式
(2)以redis protoc格式數據,將鍵值name:chenjing保存到redis里
*3\r\n$3\r\nset\r\n$4\r\nname\r\n$8\r\nchenjing\r\n
set name chenjing
*3表示一共3個參數;
\r\n表示空格;
$3表示參數的字節數,例如set是3個字母,set命令前先標記$3;
8、--bigkeys參數:對redis中key采樣(調用scan命令),尋找較大的keys,給出數據統計
9、--latency參數:可以獲取到命令的請求時間,包括min max avg
二、數據結構基礎
1、
(1)redis本身實現叫做字典,實質也是hash;
(2)string類型,包括文本字符串、數值(整數、浮點數)有符號的64位、二進制格式的數據等三種;
(3)list類型,就是鏈表;
(4)set類型,和java的set類型一樣;
(5)hash類型,和java里的hash table類型;
(6)zset類型,有序的集合;
2、string類型相關命令:
(1)set命令
(2)get命令:返回鍵值;
(3)mget命令:
(4)mset命令:
(5)msetnx命令:
(6)append命令:實現字符串的拼接
(7)incr命令:對數字自增1
(8)decr命令:自減1命令
(9)incrby命令:自定義,自增的數值
(10)decrby命令:自定義,自減的數值
(11)incrbyfloat命令:對浮點數的自增
###需要注意,redis里對浮點數計算的命令,就一個incrbyfloat命令,沒有decrbyfloat命令,浮點數的自減操作,可以通過incrbyfloat 一個負數來實現
(12)getset命令:設置新值的同時,把舊值返回給調用者
(13)strlen命令:返回key對應的value的長度
(14)getrange命令:返回字符串類型值的子串
###注釋信息有誤!getrange <key> start end,其中start從0開始
(15)getbit命令:獲取字符串類型指定位置的二進制位的值
(16)setbit命令:設置字符串類型指定位置的二進制的值,返回值是該位置的舊值
(17)bitcount命令:獲得字符串類型中值是1的二進制位個數
2、LIST類型相關命令
使用場景:微博評論、秒殺功能
(1)lpush命令: 向list插入元素
(2)lpop命令:
###lpop命令,left,是從左邊移除;如果是lpush+lpop,這樣的操作就是堆棧(先進后出)
(3)blpop命令:
###b是block,阻塞的意思
(4)llen命令:返回對應key的list中值的數量
(5)rpoplpush命令:
(5.1) name列表有元素:name2 name1;
number列表有元素:number2 number1
(5.2)將name列表的尾部元素移除,並加到number列表的頭部
(5.3)可以看到,name列表的元素少了一個,number列表的元素多了一個
(5.4)查看number列表的頭部元素是否是name1
(6)lindex命令:返回key指定的list中位置為index的值
(7)linsert命令:把value的值插入key對應的list中去
(8)lrange命令:返回一個區間的值,從list的頭(左)到尾(右)
###可以用lindex命令,通過指定list中元素所在index來查看元素值,
也可以用lrange命令,指定index范圍,同時查看list中多個元素
(9)lrem命令:刪除值等於value的count個元素
(10)ltrim命令:對key指定的list進行裁剪,提取子集
(11)lset命令:修改key對應的list中,位置為index的元素的值為value
3、keys相關操作:
(1)del命令:刪除指定的key
(2)dump命令:按照rdb的存儲格式把指定的key的值序列化並返回客戶端。此序列化值U幣包含ttl信息
(3)restore命令:把通過dump命令序列化的值再存進去。
(3)restore命令:把通過dump命令序列化的值再存進去
###如果restore命令好的key是已存在的,需要加replace
(4)exists命令:判斷key是否存在,粗過存在返回值1
(5)expire命令:設置key的超時時間,單位是秒
(6)expireat命令:設置key的超時時間,設置的是精確時間
(7)keys命令:返回符合pattern模式的所有key,該操作會阻塞影響性能
(8)scan命令:基於游標方式返回當前數據庫的key,因為每次返回的數據不多,因此不會阻塞服務器
4、hash類型數據的命令操作:
(1)hset命令:定義hash類型的成員元素值
(2)hmset命令:和hset類似,但是一次設置多個值
(3)hsetnx命令:如果元素不存在則設置值
(4)hkey命令:獲取key對應的hashmap里所有field
##hget命令:是獲取key對應的hashmap里所有value
##hgetall命令:是獲取key對應的hashmap里所有field-value
(5)hget命令:獲取key對應的hashmap中某個field的值
(6)hmget命令:獲取key對應的hashmap中指定的多個filed的值
(7)hval命令:獲取key對應的hashmap中所有filed的值
(8)hstrlen命令:返回filed對應的值的長度 ##這個hstrlen命令在redis3.0測試,不支持
(9)hdel命令:刪除key對應的hashmap里指定field,可以原子性刪除多個field
(10)hexists命令:判斷key對應的hashmap里指定的field是否存在,存在返回1
(11)hgetall命令:返回key對應的hashmap里所有的field-value對