寺廟網(wǎng)站開發(fā)文案長(zhǎng)春seo培訓(xùn)
1. Redis的十大數(shù)據(jù)類型及常用命令
Redis是key-value鍵值對(duì)類型的數(shù)據(jù)庫(kù),我們所說(shuō)的數(shù)據(jù)類型指的是value的數(shù)據(jù)類型,key的數(shù)據(jù)類型都是字符串。
1.1 字符串(String)
string是redis最基本的類型,一個(gè)key對(duì)應(yīng)一個(gè)value。
string類型是二進(jìn)制安全的,意思是redis的string可以包含任何數(shù)據(jù),比如jpg圖片或者序列化的對(duì)象 。
string類型是Redis最基本的數(shù)據(jù)類型,一個(gè)redis中字符串value最多可以是512M
- 常用命令
命令 | 說(shuō)明 |
---|---|
SET key value | 設(shè)置指定key的值 |
GET key | 獲取指定key的值 |
GETRANGE key start end | 返回key中字符串的子字符[0,-1]表示全部![]() |
GETSET key value | 將指定的key的值設(shè)置為value,并返回key的舊值![]() |
GETBIT key offset | 對(duì)key所存儲(chǔ)的字符串值,獲取指定偏移量上的位(bit) 例如k1 h h對(duì)應(yīng)的十六進(jìn)制為01101000,對(duì)應(yīng)的 GETBIT k1 0的值是0,GETBIT k1 1的值是1 GETBIT k1 7的值為0 ![]() |
MGET key1 [key2] | 獲取所有指定的key的值![]() |
SETBIT key offset value | 對(duì)key鎖存儲(chǔ)的字符串值,設(shè)置或清除指定偏移量上的位(bit) |
SETEX key second value | 將值value關(guān)聯(lián)到key,并將key的過(guò)期時(shí)間設(shè)為value秒 |
SETNX key value | 只有在key不存在時(shí)設(shè)置key的值 |
SETRANGE key offset value | 用value復(fù)寫key的值,從偏移量offset開始![]() |
STRLEN key | 返回key所存儲(chǔ)的字符串值的長(zhǎng)度 |
MSET key1 value1 [key2 value2] | 同時(shí)設(shè)置一個(gè)或多個(gè)key-value鍵值對(duì)![]() |
MSETNX key1 value1 [key2 value2] | 同時(shí)設(shè)置一個(gè)或多個(gè)key-value鍵值對(duì),當(dāng)且僅當(dāng)所有key都不存在時(shí)![]() |
PSETEX key millisecounds value | 這個(gè)命令和SETEX命令相似,但他以毫秒為單位設(shè)置key的生存時(shí)間,而不是像SETEX命令那樣,以秒為單位 |
INCR key | 將key中存儲(chǔ)的數(shù)字值增加1 |
INCRBY key increment | 將key所存儲(chǔ)的的值加上指定的值(increment) |
INCRBYFLOAT key increment | 將key所存儲(chǔ)的的值加上指定的浮點(diǎn)值(increment) |
DECR key | 將key中存儲(chǔ)的數(shù)值減1 |
DECRBY key decrement | key所存儲(chǔ)的值減去指定的值(decrement) |
APPEND key value | 如果key已經(jīng)存在并且是一個(gè)字符串,APPEND命令將value追加到key原來(lái)的值的末尾 |
- set 命令詳細(xì)介紹
set key value [NX|XX] [GET] [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTL] - keepttl 已經(jīng)存在的key-value在重新set時(shí),會(huì)改變過(guò)期時(shí)間,使用keepttl參數(shù),保留原始的過(guò)期時(shí)間。
實(shí)際應(yīng)用方面
比如點(diǎn)贊謀篇文章或抖音無(wú)限點(diǎn)贊,可以使用incr key 命令增加1
比如可以使用過(guò)期時(shí)間來(lái)設(shè)置分布式鎖,在這先了解一下概念和思路,之后高級(jí)篇會(huì)詳細(xì)講解
1.2 列表(List)
Redis列表是簡(jiǎn)單的字符串列表,按照插入順序排序。你可以添加一個(gè)元素到列表的頭部(左邊)或者尾部(右邊)。
它的底層實(shí)際是個(gè)雙端鏈表,最多可以包含 2^32 - 1 個(gè)元素 (4294967295, 每個(gè)列表超過(guò)40億個(gè)元素),對(duì)兩端的操作性能很高,通過(guò)索引下標(biāo)的操作中間的節(jié)點(diǎn)性能會(huì)較差。
lpush k1 v1 v2 v3 v4 v5 v6 v7 其中v7是頭,v1是尾
- 常用命令
命令 | 說(shuō)明 |
---|---|
LPUSH key value1 [value2…] | 將value1、value2… 按照從左向右插入到列表頭部,最后輸入的value在最前面,返回值為列表的長(zhǎng)度 |
RPUSH key value1 [value2…] | 將value1、value2… 按照從右向左插入到列表頭部,最后輸入的value在最后面,返回值為列表的長(zhǎng)度 |
LPUSHX key value1 [value2…] | 將value1、value2… 按照從左向右插入到已經(jīng)存在的列表頭部,最后輸入的value在最前面,返回值為列表的長(zhǎng)度 |
RPUSHX key value1 [value2…] | 將value1、value2… 按照從右向左插入到已經(jīng)存在的列表頭部,最后輸入的value在最后面,返回值為列表的長(zhǎng)度 |
LREM key count value | 從列表頭開始刪除count個(gè)value |
LLEN key | 獲取列表key的長(zhǎng)度(值為列表元素的個(gè)數(shù),即最大索引+1) |
LINDEX key index | 通過(guò)索引index值獲取列表中的元素 |
LRANGE key start stop | 獲取列表key指定范圍內(nèi)的元素,【0,-1】表示獲取全部元素 |
LSET key index value | 替換index索引對(duì)應(yīng)的值為value |
LTRIM key start stop | 裁剪原列表 |
LINSERT key BEFORE|AFTER pivot value | 在key列表從頭到尾的順序第一個(gè)匹配pivot元素值的前或者后面增加值value |
LPOP key count | 移出并獲取列表頭的count個(gè)元素 |
RPOP key count | 移出并獲取列表尾的count個(gè)元素 |
BLPOP key1 [key2] timeout | 移出并獲取列表的第一個(gè)元素(key1列表結(jié)束后開始key2列表),如果列表沒(méi)有元素會(huì)阻塞列表直到等待timeout秒后超時(shí)或發(fā)現(xiàn)可移出元素為止 |
BRPOP key1 [key2] timeout | 移出并獲取列表的最后一個(gè)元素,如果列表沒(méi)有元素會(huì)阻塞列表直到等待timeout秒后超時(shí)或發(fā)現(xiàn)可移出元素為止 |
BRPOPLPUSH source destination timeout | 移出source列表的最后一個(gè)值,并放入destination列表的最后,如果列表沒(méi)有元素會(huì)阻塞列表直到等待timeout秒或發(fā)現(xiàn)可移除元素為止 |
RPOPLPUSH source destination | RPOPLPUSH為BRPOPLPUSH的非阻塞版本 |
1.3 哈希(Hash)
Redis hash 是一個(gè) string 類型的 field(字段) 和 value(值) 的映射表,hash 特別適合用于存儲(chǔ)對(duì)象。
Redis 中每個(gè) hash 可以存儲(chǔ) 2^32 - 1 鍵值對(duì)(40多億)。
- 常用命令
命令 | 說(shuō)明 |
---|---|
HMSET key field1 value1 [field2 value2 …] | 設(shè)置hash值 |
HGETALL key | 獲取hash的所有field和value |
HGET key field | 獲取一個(gè)hash對(duì)應(yīng)的field的value |
HMGET key field1 [field2 …] | 獲取一個(gè)或多個(gè)hash對(duì)應(yīng)的field的value |
HKEYS key | 獲取hash所有的key值 |
HVALS key | 獲取hash所有key對(duì)應(yīng)的value |
HLEN key | 獲取hash對(duì)應(yīng)的filed的數(shù)量 |
HSTRLEN key field | 獲取hash指定field的value的長(zhǎng)度 |
HEXISTS key field | 判斷hash是否存在指定的field |
HSET key field value | 設(shè)置hash對(duì)應(yīng)的field和value |
HSETNX key field value | 僅當(dāng)指定的field在hash中不存在時(shí)才設(shè)置value |
HINCRBY key field increment | 將hash中指定的field的整型值增加increment |
HINCRBYFLOAT key field increment | 將hash中指定的field的值增加increment |
HSCAN key cusror [MATCH pattern] [COUNT count] | 不知道,沒(méi)用明白 |
1.4 集合(Set)
Redis 的 Set 是 String 類型的無(wú)序集合。集合成員是唯一的,這就意味著集合中不能出現(xiàn)重復(fù)的數(shù)據(jù),集合對(duì)象的編碼可以是 intset(整數(shù)集合) 或者 hashtable(字典或者也叫哈希表)。
Redis 中Set集合是通過(guò)哈希表實(shí)現(xiàn)的,所以添加,刪除,查找的復(fù)雜度都是 O(1)。
集合中最大的成員數(shù)為 2^32 - 1 (4294967295, 每個(gè)集合可存儲(chǔ)40多億個(gè)成員)
- 常用命令
命令 | 說(shuō)明 |
---|---|
SADD key member1 [member2…] | 添加一個(gè)或多個(gè)元素到集合里 |
SCARD key | 獲取集合里的元素?cái)?shù)量 |
SDIFF key1 [key2…] | 獲取key1中不存在于其他key的元素 |
SDIFFSTORE destination key1 [key2…] | 獲取隊(duì)列不存在的元素,并存儲(chǔ)在destination中,destination存在則會(huì)重新生成dstination |
SINTER key1 [key2…] | 獲取多個(gè)key集合的交集 |
SINTERSTORE destination key1 [key2…] | 獲取多個(gè)集合的交集,并存儲(chǔ)在destination中,destination存在則會(huì)重新生成dstination |
SISMEMBER key member | 確定一個(gè)給定的值是一個(gè)集合的成員 |
SMEMBERS key | 獲取集合里面的所有元素 |
SMOVE source destination member | 移動(dòng)集合里的一個(gè)元素到另一個(gè)集合 |
SPOP key [count] | 刪除并獲取一個(gè)集合里面的count個(gè)元素 |
SRANDMEMBER key [count] | 從集合里面隨機(jī)獲取count個(gè)元素 |
SREM key member1 [member2…] | 從集合里刪除一個(gè)或多個(gè)元素 |
SUNION key1 [key2…] | 獲取多個(gè)集合的元素(不會(huì)有重復(fù)的元素) |
SUNIONSTORE destination key1 [key2…] | 合并set元素,并將結(jié)果存入到destination中 |
SINTERCARD numkeys key1 [key2…] [LIMIT limit] | 返回指定結(jié)果集的交集產(chǎn)生的集合的基數(shù) |
SSCAN key cursor [MATCH pattern] [COUNT count] | 不知道,沒(méi)用明白 |
1.5 有序集合(ZSet)
Redis zset 和 set 一樣也是string類型元素的集合,且不允許重復(fù)的成員。
不同的是每個(gè)元素都會(huì)關(guān)聯(lián)一個(gè)double類型的分?jǐn)?shù),redis正是通過(guò)分?jǐn)?shù)來(lái)為集合中的成員進(jìn)行從小到大的排序。
zset的成員是唯一的,但分?jǐn)?shù)(score)卻可以重復(fù)。
zset集合是通過(guò)哈希表實(shí)現(xiàn)的,所以添加,刪除,查找的復(fù)雜度都是 O(1)。 集合中最大的成員數(shù)為 2^32 - 1。
- 常用命令
命令 | 說(shuō)明 |
---|---|
ZADD key [NX\XX] [CH] [INCR] score1 member1 [score 2 member2] | XX: 僅僅更新存在的成員,不添加新成員。 NX: 不更新存在的成員。只添加新成員。 CH: 修改返回值為發(fā)生變化的成員總數(shù),原始是返回新添加成員的總數(shù) (CH 是 changed 的意思)。更改的元素是新添加的成員,已經(jīng)存在的成員更新分?jǐn)?shù)。所以在命令中指定的成員有相同的分?jǐn)?shù)將不被計(jì)算在內(nèi)。注:在通常情況下,ZADD返回值只計(jì)算新添加成員的數(shù)量。 INCR: 當(dāng)ZADD指定這個(gè)選項(xiàng)時(shí),成員的操作就等同ZINCRBY命令,對(duì)成員的分?jǐn)?shù)進(jìn)行遞增操作。 ![]() |
ZCARD key | 獲取一個(gè)排序集合中的成員數(shù)量![]() |
ZCOUNT key min max | 返回分?jǐn)?shù)范圍內(nèi)的成員數(shù)量 |
ZINCRBY key increment member | 將一名成員的評(píng)分增加increment |
ZRANGE key start stop [WITHSCORES] | 返回有序集 key 中,指定區(qū)間內(nèi)的成員。其中成員的位置按 score 值遞增(從小到大)來(lái)排序。具有相同 score 值的成員按字典序(lexicographical order )來(lái)排列。 |
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] | 返回有序集 key 中,所有 score 值介于 min 和 max 之間(包括等于 min 或 max )的成員。有序集成員按 score 值遞增(從小到大)次序排列。具有相同 score 值的成員按字典序(lexicographical order)來(lái)排列(該屬性是有序集提供的,不需要額外的計(jì)算)??蛇x的 LIMIT 參數(shù)指定返回結(jié)果的數(shù)量及區(qū)間(就像SQL中的 SELECT LIMIT offset, count ),注意當(dāng) offset 很大時(shí),定位 offset 的操作可能需要遍歷整個(gè)有序集,此過(guò)程最壞復(fù)雜度為 O(N) 時(shí)間??蛇x的 WITHSCORES 參數(shù)決定結(jié)果集是單單返回有序集的成員,還是將有序集成員及其 score 值一起返回。該選項(xiàng)自 Redis 2.0 版本起可用。 |
ZRANK key member | 返回有序集 key 中成員 member 的排名。其中有序集成員按 score 值遞增(從小到大)順序排列。排名以 0 為底,也就是說(shuō), score 值最小的成員排名為 0 。 |
ZREM key member [member …] | 移除有序集 key 中的一個(gè)或多個(gè)成員,不存在的成員將被忽略。當(dāng) key 存在但不是有序集類型時(shí),返回一個(gè)錯(cuò)誤。 |
ZREMRANGEBYRANK key start stop | 移除有序集 key 中,指定排名(rank)區(qū)間內(nèi)的所有成員。區(qū)間分別以下標(biāo)參數(shù) start 和 stop 指出,包含 start 和 stop 在內(nèi)。下標(biāo)參數(shù) start 和 stop 都以 0 為底,也就是說(shuō),以 0 表示有序集第一個(gè)成員,以 1 表示有序集第二個(gè)成員,以此類推。你也可以使用負(fù)數(shù)下標(biāo),以 -1 表示最后一個(gè)成員, -2 表示倒數(shù)第二個(gè)成員,以此類推。 |
ZREMRANGEBYSCORE key min max | 移除有序集 key 中,所有 score 值介于 min 和 max 之間(包括等于 min 或 max )的成員。自版本2.1.6開始, score 值等于 min 或 max 的成員也可以不包括在內(nèi),詳情請(qǐng)參見 ZRANGEBYSCORE 命令。 |
ZREVRANGE key start stop [WITHSCORES] | 返回有序集 key 中,指定區(qū)間內(nèi)的成員。其中成員的位置按 score 值遞減(從大到小)來(lái)排列。具有相同 score 值的成員按字典序的逆序(reverse lexicographical order)排列。除了成員按 score 值遞減的次序排列這一點(diǎn)外, ZREVRANGE 命令的其他方面和 ZRANGE 命令一樣。 |
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count] | 返回有序集 key 中, score 值介于 max 和 min 之間(默認(rèn)包括等于 max 或 min )的所有的成員。有序集成員按 score 值遞減(從大到小)的次序排列。具有相同 score 值的成員按字典序的逆序(reverse lexicographical order )排列。除了成員按 score 值遞減的次序排列這一點(diǎn)外, ZREVRANGEBYSCORE 命令的其他方面和 ZRANGEBYSCORE 命令一樣。 |
ZREVRANK key member | 返回有序集 key 中成員 member 的排名。其中有序集成員按 score 值遞減(從大到小)排序。排名以 0 為底,也就是說(shuō), score 值最大的成員排名為 0 。使用 ZRANK 命令可以獲得成員按 score 值遞增(從小到大)排列的排名。 |
ZSCORE key member | 返回有序集 key 中,成員 member 的 score 值。如果 member 元素不是有序集 key 的成員,或 key 不存在,返回 nil 。 |
ZUNIONSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX] | 計(jì)算給定的一個(gè)或多個(gè)有序集的并集,其中給定 key 的數(shù)量必須以 numkeys 參數(shù)指定,并將該并集(結(jié)果集)儲(chǔ)存到 destination 。默認(rèn)情況下,結(jié)果集中某個(gè)成員的 score 值是所有給定集下該成員 score 值之 和 。 |
ZINTERSTORE destination numberkeys key1 [key2…] [WEIGHTS weight] [SUM|MIN|MAX] | 計(jì)算給定的numkeys個(gè)有序集合的交集,并且把結(jié)果放到destination中。 在給定要計(jì)算的key和其它參數(shù)之前,必須先給定key個(gè)數(shù)(numberkeys)。 默認(rèn)情況下,結(jié)果中一個(gè)元素的分?jǐn)?shù)是有序集合中該元素分?jǐn)?shù)之和,前提是該元素在這些有序集合中都存在。因?yàn)榻患笃涑蓡T必須是給定的每個(gè)有序集合中的成員,結(jié)果集中的每個(gè)元素的分?jǐn)?shù)和輸入的有序集合個(gè)數(shù)相等。如果destination存在,就把它覆蓋。 |
1.6 地理空間(GEO)
Redis GEO 主要用于存儲(chǔ)地理位置信息,并對(duì)存儲(chǔ)的信息進(jìn)行操作,包括:
添加地理位置的坐標(biāo)。
獲取地理位置的坐標(biāo)。
計(jì)算兩個(gè)位置之間的距離。
根據(jù)用戶給定的經(jīng)緯度坐標(biāo)來(lái)獲取指定范圍內(nèi)的地理位置集合。
地球上的地理位置是使用二維的經(jīng)緯度表示,經(jīng)度范圍 (-180, 180],緯度范圍 (-90, 90],只要我們確定一個(gè)點(diǎn)的經(jīng)緯度就可以名取得他在地球的位置。
將三維的地球變?yōu)槎S的坐標(biāo),再將二維的坐標(biāo)轉(zhuǎn)換為一維的點(diǎn)塊,最后將一維的點(diǎn)塊轉(zhuǎn)換為二進(jìn)制再通過(guò)base32編碼。
如何獲取某個(gè)地址的經(jīng)緯度:
https://api.map.baidu.com/lbsapi/getpoint/
- 常用命令
命令 | 說(shuō)明 |
---|---|
GEOADD key longitude latitude member [longitude latitude member …] | 將指定的地理空間位置(緯度、經(jīng)度、名稱)添加到指定的key中。這些數(shù)據(jù)將會(huì)存儲(chǔ)到sorted set這樣的目的是為了方便使用GEORADIUS或者GEORADIUSBYMEMBER命令對(duì)數(shù)據(jù)進(jìn)行半徑查詢等操作。 |
GEOHASH key member [member …] | 時(shí)間復(fù)雜度:O(log(N)) for each member requested, where N is the number of elements in the sorted set.返回一個(gè)或多個(gè)位置元素的 Geohash 表示。通常使用表示位置的元素使用不同的技術(shù),使用Geohash位置52點(diǎn)整數(shù)編碼。由于編碼和解碼過(guò)程中所使用的初始最小和最大坐標(biāo)不同,編碼的編碼也不同于標(biāo)準(zhǔn)。此命令返回一個(gè)標(biāo)準(zhǔn)的Geohash,在維基百科和geohash.org網(wǎng)站都有相關(guān)描述 |
GEOPOS key member [member …] | 從key里返回所有給定位置元素的位置(經(jīng)度和緯度)。 |
GEODIST key member1 member2 [unit] | 返回兩個(gè)給定位置之間的距離。如果兩個(gè)位置之間的其中一個(gè)不存在, 那么命令返回空值。指定單位的參數(shù) unit 必須是以下單位的其中一個(gè):m 表示單位為米。km 表示單位為千米。mi 表示單位為英里。ft 表示單位為英尺。如果用戶沒(méi)有顯式地指定單位參數(shù), 那么 GEODIST 默認(rèn)使用米作為單位。 |
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] | 以給定的經(jīng)緯度為中心, 返回鍵包含的位置元素當(dāng)中, 與中心的距離不超過(guò)給定最大距離的所有位置元素。范圍可以使用以下其中一個(gè)單位:m 表示單位為米。km 表示單位為千米。mi 表示單位為英里。ft 表示單位為英尺。 |
GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] | 這個(gè)命令和 GEORADIUS 命令一樣, 都可以找出位于指定范圍內(nèi)的元素, 但是 GEORADIUSBYMEMBER 的中心點(diǎn)是由給定的位置元素決定的, 而不是像 GEORADIUS 那樣, 使用輸入的經(jīng)度和緯度來(lái)決定中心點(diǎn)指定成員的位置被用作查詢的中心。 |
處理中文顯式亂碼
使用 rwa參數(shù)
redis -cli --raw
1.7 基數(shù)統(tǒng)計(jì)(HyperLogLog)
HyperLogLog 是用來(lái)做基數(shù)統(tǒng)計(jì)的算法,HyperLogLog 的優(yōu)點(diǎn)是,在輸入元素的數(shù)量或者體積非常非常大時(shí),計(jì)算基數(shù)所需的空間總是固定且是很小的。
在 Redis 里面,每個(gè) HyperLogLog 鍵只需要花費(fèi) 12 KB 內(nèi)存,就可以計(jì)算接近 2^64 個(gè)不同元素的基 數(shù)。這和計(jì)算基數(shù)時(shí),元素越多耗費(fèi)內(nèi)存就越多的集合形成鮮明對(duì)比。
但是,因?yàn)?HyperLogLog 只會(huì)根據(jù)輸入元素來(lái)計(jì)算基數(shù),而不會(huì)儲(chǔ)存輸入元素本身,所以 HyperLogLog 不能像集合那樣,返回輸入的各個(gè)元素。
需求:
統(tǒng)計(jì)某個(gè)網(wǎng)站、某篇文章的UV(UNIQUE VISITOR)
功能:
一種去重復(fù)后的真實(shí)個(gè)數(shù)的數(shù)據(jù)集。
常用命令:
命令 | 說(shuō)明 |
---|---|
PFADD key element [element …] | 將除了第一個(gè)參數(shù)以外的參數(shù)存儲(chǔ)到以第一個(gè)參數(shù)為變量名的HyperLogLog結(jié)構(gòu)中. |
PFCOUNT key [key …] | 當(dāng)參數(shù)為一個(gè)key時(shí),返回存儲(chǔ)在HyperLogLog結(jié)構(gòu)體的該變量的近似基數(shù),如果該變量不存在,則返回0. |
PFMERGE destkey sourcekey [sourcekey …] | 將多個(gè) HyperLogLog 合并(merge)為一個(gè) HyperLogLog , 合并后的 HyperLogLog 的基數(shù)接近于所有輸入 HyperLogLog 的可見集合(observed set)的并集. |
1.8 位圖(bitmap)
由0和1狀態(tài)表現(xiàn)的二進(jìn)制位的bit數(shù)組
需求:
每日簽到、上下班打卡
常用命令:
命令 | 說(shuō)明 |
---|---|
SETBIT key offset value | 設(shè)置或者清空key的value(字符串)在offset處的bit值。 |
GETBIT key offset | 返回key對(duì)應(yīng)的string在offset處的bit值 當(dāng)offset超出了字符串長(zhǎng)度的時(shí)候,這個(gè)字符串就被假定為由0比特填充的連續(xù)空間。當(dāng)key不存在的時(shí)候,它就認(rèn)為是一個(gè)空字符串,所以offset總是超出范圍,然后value也被認(rèn)為是由0比特填充的連續(xù)空間。到內(nèi)存分配。 |
STRLEN key | 返回key的string類型value的長(zhǎng)度。如果key對(duì)應(yīng)的非string類型,就返回錯(cuò)誤。 |
BITCOUNT key [start end] | 統(tǒng)計(jì)字符串被設(shè)置為1的bit數(shù).一般情況下,給定的整個(gè)字符串都會(huì)被進(jìn)行計(jì)數(shù),通過(guò)指定額外的 start 或 end 參數(shù),可以讓計(jì)數(shù)只在特定的位上進(jìn)行。 |
BITOP operation destkey key [key …] | 對(duì)一個(gè)或多個(gè)保存二進(jìn)制位的字符串 key 進(jìn)行位元操作,并將結(jié)果保存到 destkey 上。 |
應(yīng)用場(chǎng)景:
1.9 位域(bitfield)
通過(guò)bitfield命令可以一次性操作多個(gè)比特位域(指的是連續(xù)的多個(gè)比特位),它會(huì)執(zhí)行一系列操作并返回一個(gè)響應(yīng)數(shù)組,這個(gè)數(shù)組中的元素對(duì)應(yīng)參數(shù)列表中的相應(yīng)操作的執(zhí)行結(jié)果。
說(shuō)白了就是通過(guò)bitfield命令我們可以一次性對(duì)多個(gè)比特位域進(jìn)行操作。
將一個(gè)Redis字符串看作是一個(gè)由二進(jìn)制位組成的數(shù)組,并能對(duì)變長(zhǎng)位寬和任意沒(méi)有字節(jié)對(duì)齊的指定整型位域進(jìn)行尋址和修改。
1.10 流(Stream)
Redis Stream 是 Redis 5.0 版本新增加的數(shù)據(jù)結(jié)構(gòu)。
Redis Stream 主要用于消息隊(duì)列(MQ,Message Queue),Redis 本身是有一個(gè) Redis 發(fā)布訂閱 (pub/sub) 來(lái)實(shí)現(xiàn)消息隊(duì)列的功能,但它有個(gè)缺點(diǎn)就是消息無(wú)法持久化,如果出現(xiàn)網(wǎng)絡(luò)斷開、Redis 宕機(jī)等,消息就會(huì)被丟棄。
簡(jiǎn)單來(lái)說(shuō)發(fā)布訂閱 (pub/sub) 可以分發(fā)消息,但無(wú)法記錄歷史消息。
而 Redis Stream 提供了消息的持久化和主備復(fù)制功能,可以讓任何客戶端訪問(wèn)任何時(shí)刻的數(shù)據(jù),并且能記住每一個(gè)客戶端的訪問(wèn)位置,還能保證消息不丟失。
Stream結(jié)構(gòu):
1 | Message Content | 消息內(nèi)容 |
2 | Consumer group | 消費(fèi)組,通過(guò)XGROUP CREATE 命令創(chuàng)建,同一個(gè)消費(fèi)組可以有多個(gè)消費(fèi)者 |
3 | Last_delivered_id | 游標(biāo),每個(gè)消費(fèi)組會(huì)有個(gè)游標(biāo) last_delivered_id,任意一個(gè)消費(fèi)者讀取了消息都會(huì)使游標(biāo) last_delivered_id 往前移動(dòng)。 |
4 | Consumer | 消費(fèi)者,消費(fèi)組中的消費(fèi)者 |
5 | Pending_ids | 消費(fèi)者會(huì)有一個(gè)狀態(tài)變量,用于記錄被當(dāng)前消費(fèi)已讀取但未ack的消息Id,如果客戶端沒(méi)有ack,這個(gè)變量里面的消息ID會(huì)越來(lái)越多,一旦某個(gè)消息被ack它就開始減少。這個(gè)pending_ids變量在Redis官方被稱之為 PEL(Pending Entries List),記錄了當(dāng)前已經(jīng)被客戶端讀取的消息,但是還沒(méi)有 ack (Acknowledge character:確認(rèn)字符),它用來(lái)確??蛻舳酥辽傧M(fèi)了消息一次,而不會(huì)在網(wǎng)絡(luò)傳輸?shù)闹型緛G失了沒(méi)處理 |
隊(duì)列常用命令:
命令 | 說(shuō)明 |
---|---|
XADD key ID field string [field string …] | 將指定的流條目追加到指定key的流中。 如果key不存在,作為運(yùn)行這個(gè)命令的副作用,將使用流的條目自動(dòng)創(chuàng)建key。 |
XRANGE key start end [COUNT count] | 此命令返回流中滿足給定ID范圍的條目。范圍由最小和最大ID指定。所有ID在指定的兩個(gè)ID之間或與其中一個(gè)ID相等(閉合區(qū)間)的條目將會(huì)被返回。XRANGE命令有許多用途:返回特定時(shí)間范圍的項(xiàng)目。這是可能的,因?yàn)榱鞯腎D與時(shí)間相關(guān)。增量迭代流,每次迭代只返回幾個(gè)項(xiàng)目。但它在語(yǔ)義上比SCAN函數(shù)族強(qiáng)大很多。從流中獲取單個(gè)條目,提供要獲取兩次的條目的ID:作為查詢間隔的開始和結(jié)束。該命令還有一個(gè)倒序命令,以相反的順序返回項(xiàng)目,叫做XREVRANGE,除了返回順序相反以外,它們是完全相同的。 |
XREVRANGE | 此命令與XRANGE完全相同,但顯著的區(qū)別是以相反的順序返回條目,并以相反的順序獲取開始-結(jié)束參數(shù):在XREVRANGE中,你需要先指定結(jié)束ID,再指定開始ID,該命令就會(huì)從結(jié)束ID側(cè)開始生成兩個(gè)ID之間(或完全相同)的所有元素。因此,例如,要獲得從較高ID到較低ID的所有元素,可以使用:XREVRANGE + - |
XDEL | 從指定流中移除指定的條目,并返回成功刪除的條目的數(shù)量,在傳遞的ID不存在的情況下, 返回的數(shù)量可能與傳遞的ID數(shù)量不同。 |
XLEN | 返回流中的條目數(shù)。如果指定的key不存在,則此命令返回0,就好像該流為空。 但是請(qǐng)注意,與其他的Redis類型不同,零長(zhǎng)度流是可能的,所以你應(yīng)該調(diào)用TYPE 或者 EXISTS 來(lái)檢查一個(gè)key是否存在。 |
XTRIM | XTRIM將流裁剪為指定數(shù)量的項(xiàng)目,如有需要,將驅(qū)逐舊的項(xiàng)目(ID較小的項(xiàng)目)。此命令被設(shè)想為接受多種修整策略,但目前只實(shí)現(xiàn)了一種,即MAXLEN,并且與XADD中的MAXLEN選項(xiàng)完全相同。 |
XREAD | 從一個(gè)或者多個(gè)流中讀取數(shù)據(jù),僅返回ID大于調(diào)用者報(bào)告的最后接收ID的條目。此命令有一個(gè)阻塞選項(xiàng),用于等待可用的項(xiàng)目,類似于BRPOP或者BZPOPMIN等等。 |
消費(fèi)常用命令:
命令 | 說(shuō)明 |
---|---|
XGROUP [CREATE key groupname id-or-$] [SETID key id-or-$] [DESTROY key groupname] [DELCONSUMER key groupname consumername] | 該命令用于管理流數(shù)據(jù)結(jié)構(gòu)關(guān)聯(lián)的消費(fèi)者組。使用XGROUP你可以:創(chuàng)建與流關(guān)聯(lián)的新消費(fèi)者組。銷毀一個(gè)消費(fèi)者組。從消費(fèi)者組中移除指定的消費(fèi)者。將消費(fèi)者組的最后交付ID設(shè)置為其他內(nèi)容。要?jiǎng)?chuàng)建一個(gè)新的消費(fèi)者組,請(qǐng)使用以下格式:XGROUP CREATE mystream consumer-group-name $ |
XREADGROUP GROUP group consumer [COUNT count] [BLOCK milliseconds] STREAMS key [key …] ID [ID …] | XREADGROUP命令是XREAD命令的特殊版本,支持消費(fèi)者組。在閱讀本頁(yè)之前,你可能必須先理解XREAD命令才有意義。 |
XPENDING | 通過(guò)消費(fèi)者組從流中獲取數(shù)據(jù),而不是確認(rèn)這些數(shù)據(jù),具有創(chuàng)建待處理?xiàng)l目的效果。這在XREADGROUP命令中已有詳盡的說(shuō)明,在我們的Redis Streams介紹中更好。XACK命令會(huì)立即從待處理?xiàng)l目列表(PEL)中移除待處理?xiàng)l目,因?yàn)橐坏┫⒈怀晒μ幚?#xff0c;消費(fèi)者組就不再需要跟蹤它并記住消息的當(dāng)前所有者。 |
XACK | XACK命令用于從流的消費(fèi)者組的待處理?xiàng)l目列表(簡(jiǎn)稱PEL)中刪除一條或多條消息。 當(dāng)一條消息交付到某個(gè)消費(fèi)者時(shí),它將被存儲(chǔ)在PEL中等待處理, 這通常出現(xiàn)在作為調(diào)用XREADGROUP命令的副作用,或者一個(gè)消費(fèi)者通過(guò)調(diào)用XCLAIM命令接管消息的時(shí)候。 待處理消息被交付到某些消費(fèi)者,但是服務(wù)器尚不確定它是否至少被處理了一次。 因此對(duì)新調(diào)用XREADGROUP來(lái)獲取消費(fèi)者的消息歷史記錄(比如用0作為ID)將返回此類消息。 類似地,待處理的消息將由檢查PEL的XPENDING命令列出。 |
1.11 Redis常用命令
命令 | 說(shuō)明 |
---|---|
keys * | 查看當(dāng)前庫(kù)所有的key |
exists key | 判斷某刻key是否存在 |
type key | 查看key的類型 |
del key | 刪除指定的key |
unlink key | 非阻塞刪除,僅僅將key從keyspace元數(shù)據(jù)中刪除,真正的刪除會(huì)在后續(xù)異步執(zhí)行 |
ttl key | 查看還有多少表過(guò)期,-1表示永不過(guò)期,-2表示已過(guò)期 |
expire key 秒 | 設(shè)置key多少秒后過(guò)期 |
pexpire 毫秒 | 設(shè)置key多少毫秒后過(guò)期 |
expireat 秒(時(shí)間戳格式) | 設(shè)置key什么時(shí)候過(guò)期 |
pexpireat 毫秒(時(shí)間戳格式) | 設(shè)置key什么時(shí)候過(guò)期 |
move key dbindex[0-15] | 將當(dāng)前庫(kù)的key移動(dòng)到指定庫(kù)中 |
select dbindex[0-15] | 切換數(shù)據(jù)庫(kù)[0-15],默認(rèn)為0,單例模式redis會(huì)一次性創(chuàng)建16個(gè)庫(kù) 集群模式下只有一個(gè)庫(kù)db0 |
dbsize | 查看當(dāng)前庫(kù)的key數(shù)量 |
flushdb | 清空當(dāng)前庫(kù) |
flushall | 清空所有庫(kù) |
Redis常用命令查詢網(wǎng)址
-
中文
http://www.redis.cn/commands.html -
英文
https://redis.io/commands -
命令參考
http://doc.redisfans.com/index.html
命令不區(qū)分大小寫,Key是大小寫敏感的
永遠(yuǎn)的幫助命令 help@類型 例如:help @string