一、key pattern 查詢相應的key
(1)redis允許模糊查詢key 有3個通配符 *、?、[]
(2)randomkey:傳回随機key
(3)type key:傳回key存儲的類型
(4)exists key:判斷某個key是否存在
(5)del key:删除key
(6)rename key newkey:改名
(7)renamenx key newkey:如果newkey不存在則修改成功
(8)move key 1:将key移動到1資料庫
(9)ttl key:查詢key的生命周期(秒)
(10)expire key 整數值:設定key的生命周期以秒為機關
(11)pexpire key 整數值:設定key的生命周期以毫秒為機關
(12)pttl key:查詢key 的生命周期(毫秒)
(13)perisist key:把指定key設定為永久有效
二、字元串類型的操作
(1)set key value [ex 秒數] [px 毫秒數] [nx/xx]
如果ex和px同時寫,則以後面的有效期為準
nx:如果key不存在則建立
xx:如果key存在則修改其值
(2)get key:取值
(3)mset key1 value1 key2 value2 一次設定多個值
(4)mget key1 key2 :一次擷取多個值
(5)setrange key offset value:把字元串的offset偏移位元組改成value
如果偏移量 > 字元串長度,該字元自動補0x00
(6)append key value :把value追加到key 的原值上
(7)getrange key start stop:擷取字元串中[start, stop]範圍的值
對于字元串的下标,左數從0開始,右數從-1開始
注意:當start>length,則傳回空字元串
當stop>=length,則截取至字元串尾
如果start所處位置在stop右邊,則傳回空字元串
(8)getset key nrevalue:擷取并傳回舊值,在設定新值
(9)incr key:自增,傳回新值,如果incr一個不是int的value則傳回錯誤,incr一個不存在的key,則設定key為1
(10)incrby key 2:跳2自增
(11)incrbyfloat by 0.7: 自增浮點數
(12)setbit key offset value:設定offset對應二進制上的值,傳回該位上的舊值
注意:如果offset過大,則會在中間填充0
offset最大到多少
2^32-1,即可推出最大的字元串為512m
(13)bitop operation destkey key1 [key2..] 對key1 key2做opecation并将結果儲存在destkey上
opecation可以是and or not xor
(14)strlen key:取指定key的value值的長度
(15)setex key time value:設定key對應的值value,并設定有效期為time秒
三、連結清單操作
redis的list類型其實就是一個每個子元素都是string類型的雙向連結清單,連結清單的最大長度是2^32。list既可以用做棧,也可以用做隊列。
list的pop操作還有阻塞版本,主要是為了避免輪詢
(1)lpush key value:把值插入到連結清單頭部
(2)rpush key value:把值插入到連結清單尾部
(3)lpop key :傳回并删除連結清單頭部元素
(4)rpop key: 傳回并删除連結清單尾部元素
(5)lrange key start stop:傳回連結清單中[start, stop]中的元素
(6)lrem key count value:從連結清單中删除value值,删除count的絕對值個value後結束
count > 0 從表頭删除 count < 0 從表尾删除 count=0 全部删除
(7)ltrim key start stop:剪切key對應的連結,切[start, stop]一段并把改制重新賦給key
(8)lindex key index:傳回index索引上的值
(9)llen key:計算連結清單的元素個數
(10)linsert key after|before search value:在key 連結清單中尋找search,并在search值之前|之後插入value
(11)rpoplpush source dest:把source 的末尾拿出,放到dest頭部,并傳回單元值
應用場景: task + bak 雙連結清單完成安全隊列

業務邏輯: rpoplpush task bak
接收傳回值并做業務處理
如果成功則rpop bak清除任務,如果不成功,下次從bak表取任務
(12)brpop,blpop key timeout:等待彈出key的尾/頭元素
timeout為等待逾時時間,如果timeout為0則一直等待下去
應用場景:長輪詢ajax,線上聊天時能用到
四、hashes類型及操作
redis hash 是一個string類型的field和value的映射表,它的添加、删除操作都是o(1)(平均)。hash特别适用于存儲對象,将一個對象存儲在hash類型中會占用更少的記憶體,并且可以友善的存取整個對象。
配置: hash_max_zipmap_entries 64 #配置字段最多64個
hash_max_zipmap_value 512 #配置value最大為512位元組
(1)hset myhash field value:設定myhash的field為value
(2)hsetnx myhash field value:不存在的情況下設定myhash的field為value
(3)hmset myhash field1 value1 field2 value2:同時設定多個field
(4)hget myhash field:擷取指定的hash field
(5)hmget myhash field1 field2:一次擷取多個field
(6)hincrby myhash field 5:指定的hash field加上給定的值
(7)hexists myhash field:測試指定的field是否存在
(8)hlen myhash:傳回hash的field數量
(9)hdel myhash field:删除指定的field
(10)hkeys myhash:傳回hash所有的field
(11)hvals myhash:傳回hash所有的value
(12)hgetall myhash:擷取某個hash中全部的field及value
五、集合結構操作
特點:無序性、确定性、唯一性
(1)sadd key value1 value2:往集合裡面添加元素
(2)smembers key:擷取集合所有的元素
(3)srem key value:删除集合某個元素
(4)spop key:傳回并删除集合中1個随機元素(可以坐抽獎,不會重複抽到某人)
(5)srandmember key:随機取一個元素
(6)sismember key value:判斷集合是否有某個值
(7)scard key:傳回集合元素的個數
(8)smove source dest value:把source的value移動到dest集合中
(9)sinter key1 key2 key3:求key1 key2 key3的交集
(10)sunion key1 key2:求key1 key2 的并集
(11)sdiff key1 key2:求key1 key2的差集
(12)sinterstore res key1 key2:求key1 key2的交集并存在res裡
六、有序集合
概念:它是在set的基礎上增加了一個順序屬性,這一屬性在添加修改元素的時候可以指定,每次指定後,zset會自動按新的值調整順序。可以了解為有兩列的mysql表,一列存儲value,一列存儲順序,操作中key了解為zset的名字。
和set一樣sorted,sets也是string類型元素的集合,不同的是每個元素都會關聯一個double型的score。sorted set的實作是skip list和hash table的混合體。
當元素被添加到集合中時,一個元素到score的映射被添加到hash table中,是以給定一個元素擷取score的開銷是o(1)。另一個score到元素的映射被添加的skip list,并按照score排序,是以就可以有序地擷取集合中的元素。添加、删除操作開銷都是o(logn)和skip list的開銷一緻,redis的skip list 實作是雙向連結清單,這樣就可以逆序從尾部去元素。sorted set最經常使用方式應該就是作為索引來使用,我們可以把要排序的字段作為score存儲,對象的id當元素存儲。
(1)zadd key score1 value1:添加元素
(2)zrange key start stop [withscore]:把集合排序後,傳回名次[start,stop]的元素 預設是升續排列 withscores 是把score也列印出來
(3)zrank key member:查詢member的排名(升序0名開始)
(4)zrangebyscore key min max [withscores] limit offset n:集合(升序)排序後取score在[min, max]内的元素,并跳過offset個,取出n個
(5)zrevrank key member:查詢member排名(降序 0名開始)
(6)zremrangebyscore key min max:按照score來删除元素,删除score在[min, max]之間
(7)zrem key value1 value2:删除集合中的元素
(8)zremrangebyrank key start end:按排名删除元素,删除名次在[start, end]之間的
(9)zcard key:傳回集合元素的個數
(10)zcount key min max:傳回[min, max]區間内元素數量
(11)zinterstore dest numkeys key1[key2..] [weights weight1 [weight2...]] [aggregate sum|min|max]
求key1,key2的交集,key1,key2的權值分别是weight1,weight2
聚合方法用 sum|min|max
聚合結果 儲存子dest集合内
注意:weights,aggregate如何了解?
答:如果有交集,交集元素又有score,score怎麼處理?aggregate num->score相加,min最小score,max最大score,另外可以通過weights設定不同的key的權重,交集時 score*weight
七、伺服器相關指令
(1)ping:測定連接配接是否存活
(2)echo:在指令行列印一些内容
(3)select:選擇資料庫
(4)quit:退出連接配接
(5)dbsize:傳回目前資料庫中key的數目
(6)info:擷取伺服器的資訊和統計
(7)monitor:實時轉儲收到的請求
(8)config get 配置項:擷取伺服器配置的資訊
config set 配置項 值:設定配置項資訊
(9)flushdb:删除目前選擇資料庫中所有的key
(10)flushall:删除所有資料庫中的所有的key
(11)time:顯示伺服器時間,時間戳(秒),微秒數
(12)bgrewriteaof:背景儲存rdb快照
(13)bgsave:背景儲存rdb快照
(14)save:儲存rdb快照
(15)lastsave:上次儲存時間
(16)shutdown [save/nosave]
注意:如果不小心運作了flushall,立即shutdown nosave,關閉伺服器,然後手工編輯aof檔案,去掉檔案中的flushall相關行,然後開啟伺服器,就可以倒回原來是資料。如果flushall之後,系統恰好bgwriteaof了,那麼aof就清空了,資料丢失。
(17)showlog:顯示慢查詢
問:多慢才叫慢?
答:由slowlog-log-slower-than 10000,來指定(機關為微秒)
問:伺服器存儲多少條慢查詢記錄
答:由slowlog-max-len 128,來做限制