一、key pattern 查詢相應的key
?。?)redis允許模糊查詢key 有3個通配符 *、?、[]
(2)randomkey:返回隨機key
?。?)type key:返回key存儲的類型
?。?)exists key:判斷某個key是否存在
(5)del key:刪除key
?。?)rename key newkey:改名
(7)renamenx key newkey:如果newkey不存在則修改成功
?。?)move key 1:將key移動到1數(shù)據(jù)庫
?。?)ttl key:查詢key的生命周期(秒)
?。?0)expire key 整數(shù)值:設置key的生命周期以秒為單位
?。?1)pexpire key 整數(shù)值:設置key的生命周期以毫秒為單位
?。?2)pttl key:查詢key 的生命周期(毫秒)
?。?3)perisist key:把指定key設置為永久有效
二、字符串類型的操作
?。?)set key value [ex 秒數(shù)] [px 毫秒數(shù)] [nx/xx]
如果ex和px同時寫,則以后面的有效期為準
nx:如果key不存在則建立
xx:如果key存在則修改其值
?。?)get key:取值
?。?)mset key1 value1 key2 value2 一次設置多個值
?。?)mget key1 key2 :一次獲取多個值
?。?)setrange key offset value:把字符串的offset偏移字節(jié)改成value
如果偏移量 > 字符串長度,該字符自動補0x00
?。?)append key value :把value追加到key 的原值上
?。?)getrange key start stop:獲取字符串中[start, stop]范圍的值
對于字符串的下標,左數(shù)從0開始,右數(shù)從-1開始
注意:當start>length,則返回空字符串
當stop>=length,則截取至字符串尾
如果start所處位置在stop右邊,則返回空字符串
?。?)getset key nrevalue:獲取并返回舊值,在設置新值
(9)incr key:自增,返回新值,如果incr一個不是int的value則返回錯誤,incr一個不存在的key,則設置key為1
?。?0)incrby key 2:跳2自增
?。?1)incrbyfloat by 0.7: 自增浮點數(shù)
(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
?。?4)strlen key:取指定key的value值的長度
(15)setex key time value:設置key對應的值value,并設置有效期為time秒
三、鏈表操作
Redis的list類型其實就是一個每個子元素都是string類型的雙向鏈表,鏈表的最大長度是2^32。list既可以用做棧,也可以用做隊列。
list的pop操作還有阻塞版本,主要是為了避免輪詢
?。?)lpush key value:把值插入到鏈表頭部
(2)rpush key value:把值插入到鏈表尾部
?。?)lpop key :返回并刪除鏈表頭部元素
?。?)rpop key: 返回并刪除鏈表尾部元素
?。?)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
?。?)lindex key index:返回index索引上的值
?。?)llen key:計算鏈表的元素個數(shù)
?。?0)linsert key after|before search value:在key 鏈表中尋找search,并在search值之前|之后插入value
?。?1)rpoplpush source dest:把source 的末尾拿出,放到dest頭部,并返回單元值
應用場景: task + bak 雙鏈表完成安全隊列
業(yè)務邏輯: rpoplpush task bak
接收返回值并做業(yè)務處理
如果成功則rpop bak清除任務,如果不成功,下次從bak表取任務
?。?2)brpop,blpop key timeout:等待彈出key的尾/頭元素
timeout為等待超時時間,如果timeout為0則一直等待下去
應用場景:長輪詢ajax,在線聊天時能用到
四、hashes類型及操作
Redis hash 是一個string類型的field和value的映射表,它的添加、刪除操作都是O(1)(平均)。hash特別適用于存儲對象,將一個對象存儲在hash類型中會占用更少的內(nèi)存,并且可以方便的存取整個對象。
配置: hash_max_zipmap_entries 64 #配置字段最多64個
hash_max_zipmap_value 512 #配置value最大為512字節(jié)
(1)hset myhash field value:設置myhash的field為value
?。?)hsetnx myhash field value:不存在的情況下設置myhash的field為value
?。?)hmset myhash field1 value1 field2 value2:同時設置多個field
?。?)hget myhash field:獲取指定的hash field
?。?)hmget myhash field1 field2:一次獲取多個field
?。?)hincrby myhash field 5:指定的hash field加上給定的值
(7)hexists myhash field:測試指定的field是否存在
?。?)hlen myhash:返回hash的field數(shù)量
?。?)hdel myhash field:刪除指定的field
?。?0)hkeys myhash:返回hash所有的field
(11)hvals myhash:返回hash所有的value
?。?2)hgetall myhash:獲取某個hash中全部的field及value
五、集合結構操作
特點:無序性、確定性、唯一性
(1)sadd key value1 value2:往集合里面添加元素
?。?)smembers key:獲取集合所有的元素
(3)srem key value:刪除集合某個元素
?。?)spop key:返回并刪除集合中1個隨機元素(可以坐抽獎,不會重復抽到某人)
?。?)srandmember key:隨機取一個元素
(6)sismember key value:判斷集合是否有某個值
?。?)scard key:返回集合元素的個數(shù)
(8)smove source dest value:把source的value移動到dest集合中
?。?)sinter key1 key2 key3:求key1 key2 key3的交集
?。?0)sunion key1 key2:求key1 key2 的并集
(11)sdiff key1 key2:求key1 key2的差集
?。?2)sinterstore res key1 key2:求key1 key2的交集并存在res里
六、有序集合
概念:它是在set的基礎上增加了一個順序?qū)傩?,這一屬性在添加修改元素的時候可以指定,每次指定后,zset會自動按新的值調(diào)整順序??梢岳斫鉃橛袃闪械膍ysql表,一列存儲value,一列存儲順序,操作中key理解為zset的名字。
和set一樣sorted,sets也是string類型元素的集合,不同的是每個元素都會關聯(lián)一個double型的score。sorted set的實現(xiàn)是skip list和hash table的混合體。
當元素被添加到集合中時,一個元素到score的映射被添加到hash table中,所以給定一個元素獲取score的開銷是O(1)。另一個score到元素的映射被添加的skip list,并按照score排序,所以就可以有序地獲取集合中的元素。添加、刪除操作開銷都是O(logN)和skip list的開銷一致,redis的skip list 實現(xiàn)是雙向鏈表,這樣就可以逆序從尾部去元素。sorted set最經(jīng)常使用方式應該就是作為索引來使用,我們可以把要排序的字段作為score存儲,對象的ID當元素存儲。
?。?)zadd key score1 value1:添加元素
?。?)zrange key start stop [withscore]:把集合排序后,返回名次[start,stop]的元素 默認是升續(xù)排列 withscores 是把score也打印出來
?。?)zrank key member:查詢member的排名(升序0名開始)
?。?)zrangebyscore key min max [withscores] limit offset N:集合(升序)排序后取score在[min, max]內(nèi)的元素,并跳過offset個,取出N個
?。?)zrevrank key member:查詢member排名(降序 0名開始)
?。?)zremrangebyscore key min max:按照score來刪除元素,刪除score在[min, max]之間
?。?)zrem key value1 value2:刪除集合中的元素
(8)zremrangebyrank key start end:按排名刪除元素,刪除名次在[start, end]之間的
?。?)zcard key:返回集合元素的個數(shù)
?。?0)zcount key min max:返回[min, max]區(qū)間內(nèi)元素數(shù)量
(11)zinterstore dest numkeys key1[key2..] [WEIGHTS weight1 [weight2...]] [AGGREGATE SUM|MIN|MAX]
求key1,key2的交集,key1,key2的權值分別是weight1,weight2
聚合方法用 sum|min|max
聚合結果 保存子dest集合內(nèi)
注意:weights,aggregate如何理解?
答:如果有交集,交集元素又有score,score怎么處理?aggregate num->score相加,min最小score,max最大score,另外可以通過weights設置不同的key的權重,交集時 score*weight
七、服務器相關命令
?。?)ping:測定連接是否存活
?。?)echo:在命令行打印一些內(nèi)容
?。?)select:選擇數(shù)據(jù)庫
?。?)quit:退出連接
(5)dbsize:返回當前數(shù)據(jù)庫中key的數(shù)目
?。?)info:獲取服務器的信息和統(tǒng)計
(7)monitor:實時轉(zhuǎn)儲收到的請求
?。?)config get 配置項:獲取服務器配置的信息
config set 配置項 值:設置配置項信息
?。?)flushdb:刪除當前選擇數(shù)據(jù)庫中所有的key
?。?0)flushall:刪除所有數(shù)據(jù)庫中的所有的key
?。?1)time:顯示服務器時間,時間戳(秒),微秒數(shù)
?。?2)bgrewriteaof:后臺保存rdb快照
(13)bgsave:后臺保存rdb快照
?。?4)save:保存rdb快照
(15)lastsave:上次保存時間
?。?6)shutdown [save/nosave]
注意:如果不小心運行了flushall,立即shutdown nosave,關閉服務器,然后手工編輯aof文件,去掉文件中的flushall相關行,然后開啟服務器,就可以倒回原來是數(shù)據(jù)。如果flushall之后,系統(tǒng)恰好bgwriteaof了,那么aof就清空了,數(shù)據(jù)丟失。
?。?7)showlog:顯示慢查詢
問:多慢才叫慢?
答:由slowlog-log-slower-than 10000,來指定(單位為微秒)
問:服務器存儲多少條慢查詢記錄
答:由slowlog-max-len 128,來做限制
您可能感興趣的文章:- 超強、超詳細Redis數(shù)據(jù)庫入門教程
- Redis入門教程_動力節(jié)點Java學院整理
- redis4.0入門小結
- redis常用命令、常見錯誤、配置技巧等分享
- Redis中5種數(shù)據(jù)結構的使用場景介紹
- Redis中統(tǒng)計各種數(shù)據(jù)大小的方法
- redis常用命令小結
- 讓Redis在你的系統(tǒng)中發(fā)揮更大作用的幾點建議
- 全網(wǎng)最完整的Redis新手入門指導教程