redis基本數(shù)據(jù)類型
1锣尉、String
在Redis中抖锥,所有的 key 都是字符串(java中操作的key會被序列化,在redis中都是字符串形式)贰逾。不同的key對應(yīng)的value則具備不同的數(shù)據(jù)結(jié)構(gòu),所說的五種不同的數(shù)據(jù)類型错洁,指的是value的數(shù)據(jù)類型不同秉宿。
Redis 中的字符串是動態(tài)字符串,內(nèi)部是可以修改的屯碴,像 Java 中的 StringBuffer描睦,它采用分配冗余空間
的方式來減少內(nèi)存的頻繁分配。在 Redis 內(nèi)部結(jié)構(gòu)中导而,一般實(shí)際分配的內(nèi)存會大于需要的內(nèi)存忱叭,當(dāng)字符
串小于 1M 的時候,擴(kuò)容都是在現(xiàn)有的空間基礎(chǔ)上加倍今艺,擴(kuò)容每次擴(kuò) 1M 空間韵丑,最大 512M。
Redis 字符串常用指令:
命令 | 描述 | 示例 |
---|---|---|
set | 設(shè)置key對應(yīng)的value的值 | set key value |
append | key 已存在虚缎,在對應(yīng)的value后追加值撵彻,否則就創(chuàng)建新的鍵值對 | append key value |
decr | 可以實(shí)現(xiàn)對value的減 1 操作(前提是 value 是一個數(shù)字),如果value不是數(shù)字,會報錯,如果value 不存在,則會給一個默認(rèn)的值為0,在默認(rèn)值的基礎(chǔ)上減1 | decr key |
decrby | 和 decr 類似,但是可以自己設(shè)置步長实牡,該命令第二個參數(shù)就是步長(increment) | decrby key increment |
get | 獲取key對應(yīng)的value的值 | get key |
getrange | 用來返回key對應(yīng)的value的子串千康,類似于java里邊的 substring。這個命令第二個和第三個參數(shù)就是截取的起始和終止位置铲掐,其中,下標(biāo)從0開始計數(shù)值桩,-1 表示最后一個字符串摆霉,-2 表示倒數(shù)第二個字符串,以此類推... | getrange key start end |
getset | 獲取并更新某一個 key, 會先返回key對應(yīng)的value奔坟,然后更新key對應(yīng)的value為新set的值 | getset key value |
incr | 給某一個 key 的 value 自增 (自增1) | incr key |
incrby | 給某一個 key 的 value 自增携栋,同時還可以設(shè)置步長(increment) | incrby key increment |
incrbyfloat | 和 incrby 類似,但是自增的步長可以設(shè)置為浮點(diǎn)數(shù) | incrbyfloat key 0.5 |
mget咳秉、mset | 批量獲取和批量存儲 | mget key1 key2 key3 mset key1 value1 key2 value2 |
ttl | 查看 key 的有效期 (-1永不過期) | ttl key |
setex | 在給 key 設(shè)置 value 的同時婉支,還設(shè)置過期時間(單位:s) | setex key second value |
psetex | 和 setex 類似 (單位:ms) | psetex key milliseconds value |
setnx | 默認(rèn)情況下, set 命令會覆蓋已經(jīng)存在的 key澜建,setnx 則不會 (已存在的不會進(jìn)行修改向挖,且返回0,不存在的設(shè)置成功炕舵,返回1) | setnx key value |
msetnx | 批量設(shè)置(有一個key存在何之,就都失敗,返回0) | msetnx key1 value1 key2 value2 |
setrange | 覆蓋一個已經(jīng)存在的 key 的value (offset:偏移量咽筋,起始下標(biāo)溶推,從0開始) | setrange key offset value |
strlen | 查看字符串長度 | strlen key |
1.2 BIT 命令
在Redis中,字符串都是以二進(jìn)制的方式存儲的。例如:
set k1 a, a對應(yīng)ASCII碼是97 蒜危,97轉(zhuǎn)為二進(jìn)制是 01100001虱痕, BIT相關(guān)的命令就是對二進(jìn)制進(jìn)行操作的。
命令 | 描述 | 示例 |
---|---|---|
getbit | key 對應(yīng)的 value 在 offset 處的 bit 值 | getbit key offset |
setbit | 修改 key 對應(yīng)的 value 在 offset 處的 bit 值 | setbit key offset value |
bitcount | 統(tǒng)計二進(jìn)制數(shù)據(jù)中 1 的個數(shù) | bitcount key [start end] |
實(shí)例: a對應(yīng)的是 01100001辐赞, b對應(yīng)的是 01100010
127.0.0.1:6379> set k1 a
OK
127.0.0.1:6379> get k1
"a"
127.0.0.1:6379> getbit k1 0
(integer) 0
127.0.0.1:6379> getbit k1 1
(integer) 1
127.0.0.1:6379> getbit k1 2
(integer) 1
127.0.0.1:6379> getbit k1 3
(integer) 0
127.0.0.1:6379> getbit k1 4
(integer) 0
127.0.0.1:6379> getbit k1 5
(integer) 0
127.0.0.1:6379> getbit k1 6
(integer) 0
127.0.0.1:6379> getbit k1 7
(integer) 1
127.0.0.1:6379> setbit k1 6 1
(integer) 0
127.0.0.1:6379> setbit k1 7 0
(integer) 1
127.0.0.1:6379> get k1
"b"
127.0.0.1:6379> bitcount k1
(integer) 3
127.0.0.1:6379> bitcount k1 0 3
(integer) 3
127.0.0.1:6379>
bit的一個運(yùn)用:統(tǒng)計個數(shù)部翘。
下表列出了常用的 redis 字符串命令:
序號 | 命令 | 描述 |
---|---|---|
1 | SET key value | 設(shè)置指定 key 的值 |
2 | GET key | 獲取指定 key 的值。 |
3 | GETRANGE key start end | 返回 key 中字符串值的子字符 |
4 | GETSET key value | 將給定 key 的值設(shè)為 value 占拍,并返回 key 的舊值(old value)略就。 |
5 | GETBIT key offset | 對 key 所儲存的字符串值,獲取指定偏移量上的位(bit)晃酒。 |
6 | MGET key1 [key2..] | 獲取所有(一個或多個)給定 key 的值表牢。 |
7 | SETBIT key offset value | 對 key 所儲存的字符串值,設(shè)置或清除指定偏移量上的位(bit)贝次。 |
8 | SETEX key seconds value | 將值 value 關(guān)聯(lián)到 key 崔兴,并將 key 的過期時間設(shè)為 seconds (以秒為單位)。 |
9 | SETNX key value | 只有在 key 不存在時設(shè)置 key 的值蛔翅。 |
10 | SETRANGE key offset value | 用 value 參數(shù)覆寫給定 key 所儲存的字符串值敲茄,從偏移量 offset 開始。 |
11 | STRLEN key | 返回 key 所儲存的字符串值的長度山析。 |
12 | MSET key value [key value ...] | 同時設(shè)置一個或多個 key-value 對堰燎。 |
13 | MSETNX key value [key value ...] | 同時設(shè)置一個或多個 key-value 對,當(dāng)且僅當(dāng)所有給定 key 都不存在笋轨。 |
14 | PSETEX key milliseconds value | 這個命令和 SETEX 命令相似秆剪,但它以毫秒為單位設(shè)置 key 的生存時間,而不是像 SETEX 命令那樣爵政,以秒為單位仅讽。 |
15 | INCR key | 將 key 中儲存的數(shù)字值增一。 |
16 | INCRBY key increment | 將 key 所儲存的值加上給定的增量值(increment) 钾挟。 |
17 | INCRBYFLOAT key increment | 將 key 所儲存的值加上給定的浮點(diǎn)增量值(increment) 洁灵。 |
18 | DECR key | 將 key 中儲存的數(shù)字值減一。 |
19 | DECRBY key decrement key | 所儲存的值減去給定的減量值(decrement) 掺出。 |
20 | APPEND key value | 如果 key 已經(jīng)存在并且是一個字符串徽千, APPEND 命令將 value 追加到 key 原來的值的末尾。 |
2蛛砰、Hash
在hash結(jié)構(gòu)中罐栈,key是一個字符串,value則是一個 key/value 的鍵值對泥畅。
Redis hash 命令
命令 | 描述 | 示例 |
---|---|---|
hset | 添加值 | hset key field value [field value ...] eg: hset k1 name lucky |
hget | 獲取值 | hget key field eg:hget k1 name |
hmset | 批量設(shè)置 | hmset key field value [field value ...] |
hmget | 批量獲取 | hmget key field [field ...] |
hdel | 刪除一個指定的 field | hdel key field [field ...] |
hsetnx | 默認(rèn)情況下荠诬,如果 key 和 field 相同琅翻,會覆蓋掉已有的 value,hsetnx 則不會 | hsetnx key field value |
hvals | 獲取所有的 value | hvals key |
hkeys | 獲取所有的 key | hkeys key |
hgetall | 同時獲取所有的 key 和 value | hgetall key |
hexists | 返回 field 是否存在(存在返回1柑贞,不存在返回0) | hexists key field |
hincrby | 給指定的 value 自增 | hincrby key field increment |
hincrbyfloat | 可以自增一個浮點(diǎn)數(shù) | hincrbyfloat key field increment |
hlen | 返回 某一個 key 中 value 的數(shù)量 | hlen key |
hstrlen | 返回某一個 key 中的某一個 field 的字符串長度 | hstrlen key field |
下表列出了 redis hash 基本的相關(guān)命令:
序號 | 命令 | 描述 |
---|---|---|
1 | HDEL key field2 [field2] | 刪除一個或多個哈希表字段 |
2 | HEXISTS key field | 查看哈希表 key 中方椎,指定的字段是否存在。 |
3 | HGET key field | 獲取存儲在哈希表中指定字段的值/td> |
4 | HGETALL key | 獲取在哈希表中指定 key 的所有字段和值 |
5 | HINCRBY key field increment | 為哈希表 key 中的指定字段的整數(shù)值加上增量 increment 钧嘶。 |
6 | HINCRBYFLOAT key field increment | 為哈希表 key 中的指定字段的浮點(diǎn)數(shù)值加上增量 increment 棠众。 |
7 | HKEYS key | 獲取所有哈希表中的字段 |
8 | HLEN key | 獲取哈希表中字段的數(shù)量 |
9 | HMGET key field1 [field2] | 獲取所有給定字段的值 |
10 | HMSET key field1 value1 [field2 value2 ] | 同時將多個 field-value (域-值)對設(shè)置到哈希表 key 中。 |
11 | HSET key field value | 將哈希表 key 中的字段 field 的值設(shè)為 value 有决。 |
12 | HSETNX key field value | 只有在字段 field 不存在時闸拿,設(shè)置哈希表字段的值。 |
13 | HVALS key | 獲取哈希表中所有值 |
14 | HSCAN key cursor [MATCH pattern] [COUNT count] | 迭代哈希表中的鍵值對书幕。 |
3新荤、List
Redis 列表命令
命令 | 描述 | 示例 |
---|---|---|
lpush | 將value值從左往右依次插入到列表頭部。如果 key 不存在台汇,那么在進(jìn)行 push 操作前會創(chuàng)建一個空列表苛骨。 | lpush key element [element ...] |
lrange | 返回列表指定區(qū)間內(nèi)的元素。 | lrange key start stop |
rpush | 功能類似于lpush苟呐,從右往左依次插入到列表頭部痒芝。 | rpush key element [element ...] |
rpop | 移除并返回列表的尾元素。 | rpop key |
lpop | 移除并返回列表的頭元素牵素。 | lpop key |
lindex | 返回列表中严衬,下標(biāo)為 index 的元素。 | lindex key index |
ltrim | 可以對一個列表進(jìn)行修剪 | ltrim key start stop |
blpop | 阻塞式的彈出笆呆,相當(dāng)于 lpop 的阻塞版 | blpop key [key ...] timeout |
下表列出了列表相關(guān)的基本命令:
序號 | 命令 | 描述 |
---|---|---|
1 | BLPOP key1 [key2] timeout | 移出并獲取列表的第一個元素瞳步, 如果列表沒有元素會阻塞列表直到等待超時或發(fā)現(xiàn)可彈出元素為止。 |
2 | BRPOP key1 [key2] timeout | 移出并獲取列表的最后一個元素腰奋, 如果列表沒有元素會阻塞列表直到等待超時或發(fā)現(xiàn)可彈出元素為止。 |
3 | BRPOPLPUSH source destination timeout | 從列表中彈出一個值抱怔,將彈出的元素插入到另外一個列表中并返回它劣坊; 如果列表沒有元素會阻塞列表直到等待超時或發(fā)現(xiàn)可彈出元素為止。 |
4 | LINDEX key index | 通過索引獲取列表中的元素 |
5 | LINSERT key BEFORE|AFTER pivot value | 在列表的元素前或者后插入元素 |
6 | LLEN key | 獲取列表長度 |
7 | LPOP key | 移出并獲取列表的第一個元素 |
8 | LPUSH key value1 [value2] | 將一個或多個值插入到列表頭部 |
9 | LPUSHX key value | 將一個或多個值插入到已存在的列表頭部 |
10 | LRANGE key start stop | 獲取列表指定范圍內(nèi)的元素 |
11 | LREM key count value | 移除列表元素 |
12 | LSET key index value | 通過索引設(shè)置列表元素的值 |
13 | LTRIM key start stop | 對一個列表進(jìn)行修剪(trim)屈留,就是說局冰,讓列表只保留指定區(qū)間內(nèi)的元素,不在指定區(qū)間之內(nèi)的元素都將被刪除灌危。 |
14 | RPOP key | 移除并獲取列表最后一個元素 |
15 | RPOPLPUSH source destination | 移除列表的最后一個元素康二,并將該元素添加到另一個列表并返回 |
16 | RPUSH key value1 [value2] | 在列表中添加一個或多個值 |
17 | RPUSHX key value | 為已存在的列表添加值 |
4、Set
set 集合內(nèi)的元素是不重復(fù)的勇蝙。
Redis 集合命令
命令 | 描述 | 示例 |
---|---|---|
sadd | 添加元素到一個 key 中 | sadd key member [member ...] |
smembers | 獲取一個 key 下的所有元素沫勿。 | smembers key |
srem | 移除指定的元素 | srem key member [member ...] |
sismemeber | 返回某一個成員是否在集合中(返回0:不存在,1:存在) | sismember key member |
scard | 返回集合的數(shù)量 | scard key |
srandmember | 隨機(jī)返回一個元素 | srandmember key [count] |
spop | 隨機(jī)返回并且出棧一個元素 | spop key [count] |
smove | 把一個元素從一個集合移到另一個集合中去 | smove source destination member |
sdiff | 返回兩個集合的差集 | sdiff key [key ...] |
sinter | 返回兩個集合的交集 | sinter key [key ...] |
sdiffstore | 類似于 sdiff ,不同的是产雹,計算出來的結(jié)果會保存在一個新的集合中诫惭。 | sdiffstore destination key [key ...] |
sinterstore | 類似于 sinter,只是將計算出來的交集保存到一個新的集合中蔓挖。 | sinterstore destination key [key ...] |
sunion | 求并集 | sunion key [key ...] |
sunionstore | 求并集并且將結(jié)果保存到新的集合中夕土。 | sunionstore destination key [key ...] |
下表列出了 Redis 集合基本命令:
序號 | 命令 | 描述 |
---|---|---|
1 | SADD key member1 [member2] | 向集合添加一個或多個成員 |
2 | SCARD key | 獲取集合的成員數(shù) |
3 | SDIFF key1 [key2] | 返回給定所有集合的差集 |
4 | SDIFFSTORE destination key1 [key2] | 返回給定所有集合的差集并存儲在 destination 中 |
5 | SINTER key1 [key2] | 返回給定所有集合的交集 |
6 | SINTERSTORE destination key1 [key2] | 返回給定所有集合的交集并存儲在 destination 中 |
7 | SISMEMBER key member | 判斷 member 元素是否是集合 key 的成員 |
8 | SMEMBERS key | 返回集合中的所有成員 |
9 | SMOVE source destination member | 將 member 元素從 source 集合移動到 destination 集合 |
10 | SPOP key | 移除并返回集合中的一個隨機(jī)元素 |
11 | SRANDMEMBER key [count] | 返回集合中一個或多個隨機(jī)數(shù) |
12 | SREM key member1 [member2] | 移除集合中一個或多個成員 |
13 | SUNION key1 [key2] | 返回所有給定集合的并集 |
14 | SUNIONSTORE destination key1 [key2] | 所有給定集合的并集存儲在 destination 集合中 |
15 | SSCAN key cursor [MATCH pattern] [COUNT count] | 迭代集合中的元素 |
5、ZSet
有序集合
Redis 有序集合命令
命令 | 描述 | 示例 |
---|---|---|
zadd | 將指定的元素添加到有序集合中 | zadd key score member |
zscore | 返回 member 的 score 值 | zscore key member |
zrange | 返回集合中的一組元素 (WITHSCORES: 會攜帶值) | zrange key start stop [withscores] |
zrevrange | 返回一組元素瘟判,但是是倒序 | zrevrange key start stop |
zcard | 返回元素個數(shù) | zcard key |
zcount | 返回 score 在某一個區(qū)間內(nèi)的元素個數(shù) | zcount key min max eg: zcount k1 60 90 包含60,90 zcount k1 (60 (90 不包含60,90 |
zrangebyscore | 按照 score 的范圍返回元素 | zrangebyscore key min max [withscores] |
zrank | 返回元素排名 (從小到大) | zrank key member |
zrevrank | 返回元素排名 (從大到小) | zrevrank key member |
zincrby | score 自增 | zincrby key increment member |
zinterstore | 給兩個集合求交集 | ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] |
zrem | 彈出一個元素 | zrem key member [member ...] |
zlexcount | 計算有序集合中成員數(shù)量 | zlexcount key min max eg: zlexcount k1 - + 統(tǒng)計全部 zlexcount k1 (member (member |
zrangebylex | 返回指定區(qū)間內(nèi)的成員 | zrangebylex key min max eg: zrangebylex k1 - + zrangebylex k1 (member (member |
下表列出了 redis 有序集合的基本命令:
序號 | 命令 | 描述 |
---|---|---|
1 | ZADD key score1 member1 [score2 member2] | 向有序集合添加一個或多個成員怨绣,或者更新已存在成員的分?jǐn)?shù) |
2 | ZCARD key | 獲取有序集合的成員數(shù) |
3 | ZCOUNT key min max | 計算在有序集合中指定區(qū)間分?jǐn)?shù)的成員數(shù) |
4 | ZINCRBY key increment member | 有序集合中對指定成員的分?jǐn)?shù)加上增量 increment |
5 | ZINTERSTORE destination numkeys key [key ...] | 計算給定的一個或多個有序集的交集并將結(jié)果集存儲在新的有序集合 key 中 |
6 | ZLEXCOUNT key min max | 在有序集合中計算指定字典區(qū)間內(nèi)成員數(shù)量 |
7 | ZRANGE key start stop [WITHSCORES] | 通過索引區(qū)間返回有序集合成指定區(qū)間內(nèi)的成員 |
8 | ZRANGEBYLEX key min max [LIMIT offset count] | 通過字典區(qū)間返回有序集合的成員 |
9 | ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] | 通過分?jǐn)?shù)返回有序集合指定區(qū)間內(nèi)的成員 |
10 | ZRANK key member | 返回有序集合中指定成員的索引 |
11 | ZREM key member [member ...] | 移除有序集合中的一個或多個成員 |
12 | ZREMRANGEBYLEX key min max | 移除有序集合中給定的字典區(qū)間的所有成員 |
13 | ZREMRANGEBYRANK key start stop | 移除有序集合中給定的排名區(qū)間的所有成員 |
14 | ZREMRANGEBYSCORE key min max | 移除有序集合中給定的分?jǐn)?shù)區(qū)間的所有成員 |
15 | ZREVRANGE key start stop [WITHSCORES] | 返回有序集中指定區(qū)間內(nèi)的成員,通過索引拷获,分?jǐn)?shù)從高到底 |
16 | ZREVRANGEBYSCORE key max min [WITHSCORES] | 返回有序集中指定分?jǐn)?shù)區(qū)間內(nèi)的成員篮撑,分?jǐn)?shù)從高到低排序 |
17 | ZREVRANK key member | 返回有序集合中指定成員的排名,有序集成員按分?jǐn)?shù)值遞減(從大到小)排序 |
18 | ZSCORE key member | 返回有序集中刀诬,成員的分?jǐn)?shù)值 |
19 | ZUNIONSTORE destination numkeys key [key ...] | 計算給定的一個或多個有序集的并集咽扇,并存儲在新的 key 中 |
20 | ZSCAN key cursor [MATCH pattern] [COUNT count] | 迭代有序集合中的元素(包括元素成員和元素分值) |
以上都是對于value的操作,下面是對key的操作陕壹。
6质欲、key
命令 | 描述 | 示例 |
---|---|---|
del | 刪除一個 key/value | del key [key ...] |
dump | 序列化給定的 key | dump key |
exists | 判斷一個 key 是否存在(存在返回1,不存在返回0) | exists key |
ttl | 查看一個 key 的有效期(-1 永久有效糠馆, -2 已經(jīng)過期) | ttl key |
expire | 給一個 key 設(shè)置有效期嘶伟,如果 key 在過期之前被重新 set 了,則過期時間會失效又碌。 | expire key seconds |
persist | 移除一個 key 的過期時間 | persist key |
keys * | 查看所有的 key | keys * keys pattern |
pttl | 和 ttl 一樣九昧,只不過這里返回的是毫秒 | pttl key |
7、說明
1毕匀、 四種數(shù)據(jù)類型(list/set/zset/hash)铸鹰,在第一次使用時,如果容器不存在皂岔,就自動創(chuàng)建一個
2蹋笼、 四種數(shù)據(jù)類型(list/set/zset/hash),如果里邊沒有元素了躁垛,那么立即刪除容器剖毯,釋放內(nèi)存。