查看當前所有的KEY
KEYS *
KEYS zhang* ? ?#查看前綴為zhang的所有鍵; ?
查看當前redis的配置信息
CONFIG GET *
強制停止redis快照導致redis用戶沒有權限寫rdb文件或磁盤空間滿了,解決方法
config set stop-writes-on-bgsave-error no
清除redis緩存
redis-cli
dbsize
flushall
exit
刪除redis當前數據庫中的所有KEY
flushdb
刪除redis所有數據庫中的KEY
flushall
redis.conf 配置參數詳解
daemonize ?yes ? ?#運行可以守護進程啟動,放置于后臺;
bind:x.x.x.x ? ?#監聽地址,建議只對本地127.0.0.1開放;
protect-mode yes ? ?#redis的保護模式;
requirepass 密碼 ? ?#設置密碼;
timeout 0 ? ?#關閉超時;
tcp-keepalive 0 ? ?#在Linux上,指定值(秒)用于發送ACKs的時間,關閉連接需要雙倍的時間,默認為0;
loglevle notice ? ?#指定日志記錄的級別。有四個級別:debug(記錄很多信息,用于開發測試)、notice(常用與生產環境)、warning(只有非常重要或嚴重的信息才會記錄到日志)、verbose(有用的信息,比debug少);
logfile ?/var/log/redis/redis.log ? ?#默認為stdout;
databases n ? ?#可用數據庫,范圍在0 - (database-1);
save ? ?#保存數據到磁盤(.rdb);
stop-writes-on-bgsave-error yes ? ?#后臺儲存錯誤停止寫;
rdbcompression yes ? ?#儲存到本地數據庫時(持久化到rdb文件)是否壓縮;
dbfilename dump.rdb ? ?#本地持久化數據庫文件名,默認dump.rdb;
dir /var/db/redis/ ? ?#數據庫文件路徑,是目錄;
#主從復制,設置該數據庫主從;
salveof ? ?#設置本機為從庫,設置好master的ip及端口,它會自動從master進行數據同步;
masterauth ? ?#設置主庫認證的密碼;
slave-read-only yes ? ?#設置slave是否接受寫;
slave-serve-stale-data yes ? ?#從庫同主庫失去連接或復制正在進行時,從庫是繼續響應客戶端請求還是否;
repl-disable-tcp-nodelay no ? ?#發送到slave的延遲會降低,但將更過的帶寬用于復制;
slave-priority 100 ? ?#master不能工作后,從眾多slave中選出優先值最小的slave提升為master,優先值為0表示不能為master;
appendonly no ? ?#是否開啟AOF數據備份,redis會把所接收到的每一次寫操作請求都追加到appendonly.aof文件,當此文件很大;
appendsync everysec ? ?#AOF文件同步策略,后臺會進行大量I/O;
no-appendfsync-on-rewrite no ? ?#環境AOF大量I/O;
auto-aof-rewrite-percentage 100 ? ?#aof自動重寫;
auto-aof-rewrite-min-size 64mb ? ?#指定最小大小用于aof重寫;
slowlog-log-slower-than 1000 ? ?#慢日志,記錄超過特定執行時間的命令,不包括I/o;
slowlog-max-len 128 ? ?#slow log的長度,超過大小,最先進入隊列的記錄會被踢出;
hash-max-zipmap-entries 512 ? ?#hash將以一種特殊的編碼方式(大大減少內存使用)來儲存,這是其中一個臨界值;
hash-max-zipmap-value 64 ? ?#另外一個臨界值;
list-max-ziplist-entries 512 ? ?#多個list以特定的方式編碼來節省空間;
list-max-ziplist-value 64;
set-max-intset-entries 512;
zset-max-ziplist-entries 128;
zset-max-ziplist-value 64;
activerehashing yes ? ?#Redis將在每100ms時使用1ms的CPU時間來對redis的hash表進行重新hash,可降低內存的使用;
client-output-buffer-limit normal 0 0 0 ? ? #限制輸出緩存;
client-output-buffer-limit slave 256mb 64mb 60;
client-output-buffer-limit pubsub 32mb 8mb 60;
hz 10 ? ?#不是所有任務都以相同的頻率執行,但redis按照指定的“hz”值執行檢查任務;
aof-rewrite-incremental-fsync yes ? ?#當一個子節點重寫AOF文件時,則文件每生產32m數據進行同步;
Redis官方文檔對VM的使用建議:
當你的KEY很小二value很大時,使用VM的效果會比較好,因為這樣節約內存比較大;
當key不小時,可以考慮使用一些非常方法將很大的key變成value,比如將key,value組合成一個新的value。
連接操作相關命令
quit:關閉連接;
auth:簡單密碼認證;
help cmd:查看命令幫助;
持久化
save:將數據同步保存到磁盤;
bgsave:將數據異步保存到磁盤;
lastsave:返回上次成功將數據保存到磁盤的Unix時戳;
遠程服務控制
info:提供服務器的信息統計;
monitor:實時轉儲收到的請求;
slaveof:改變復制策略設置;
shundown:將數據同步保存到磁盤,然后關閉服務;
value操作命令
exists(key):判斷一個key是否存在;
del(key):刪除一個key;
type(key):返回值的類型;
keys(pattern):返回滿足給定模式的所有key;
randomkey:隨機返回key空間的一個;
keyrename(oldname,newname):重命名key;
dbsize:返回當前數據庫中key的數目;
expire:設定一個key的活動時間(s);
ttl:獲得一個key的活動時間;
select(index):按索引查詢;
move(key,dbindex):移動當前數據庫中的key到dbindex數據庫;
flushdb:刪除當前選擇的數據庫中的所有key;
flushall:刪除所有數據庫中的所有key;
string操作命令
set(key,value):給數據庫中名稱為key的string賦值value;
get(key):返回數據庫中名為key的string的value;
getset(key,value):給名稱為key的string賦予上一次的value;
mget(key1,key2,...,key N):返回庫中多個string的value;
setnx(key,value):添加string,名稱為key,值為value;
setex(key,time,value):向庫中添加string,設定過期時間time;
mset(key 1,value 1,...,key N,value N):批量設置多個string的值;
msetnx(key 1,value 1,...,key N,value N):如果所有名稱為 key N的string都不存在,則向庫中添加string,名稱為 key N賦值value N;
incr(key):名稱為key的string加 1 操作;
incrby(key,integer):名稱為key的string增減integer;
decr(key):名稱為key的string減1操作;
decrby(key,integer):名稱為key的string的值附加value;
append(key,value):名稱為key的值附加value;
substr(key,start,end):返回名稱為key的string的value的子串;
list操作的命令
rpush(key,value):在名稱為key的list尾部添加一個值為value的元素;
lpush(key,value):在名稱為key的list首部添加一個值為value的元素;
llen(key)返回名稱為key的list的長度;
lrange(key,start,end):返回名稱為key的list中start至end之間的元素(下表從0開始);
ltrim(key,start,end):截取名稱為key的list,保留start至end之間的元素;
lindex(key,index):返回名稱為key的list中index位置的元素;
lset(key,index,value):給名稱為key的list中index位置的元素賦值value;
lrem(key,count,value):刪除count個名稱為key的list中值為value的元素;
brpop(key1,key2,...,key N):rpop的block版本;
rpoplpush(srckey,dstkey):返回并刪除名為srckey的list尾元素,并將該元素添加到名為dstkey的list的頭部;
set操作的命令
sadd(key,member):向名為key的set中添加元素member;
srem(key,member):刪除名為key的set中元素的member;
spop(key):隨機返回并刪除名為key的set中的一個元素;
smove(srckey,dstkey,member):將member元素從名為srckey的集合移動到名為dstkey的集合;
scard(key):返回名為key的set的基數;
sismember(key,member):測試member是否是名稱為key的set的集合;
sinter(key1,key2,...,key N):求交集;
sinterstore(dstkey,key1,...,key N):求交集并將交集保存到dstkey的集合;
sunion(key1,...,key N):求并集;
sunionstore(dstkey,key 1,...,key N):求并集并將并集保存到dstkey的集合;
sdiff(key1,...,key N):求差集;
sdiffstore(dstkey,key 1,...,key N):求差集并將差集保存到dstkey的集合;
smembers(key):返回名為key的set的所有元素;
srandmember(key):隨機返回名為key的set的一個元素;
zset(sorted set)操作的命令
zadd(key,score,member):向名為key的zset中添加元素member,score用于排序,如果該元素已經存在,則根據score更新該元素的順序;
zrem(key,member):刪除名為key的zset中的元素member;
zincrby(key,increment,member):如果在名為key的zset中已經存在元素member,則該元素的score增加increment,否則向集合中添加該元素,其score的值為increment;
zrank(key,member):返回名為key的zset,順序;
zrevrank(key,member):返回名為key的zset,倒序;
zrange(key,start,end):返回名為key的zset,score順序按index從start到end返回所有元素;
zrevrange(key,start,end):返回名為key的zset,score倒序按index從start到end返回所有元素;
zrangebyscore(key,min,max):返回名為key的zset中score大于等于min,小于等于max的所有元素;
hash操作命令
hset(key,field,value):向名為key的hash中添加元素filed----value;
hget(key,field):返回名為key的hash中field對應的value;
hmset(key,field1,value1,...,field N,value N):向名為key的hash中添加元素field----value;
hmget(key,field1,...,field N):返回名為key的hash中filed對應的value;
hincrby(key,field,integer):將名為key的hash中field的value增加integer;
hexists(key,field):名為key的hash中是否存在鍵為field的域;
hdel(key,field):刪除名為key的hash中鍵為field的域;
hlen(key):返回名為key的hash中元素個數;
hkeys(key):返回名為key的hash中所有鍵;
hvals(key):返回名為key的hash中所有鍵對應的value;
hgetall(key):返回名為key的hash中所有的鍵(field)及其對應的value;
Redis高級應用
安全性
設置客戶端連接后進行操作需要密碼;
requirepass password;
redis-cli -a password 或者 進入后 auth password
主從復制
通過主從復制可以允許多個 slave 擁有和 master 相同的數據庫副本;注意一下防火墻問題;
slaveof ?IP ?port;
masterauth password;
事務處理
redis對事務的支持還比較簡單;
redis只能保證一個client發起的事務中的命令可以連續執行,而中間不會插入其他的client的命令;
當一個client在一個連接中發出multi命令時,這個連接會進入一個事務的上下文,連接后續命令不會不及執行,而是先放到一個隊列中,當執行exec命令時,redis會順序的執行隊列中的所有命令;
持久化機制
redis持久化就是把數據從內存保存到硬盤;
redis是一個支持持久化的內存數據庫;
snapshotting快照,默認的儲存方式寫入dump.rdb的二進制文件中,可以配置redis在 n秒內如果超過 m個key被修改就自動做快照;
appendonly file,aof方式redis會將每一次的函數都追加到文件中,當redis重啟時會重新執行文件中保存的命令;
虛擬內存的使用
配置 VM 功能,保存路徑,最大內存上線,頁面多少,頁面大小,最大工作線程;