如下摘自:Redis 官網。python
Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.
總的來講,Redis 是一個基於內存的高性能的鍵值型數據庫,也就是常說的 NoSQL, 能夠用來做爲數據庫或者緩存。而且支持多種數據結構,包括字符串,散列,列表,集合,帶有範圍查詢的排序集,位圖,HyperLogLog,具備半徑查詢的地理空間索引和流。git
各類語言都提供了 Redis 的客戶端,好比 Java 的Jedis
和 python 的redis-py
.redis
同時 Redis 也提供交互式的客戶端,在 mac 上執行:shell
brew install redis
進行安裝,安裝完成後執行:數據庫
redis-cli
進入交互式的客戶端,便可開始使用。後端
本文主要用來記錄針對各類數據結構的操做命令,來源主要是 Redis 官網加上本身的理解。因爲英語問題,不保證理解必定正確。你們能夠參考 redis 官網 來進行學習。緩存
help
以後根據提示輸入:help command
, 便可以查看該命令的詳細方法簽名。輸入help @group
能夠查看該 group 相關的命令,好比list
,set
.*
進行查看全量的 key. 注意:不要在線上使用這個命令,不可控。keys **
exists key
.sacn cursor match * count 100
. *
能夠進行模式匹配。cursor
初次使用爲 0, 以後每一次爲上一次scan
返回的遊標。type key
.del key1 key2
expire key seconds
.ttl key
pttl key
move key db
dump key
.resotre key seconds 序列化的 value
monitor
, 也能夠直接在 shell 種執行:redis-cli monitor
.這塊其實也是 public 的一部分,我單獨將其寫出來一下。安全
select index
flushdb
.swapdb index1 index2
.randomkey
.redis-cli monitor
. 直接在命令行中執行。set key value
get key
strlen key
append key value
getrange key start end
setrange key offset value
incr key
incr
的反操做,遞減 1.decr key
incr
同樣。incrby key one_int_value
.incrby
的反操做。遞減某個量。decrby key one_int_value
nil
, 因此這條命令永遠不會出錯。mget key1 key2 ...
mset key1 value1 key2 value2
msetnx key1 value1 key2 value2
set + expire
. 語法set key seconds value
set if not exists
, 當 key 不存在時寫入,存在時不作任何操做。setnx key value
getset key new_value
setex
類似,區別只是設置的過時時間單位爲毫秒。psetex key ms value
LPUSH key v1 v2 v3
.RPUSH key v1 v2 v3
.LPOP key
.RPOP key
.LLEN key
.LINDEX key 0
.0,1,2 是隊頭的 index,-1,-2,-3 是隊尾的 index.LINSERT key before|after pivot value
.O(n) 的時間複雜度。LRANGE key 0 -1
能夠返回所有值。注意,時間複雜度是 O(N+S).LREM key count value
.count 大於零時從頭至尾數,count<0 時從後向前數,count=0 刪除全部指定的 value.LSET key index value
. 時間複雜度爲 O(n).LTRIM key start end
. 事件負責度 O(n).LPUSHX key v
.RPUSHX key v
.BLPOP key1 key2 3
.BLPOP key1 key2 3
.RPOPLPUSH source-list destination-list
.SADD key v1 v2 v3
.SCARD key
.SPOP key count
.SMOVE source target member
.SMEMBERS key
.SISMEMBER key v
.SRANDMEMBER count
,O(1) 或者 O(n). 看 count 咯。SREM key v1 v2 v3
.sscan key 0 match o* count 10
. 將返回 set 中以 o 開頭的 10 個元素,能夠繼續使用遊標來掃描。SDIFF key1 key2 key3
.例如:服務器
key1 = {a,b,c,d} key2 = {c} key3 = {a,c,e} SDIFF key1 key2 key3 = {b,d}
O(n) 的時間複雜度,n 是全部 set 的集合總數。數據結構
SDIFFSTORE key1 key2 key3
.O(n) 的時間複雜度。SINTER key1 key2 key3
. 時間複雜度是 O(m * n).m 是 key1 的元素數量,n 是後面全部集合的最小元素數量。SUNION key key1 key2
.ZADD [NX | XX] [CH] [INCR] score1 value1 score2 value2
. 指令也能夠沒有,有的話規定一些重複之類的規則。時間複雜度:對每個(分數-值)來講都是爲 O(log(n))ZREM key v1 v2
.O(m*log(n))ZSCORE key v
.O(1).ZRANK key value
.O(log(n)).ZREVRANK key value
.O(log(n)).ZPOPMAX key count
.O(log(N)*M).ZPOPMIN key count
.O(log(N)*M).BZPOPMAX key key2 key3 time
.time 爲阻塞時間,一樣 0 表明永不超時。O(n).ZCARD key
.O(1) 的時間複雜度。ZCOUNT key min max
.O(log(n)).ZRANGE: 返回給定分數範圍內的值。ZRANGE key start end WITHSOCRES
.
ZRANGEBYLEX key min max [LIMIT offset count]
, 字典序版本的上一個命令。ZRANGEBYSCORE key min max [LIMIT offset count]
,ZLEXCCOUNT key min max
.O(log(n)).ZINCRBY key score value
.O(log(n)).set
部分的命令差很少。ZINTERSTORE: 求給定集合的交集並存在指定的集合中(覆蓋存儲), 還有一些其餘的選項供操做。ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
HSET key field value
.HGet key field
.HMGET key field1 field2
.HMSET key field1 v1 field2 v2
.HSETX key field value
.HDEL key field field field
HEXISTS key field
. 返回 0 或者 1.HGETALL key
. 時間複雜度是 O(n).HINCRBY key field number
. 只支持 feild 是 64 位有符號整數。HINCRBYFLOAT key field float
.HKEYS key
.HLEN key
.HSCAN key 0 match uu* count 10
HSTRLEN key field
.HVALS key
. 時間複雜度爲 O(n).本章節的命令簽名較長且變化較多,所以再也不提供示例命令和方法簽名,能夠去下面的連接中學習。
其實 bitmap 不是一個實際的數據結構,只是在 string 數據結構上的一組面向位的操做,由於 string 數據結構是二進制安全的,因此這個是可行的。
SETBIT key offset value
.GETBIT key offset
.BITCOUNT key start end
.BITPOS key 0 1 2
.hyperloglog 的原理這裏就不講了,完了多看看以後單獨記錄一下。
PFADD key1 v1 v2 v3
.O(1).PFCOUNT key1 key2 key3
.O(n).PFMERGE target key1 key2
.O(n),n 是 key 的數量。經度,緯度,名稱
.GEOADD key longitude latitude member [longitude latitude member ...]
GEOHASH key member [member ...]
GEOPOS key member [member ...]
GEODIST key member1 member2 [unit]
.GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
.最後,歡迎關注個人我的公衆號【 呼延十 】,會不按期更新不少後端工程師的學習筆記。
也歡迎直接公衆號私信或者郵箱聯繫我,必定知無不言,言無不盡。
完。
<h4>ChangeLog</h4>
2019-04-04 開始連載
2019-05-06 完成
以上皆爲我的所思所得,若有錯誤歡迎評論區指正。
歡迎轉載,煩請署名並保留原文連接。
聯繫郵箱:huyanshi2580@gmail.com
更多學習筆記見我的博客------>呼延十