中國(guó)建設(shè)行業(yè)網(wǎng)黑帽seo什么意思
Redis五大數(shù)據(jù)類型
Redis-Key
官網(wǎng):https://www.redis.net.cn/order/
序號(hào) | 命令語(yǔ)法 | 描述 |
---|---|---|
1 | DEL key | 該命令用于在 key 存在時(shí)刪除 key |
2 | DUMP key | 序列化給定 key ,并返回被序列化的值 |
3 | EXISTS key | 檢查給定 key 是否存在,存在返回1,否則返回0 |
4 | EXPIRE key seconds | 為給定 key 設(shè)置過(guò)期時(shí)間,以秒計(jì) |
5 | EXPIREAT key timestamp | EXPIREAT 的作用和 EXPIRE 類似,都用于為 key 設(shè)置過(guò)期時(shí)間。 不同在于 EXPIREAT 命令接受的時(shí)間參數(shù)是 UNIX 時(shí)間戳 |
6 | PEXPIRE key milliseconds | 設(shè)置 key 的過(guò)期時(shí)間以毫秒計(jì) |
7 | PEXPIREAT key milliseconds-timestamp | 設(shè)置 key 過(guò)期時(shí)間的時(shí)間戳(unix timestamp) 以毫秒計(jì) |
8 | KEYS pattern | 查找所有符合給定模式( pattern)的 key |
9 | MOVE key db | 將當(dāng)前數(shù)據(jù)庫(kù)的 key 移動(dòng)到給定的數(shù)據(jù)庫(kù) db 當(dāng)中 |
10 | PERSIST key | 移除 key 的過(guò)期時(shí)間,key 將持久保持 |
11 | PTTL key | 以毫秒為單位返回 key 的剩余的過(guò)期時(shí)間 |
12 | TTL key | 以秒為單位,返回給定 key 的剩余生存時(shí)間(TTL, time to live) |
13 | RANDOMKEY | 從當(dāng)前數(shù)據(jù)庫(kù)中隨機(jī)返回一個(gè) key |
14 | RENAME key newkey | 修改 key 的名稱 |
15 | RENAMENX key newkey | 僅當(dāng) newkey 不存在時(shí),將 key 改名為 newkey |
16 | SCAN cursor [MATCH pattern] [COUNT count] | 迭代數(shù)據(jù)庫(kù)中的數(shù)據(jù)庫(kù)鍵 |
17 | TYPE key | 返回 key 所儲(chǔ)存的值的類型 |
18 | SELECT db | 選擇數(shù)據(jù)庫(kù) 數(shù)據(jù)庫(kù)為0-15(默認(rèn)一共16個(gè)數(shù)據(jù)庫(kù)) |
19 | DBSIZE | 查看數(shù)據(jù)庫(kù)的key數(shù)量 |
20 | FLUSHDB | 清空當(dāng)前數(shù)據(jù)庫(kù) |
21 | FLUSHALL | 清空所有數(shù)據(jù)庫(kù) |
22 | ECHO | 打印命令 |
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> select 0
OK
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> set name zs
OK
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379> exists name
(integer) 1
127.0.0.1:6379> move name 1
(integer) 1
127.0.0.1:6379> keys *
1) "age"
127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379> clear
127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379> expire name 10
(integer) 1
127.0.0.1:6379> ttl name
(integer) 5
127.0.0.1:6379>
String(字符串)
Redis 字符串?dāng)?shù)據(jù)類型的相關(guān)命令用于管理 redis 字符串值
String 是 redis 最基本的類型,你可以理解成與 Memcached 一模一樣的類型,一個(gè) key 對(duì)應(yīng)一個(gè) value。
String 類型是二進(jìn)制安全的,意思是 redis 的 string 可以包含任何數(shù)據(jù)。比如jpg圖片或者序列化的對(duì)象。
String 類型是 Redis 最基本的數(shù)據(jù)類型,String 類型的值最大能存儲(chǔ) 512MB。
String類型一般用于緩存、限流、計(jì)數(shù)器、分布式鎖、分布式Session。
Redis 字符串命令
下表列出了常用的 redis 字符串命令:
序號(hào) | 命令語(yǔ)法 | 描述 |
---|---|---|
1 | SET key value | 設(shè)置指定 key 的值 |
2 | GET key | 獲取指定 key 的值 |
3 | GETRANGE key start end | 返回 key 中字符串值的子字符,end=-1時(shí)表示全部 |
4 | SETBIT key offset value | 對(duì) key 所儲(chǔ)存的字符串值,設(shè)置或清除指定偏移量上的位(bit) |
5 | GETBIT key offset | 對(duì) key 所儲(chǔ)存的字符串值,獲取指定偏移量上的位(bit) |
6 | MSET key value [key value …] | 同時(shí)設(shè)置一個(gè)或多個(gè) key-value 對(duì) |
7 | MGET key1 [key2…] | 獲取所有(一個(gè)或多個(gè))給定 key 的值 |
8 | GETSET key value | 將給定 key 的值設(shè)為 value ,并返回 key 的舊值(old value) |
9 | SETEX key seconds value | 將值 value 關(guān)聯(lián)到 key ,并將 key 的過(guò)期時(shí)間設(shè)為 seconds (以秒為單位) |
10 | SETNX key value | 只有在 key 不存在時(shí)設(shè)置 key 的值 |
11 | SETRANGE key offset value | 用 value 參數(shù)覆寫給定 key 所儲(chǔ)存的字符串值,從偏移量 offset 開(kāi)始 |
12 | STRLEN key | 返回 key 所儲(chǔ)存的字符串值的長(zhǎng)度 |
13 | MSETNX key value [key value …] | 同時(shí)設(shè)置一個(gè)或多個(gè) key-value 對(duì),當(dāng)且僅當(dāng)所有給定 key 都不存在 |
14 | PSETEX key milliseconds value | 與 SETEX 命令相似,但它以毫秒為單位設(shè)置 key 的生存時(shí)間 |
15 | INCR key | 將 key 中儲(chǔ)存的數(shù)字值增一 |
16 | INCRBY key increment | 將 key 所儲(chǔ)存的值加上給定的增量值(increment) |
17 | INCRBYFLOAT key increment | 將 key 所儲(chǔ)存的值加上給定的浮點(diǎn)增量值(increment) |
18 | DECR key | 將 key 中儲(chǔ)存的數(shù)字值減一 |
19 | DECRBY key decrement | key 所儲(chǔ)存的值減去給定的減量值(decrement) |
20 | APPEND key value | 如果 key 已經(jīng)存在并且是一個(gè)字符串, APPEND 命令將指定的 value 追加到該 key 原來(lái)值 value 的末尾 |
實(shí)例:
127.0.0.1:6379> set key1 v1 #設(shè)置值
OK
127.0.0.1:6379> get key1 # 獲取值
"v1"
127.0.0.1:6379> exists key1 # 判斷key是否存在
(integer) 1
127.0.0.1:6379> append key1 "hello" # 追加字符串 如果當(dāng)前key不存在,則相當(dāng)于set key
(integer) 7
127.0.0.1:6379> get key1
"v1hello"
127.0.0.1:6379> strlen key
(integer) 0
127.0.0.1:6379> strlen key1
(integer) 7
127.0.0.1:6379> append key1 "redis"
(integer) 12
127.0.0.1:6379> strlen key1
(integer) 12
127.0.0.1:6379>
127.0.0.1:6379> set views 0
OK
127.0.0.1:6379> get views
"0"
127.0.0.1:6379> incr views # 將 key 中儲(chǔ)存的數(shù)字值增一
(integer) 1
127.0.0.1:6379> get views
"1"
127.0.0.1:6379> decr views # 將 key 中儲(chǔ)存的數(shù)字值減一
(integer) 0
127.0.0.1:6379> incrby views 10 # 將 key 所儲(chǔ)存的值加上給定的增量值(increment)
(integer) 10
127.0.0.1:6379> decrby views 5 # key 所儲(chǔ)存的值減去給定的減量值(decrement)
(integer) 5
127.0.0.1:6379> set key1 "hello,redis"
OK
127.0.0.1:6379> get key1
"hello,redis"
127.0.0.1:6379> getrange key1 0 5 # 返回 key 中字符串值的子字符,[0,5],end=-1時(shí)表示全部
"hello,"
127.0.0.1:6379> set key2 asdfgh
OK
127.0.0.1:6379> get key2
"asdfgh"
127.0.0.1:6379> setrange key2 1 xx # 用 value 參數(shù)覆寫給定 key 所儲(chǔ)存的字符串值,從偏移量 offset 開(kāi)始
(integer) 6
127.0.0.1:6379> get key2
"axxfgh"
127.0.0.1:6379> setex key3 30 "hello" # 將值 value 關(guān)聯(lián)到 key ,并將 key 的過(guò)期時(shí)間設(shè)為 seconds (以秒為單位)
OK
127.0.0.1:6379> ttl key3
(integer) 22
127.0.0.1:6379> setnx mykey "redis" # 只有在 key 不存在時(shí)設(shè)置 key 的值
(integer) 1
127.0.0.1:6379> setnx mykey "mongodb"
(integer) 0
127.0.0.1:6379> get mykey
"redis"
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 # 同時(shí)設(shè)置多個(gè)值
OK
127.0.0.1:6379> mget k1 k2 k3 # 同時(shí)獲取多個(gè)值
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> msetnx k1 v1 k4 v4 # msetnx 是原子性的操作
(integer) 0
127.0.0.1:6379> get k4
(nil)
127.0.0.1:6379> mset user:1:name zhangsan user:1:age 20
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "zhangsan"
2) "20"
127.0.0.1:6379> getset db redis # getset如果不存在值則返回nil,存在則先返回當(dāng)前的值,在設(shè)置新的值
(nil)
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> getset db mongodb
"redis"
127.0.0.1:6379> get db
"mongodb"
List(列表)
Redis列表是簡(jiǎn)單的字符串列表,按照插入順序排序。你可以添加一個(gè)元素導(dǎo)列表的頭部(左邊)或者尾部(右邊)
一個(gè)列表最多可以包含 232 - 1 個(gè)元素 (4294967295, 每個(gè)列表超過(guò)40億個(gè)元素)。
List類型一般用于關(guān)注人、簡(jiǎn)單隊(duì)列等。
所有l(wèi)ist命令都是l開(kāi)頭的
序號(hào) | 命令語(yǔ)法 | 描述 |
---|---|---|
1 | LPUSH key value1 [value2] | 將一個(gè)或多個(gè)值插入到列表頭部 |
2 | LPOP key | 移出并獲取列表的第一個(gè)元素 |
3 | LRANGE key start stop | 獲取列表指定范圍內(nèi)的元素 |
4 | LPUSHX key value | 將一個(gè)值插入到已存在的列表頭部 |
5 | RPUSH key value1 [value2] | 在列表中添加一個(gè)或多個(gè)值 |
6 | RPOP key | 移除列表的最后一個(gè)元素,返回值為移除的元素 |
7 | RPUSHX key value | 為已存在的列表添加值 |
8 | LLEN key | 獲取列表長(zhǎng)度 |
9 | LINSERT key BEFORE|AFTER pivot value | 在列表的元素前或者后插入元素 |
10 | LINDEX key index | 通過(guò)索引獲取列表中的元素 |
11 | LSET key index value | 通過(guò)索引設(shè)置列表元素的值 |
12 | LREM key count value | 移除列表元素 |
13 | LTRIM key start stop | 對(duì)一個(gè)列表進(jìn)行修剪,即讓列表只保留指定區(qū)間內(nèi)的元素, 不在指定區(qū)間之內(nèi)的元素都將被刪除 |
14 | BLPOP key1 [key2 ] timeout | 移出并獲取列表第一個(gè)元素,如果列表沒(méi)有元素會(huì)阻塞列表 直到等待超時(shí)或發(fā)現(xiàn)可彈出元素為止 |
15 | BRPOP key1 [key2 ] timeout | 移出并獲取列表最后一個(gè)元素,如果列表沒(méi)有元素會(huì)阻塞列表 直到等待超時(shí)或發(fā)現(xiàn)可彈出元素為止 |
16 | BRPOPLPUSH source destination timeout | 將列表中彈出的元素插入到另外一個(gè)列表中并返回 如果列表沒(méi)有元素會(huì)阻塞列表直到等待超時(shí)或發(fā)現(xiàn)可彈出元素為止 |
17 | RPOPLPUSH source destination | 移除列表最后一個(gè)元素,并將該元素添加到另一個(gè)列表并返回 |
實(shí)例
127.0.0.1:6379> lpush list one # 將一個(gè)或者多個(gè)值插入到列表的頭部(左)
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> lrange list 0 1
1) "three"
2) "two"
127.0.0.1:6379> rpush list right # 將一個(gè)或者多個(gè)值插入到列表的尾部(右)
(integer) 4
127.0.0.1:6379> lrange list 0 1 # 通過(guò)區(qū)間獲取具體的值
1) "three"
2) "two"
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
127.0.0.1:6379> lpop list # 移除第一個(gè)元素
"three"
127.0.0.1:6379> rpop list # 移除最后一個(gè)元素
"right"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
127.0.0.1:6379> lindex list 1 # 通過(guò)下標(biāo)獲取某一個(gè)值
"one"
127.0.0.1:6379> lindex list 0
"two"
127.0.0.1:6379> llen list # 返回列表的長(zhǎng)度
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lpush list three
(integer) 4
127.0.0.1:6379> lrem list 1 two # 移除指定個(gè)數(shù)的value,精確匹配
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "three"
3) "one"
127.0.0.1:6379> lrem list 1 three
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "one"
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lrem list 2 three
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "one"
127.0.0.1:6379> lpush mylist "hello"
(integer) 1
127.0.0.1:6379> lpush mylist "hello1"
(integer) 2
127.0.0.1:6379> lpush mylist "hello12"
(integer) 3
127.0.0.1:6379> lpush mylist "hello13"
(integer) 4
127.0.0.1:6379> ltrim mylist 1 2 # 通過(guò)下標(biāo)截取指定的長(zhǎng)度,list已經(jīng)被改變,只剩下截取的元素了!
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "hello12"
2) "hello1"
127.0.0.1:6379> rpush mylist "hello"
(integer) 1
127.0.0.1:6379> rpush mylist "hello1"
(integer) 2
127.0.0.1:6379> rpush mylist "hello2"
(integer) 3
127.0.0.1:6379> rpoplpush mylist myotherlist # 移除列表的最后一個(gè)元素,將他移動(dòng)到新的列表中
"hello2"
127.0.0.1:6379> lrange mylist 0 -1 # 查看原來(lái)列表
1) "hello"
2) "hello1"
127.0.0.1:6379> lrange myotherlist 0 -1 # 查看新的列表中確實(shí)存在
1) "hello2"
127.0.0.1:6379> exists list
(integer) 0
127.0.0.1:6379> lset list 0 item
(error) ERR no such key
127.0.0.1:6379> lpush list value1
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "value1"
127.0.0.1:6379> lset list 0 item # 將列表中的指定下標(biāo)的值替換為另一個(gè)值,更新操作,如果不存在列表去更新就會(huì)報(bào)錯(cuò)。存在就更新當(dāng)前下標(biāo)的值
OK
127.0.0.1:6379> lrange list 0 -1
1) "item"
127.0.0.1:6379> lpush mylist "hello"
(integer) 1
127.0.0.1:6379> lpush mylist "world"
(integer) 2
127.0.0.1:6379> linsert mylist before "world" "other" # 將某個(gè)具體的value插入到某個(gè)元素的前面或者后面
(integer) 3
127.0.0.1:6379> lrange list 0 -1
(empty array)
127.0.0.1:6379> lrange mylist 0 -1
1) "other"
2) "world"
3) "hello"
127.0.0.1:6379> linsert mylist after "world" "new"
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "other"
2) "world"
3) "new"
4) "hello"
小結(jié)
-
他實(shí)際上是一個(gè)鏈表,before Node after , left , right 都可以插入值如果key不存在,創(chuàng)建新的鏈表
-
如果key存在,新增內(nèi)容
-
如果移除了所有值,空鏈表,也代表不存在!
-
在兩邊插入或者改動(dòng)值,效率最高!中間元素,相對(duì)來(lái)說(shuō)效率會(huì)低一點(diǎn)~
消息排隊(duì)!消息隊(duì)列( Lpush Rpop ) ,棧( Lpush Lpop )
set(集合)
Redis的Set是string類型的無(wú)序集合。集合成員是唯一的,這就意味著集合中不能出現(xiàn)重復(fù)的數(shù)據(jù)。
Redis 中 集合是通過(guò)哈希表實(shí)現(xiàn)的,所以添加,刪除,查找的復(fù)雜度都是O(1)。
集合中最大的成員數(shù)為 232 - 1 (4294967295, 每個(gè)集合可存儲(chǔ)40多億個(gè)成員)。
Set類型一般用于贊、踩、標(biāo)簽、好友關(guān)系等。
序號(hào) | 命令語(yǔ)法 | 描述 |
---|---|---|
1 | SADD key member1 [member2] | 向集合添加一個(gè)或多個(gè)成員 |
2 | SMEMBERS key | 返回集合中的所有成員 |
3 | SCARD key | 獲取集合的成員數(shù) |
4 | SRANDMEMBER key [count] | 返回集合中一個(gè)或多個(gè)隨機(jī)數(shù) |
5 | SISMEMBER key member | 判斷 member 元素是否是集合 key 的成員 |
6 | SREM key member1 [member2] | 移除集合中一個(gè)或多個(gè)成員 |
7 | SDIFF key1 [key2] | 返回給定所有集合的差集 |
8 | SDIFFSTORE destination key1 [key2] | 返回給定所有集合的差集并存儲(chǔ)在 destination 中 |
9 | SINTER key1 [key2] | 返回給定所有集合的交集 |
10 | SINTERSTORE destination key1 [key2] | 返回給定所有集合的交集并存儲(chǔ)在 destination 中 |
11 | SUNION key1 [key2] | 返回所有給定集合的并集 |
12 | SUNIONSTORE destination key1 [key2] | 所有給定集合的并集存儲(chǔ)在 destination 集合中 |
13 | SMOVE source destination member | 將 member 元素從 source 集合移動(dòng)到 destination 集合 |
14 | SPOP key | 移除并返回集合中的一個(gè)隨機(jī)元素 |
15 | SSCAN key cursor [MATCH pattern] [COUNT count] | 迭代集合中的元素 |
實(shí)例:
127.0.0.1:6379> sadd myset "hello" # set集合中添加值
(integer) 1
127.0.0.1:6379> sadd myset "zs"
(integer) 1
127.0.0.1:6379> smembers myset # 查看指定set的所有值
1) "hello"
2) "zs"
127.0.0.1:6379> sismember myset "hello" # 判斷某一個(gè)值是不是在set集合中
(integer) 1
127.0.0.1:6379> sismember myset "world"
(integer) 0
127.0.0.1:6379> scard myset # 獲取set集合中的內(nèi)容元素個(gè)數(shù)
(integer) 3
127.0.0.1:6379> srem myset hello # 移除set中指定元素
(integer) 1
127.0.0.1:6379> scard myset
(integer) 2
127.0.0.1:6379> smembers myset
1) "zs"
2) "lisi"
127.0.0.1:6379> srandmember myset # 隨機(jī)抽選出元素
"zs"
127.0.0.1:6379> srandmember myset
"lisi"
127.0.0.1:6379> srandmember myset
"lisi"
127.0.0.1:6379> srandmember myset 2 # 隨機(jī)抽選出指定個(gè)數(shù)元素
1) "zs"
2) "lisi"
127.0.0.1:6379> spop myset # 隨機(jī)刪除set中的一些元素
"lisi2"
127.0.0.1:6379> sadd myset2 set2
(integer) 1
127.0.0.1:6379> smove myset myset2 lisi # 將一個(gè)指定的值,移動(dòng)到另外一個(gè)set集合中
(integer) 1
127.0.0.1:6379> smembers myset2
1) "set2"
2) "lisi"
127.0.0.1:6379> sadd key1 a
(integer) 1
127.0.0.1:6379> sadd key1 b
(integer) 1
127.0.0.1:6379> sadd key1 c
(integer) 1
127.0.0.1:6379> sadd key2 c
(integer) 1
127.0.0.1:6379> sadd key2 d
(integer) 1
127.0.0.1:6379> sadd key2 e
(integer) 1
127.0.0.1:6379> sdiff key1 key2 # 差集
1) "a"
2) "b"
127.0.0.1:6379> sinter key1 key2 # 交集
1) "c"
127.0.0.1:6379> sunion key1 key2 # 并集
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
微博,A用戶將所有關(guān)注的人放在一個(gè)set集合中!將它的粉絲也放在一個(gè)集合中!
共同關(guān)注,共同愛(ài)好,二度好友(六度分割理論)
Hash(哈希)
Redis hash 是一個(gè)string類型的field和value的映射表,hash特別適合用于存儲(chǔ)對(duì)象。
Map集合,key-map!時(shí)候這個(gè)值是一個(gè)map集合! 本質(zhì)和String類型沒(méi)有太大區(qū)別,還是一個(gè)簡(jiǎn)單的key-vlaue !
Redis 中每個(gè) hash 可以存儲(chǔ) 232 - 1 鍵值對(duì)(40多億)。
序號(hào) | 命令語(yǔ)法 | 描述 |
---|---|---|
1 | HSET key field value | 將哈希表 key 中的字段 field 的值設(shè)為 value |
2 | HGET key field | 獲取存儲(chǔ)在哈希表中指定字段的值 |
3 | HGETALL key | 獲取在哈希表中指定 key 的所有字段和值 |
4 | HEXISTS key field | 查看哈希表 key 中,指定的字段是否存在 |
5 | HSETNX key field value | 只有在字段 field 不存在時(shí),設(shè)置哈希表字段的值 |
6 | HKEYS key | 獲取所有哈希表中的字段 |
7 | HVALS key | 獲取哈希表中所有值 |
8 | HLEN key | 獲取哈希表中字段的數(shù)量 |
9 | HMGET key field1 [field2] | 獲取所有給定字段的值 |
10 | HMSET key field1 value1 [field2 value2] | 同時(shí)將多個(gè) field-value (域-值)對(duì)設(shè)置到哈希表 key 中 |
11 | HINCRBY key field increment | 為哈希表 key 中的指定字段的整數(shù)值加上增量 increment |
12 | HINCRBYFLOAT key field increment | 為哈希表 key 中的指定字段的浮點(diǎn)數(shù)值加上增量 increment |
13 | HDEL key field1 [field2] | 刪除一個(gè)或多個(gè)哈希表字段 |
14 | HSCAN key cursor [MATCH pattern] [COUNT count] | 迭代哈希表中的鍵值對(duì) |
實(shí)例:
127.0.0.1:6379> hset myhash filed1 zhangsan # set一個(gè)具體的key-value
(integer) 1
127.0.0.1:6379> hget myhash filed1 # 獲取一個(gè)字段值
"zhangsan"
127.0.0.1:6379> hmset myhash filed1 hello filed2 world # set多個(gè)key-value
OK
127.0.0.1:6379> hmget myhash filed1 filed2 # 獲取多個(gè)字段值
1) "hello"
2) "world"
127.0.0.1:6379> hgetall myhash # 獲取全部的數(shù)據(jù)
1) "filed1"
2) "hello"
3) "filed2"
4) "world"
127.0.0.1:6379> hdel myhash filed1 # 刪除hash指定的key字段,對(duì)應(yīng)的value也沒(méi)了
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "filed2"
2) "world"
127.0.0.1:6379> hdel myhash filed1
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "filed2"
2) "world"
127.0.0.1:6379> hlen myhash
(integer) 1
127.0.0.1:6379> hmset myhash filed1 hello
OK
127.0.0.1:6379> hlen myhash # 獲取hash表的字段數(shù)量
(integer) 2
127.0.0.1:6379> hgetall myhash
1) "filed2"
2) "world"
3) "filed1"
4) "hello"
127.0.0.1:6379> hexists myhash filed1 # 判斷hash中的字段是否存在
(integer) 1
127.0.0.1:6379> hexists myhash filed3
(integer) 0
127.0.0.1:6379> hkeys myhash # 獲取所有的字段
1) "filed2"
2) "filed1"
127.0.0.1:6379> hvals myhash # 獲取所有的值
1) "world"
2) "hello"
127.0.0.1:6379> hset myhash filed3 5 # 指定增量
(integer) 1
127.0.0.1:6379> hincrby myhash filed3 1
(integer) 6
127.0.0.1:6379> hincrby myhash filed3 -1
(integer) 5
127.0.0.1:6379> hsetnx myhash filed4 hello # 若不存在則可設(shè)置
(integer) 1
127.0.0.1:6379> hsetnx myhash filed4 world # 若存在則不可設(shè)置
(integer) 0
hash變更的數(shù)據(jù)user name age,尤其是是用戶信息之類的,經(jīng)常變動(dòng)的信息! hash更適合于對(duì)象的存儲(chǔ),String更加適合字符串存儲(chǔ)!
Zset(有序集合)
Redis 有序集合(sorted set)
Redis 有序集合和集合一樣也是string類型元素的集合,且不允許重復(fù)的成員。
不同的是每個(gè)元素都會(huì)關(guān)聯(lián)一個(gè)double類型的分?jǐn)?shù)。redis正是通過(guò)分?jǐn)?shù)來(lái)為集合中的成員進(jìn)行從小到大的排序。
有序集合的成員是唯一的,但分?jǐn)?shù)(score)卻可以重復(fù)。
集合是通過(guò)哈希表實(shí)現(xiàn)的,所以添加,刪除,查找的復(fù)雜度都是O(1)。 集合中最大的成員數(shù)為 232 - 1 (4294967295, 每個(gè)集合可存儲(chǔ)40多億個(gè)成員)。
Zset類型一般用于排行榜等。
序號(hào) | 命令語(yǔ)法 | 描述 |
---|---|---|
1 | ZADD key score1 member1 [score2 member2] | 向有序集合添加一個(gè)或多個(gè)成員,或者更新已存在成員的分?jǐn)?shù) |
2 | ZCARD key | 獲取有序集合的成員數(shù) |
3 | ZCOUNT key min max | 計(jì)算在有序集合中指定區(qū)間分?jǐn)?shù)的成員數(shù) |
4 | ZINCRBY key increment member | 有序集合中對(duì)指定成員的分?jǐn)?shù)加上增量 increment |
5 | ZLEXCOUNT key min max | 在有序集合中計(jì)算指定字典區(qū)間內(nèi)成員數(shù)量 |
6 | ZRANGE key start stop [WITHSCORES] | 通過(guò)索引區(qū)間返回有序集合指定區(qū)間內(nèi)的成員 |
7 | ZRANGEBYLEX key min max [LIMIT offset count] | 通過(guò)字典區(qū)間返回有序集合的成員 |
8 | ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] | 通過(guò)分?jǐn)?shù)返回有序集合指定區(qū)間內(nèi)的成員 |
9 | ZRANK key member | 返回有序集合中指定成員的索引 |
10 | ZREM key member [member …] | 移除有序集合中的一個(gè)或多個(gè)成員 |
11 | ZREMRANGEBYLEX key min max | 移除有序集合中給定的字典區(qū)間的所有成員 |
12 | ZREMRANGEBYRANK key start stop | 移除有序集合中給定的排名區(qū)間的所有成員 |
13 | ZREMRANGEBYSCORE key min max | 移除有序集合中給定的分?jǐn)?shù)區(qū)間的所有成員 |
14 | ZREVRANGE key start stop [WITHSCORES] | 返回有序集中指定區(qū)間內(nèi)的成員,通過(guò)索引,分?jǐn)?shù)從高到低 |
15 | ZREVRANGEBYSCORE key max min [WITHSCORES] | 返回有序集中指定分?jǐn)?shù)區(qū)間內(nèi)的成員,分?jǐn)?shù)從高到低排序 |
16 | ZREVRANK key member | 返回有序集合中指定成員的排名, 有序集成員按分?jǐn)?shù)值遞減(從大到小)排序 |
17 | ZSCORE key member | 返回有序集中,成員的分?jǐn)?shù)值 |
18 | ZINTERSTORE destination numkeys key [key …] | 計(jì)算給定的一個(gè)或多個(gè)有序集的交集 并將結(jié)果集存儲(chǔ)在新的有序集合 key 中 |
19 | ZUNIONSTORE destination numkeys key [key …] | 計(jì)算給定的一個(gè)或多個(gè)有序集的并集,并存儲(chǔ)在新的 key 中 |
20 | ZSCAN key cursor [MATCH pattern] [COUNT count] | 迭代有序集合中的元素(包括元素成員和元素分值) |
實(shí)例:
127.0.0.1:6379> zadd myset 1 one # 添加一個(gè)值
(integer) 1
127.0.0.1:6379> zadd myset 2 two
(integer) 1
127.0.0.1:6379> zadd myset 3 three 4 four # 添加多個(gè)值
(integer) 2
127.0.0.1:6379> zrange myset 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
# 排序?qū)崿F(xiàn)
127.0.0.1:6379> zadd salary 2500 xiaohong # 添加三個(gè)用戶
(integer) 1
127.0.0.1:6379> zadd salary 5500 zhangsan
(integer) 1
127.0.0.1:6379> zadd salary 8000 lisi
(integer) 1
127.0.0.1:6379> zrangebyscore salary -inf +inf # 顯示全部用戶 從小到大排序
1) "xiaohong"
2) "zhangsan"
3) "lisi"
127.0.0.1:6379> zrevrange salary 0 -1 # 顯示全部用戶 從大到小排序
1) "lisi"
2) "zhangsan"
127.0.0.1:6379> zrangebyscore salary -inf +inf withscores # 顯示全部用戶 并且附帶成績(jī)
1) "xiaohong"
2) "2500"
3) "zhangsan"
4) "5500"
5) "lisi"
6) "8000"
127.0.0.1:6379> zrangebyscore salary -inf 5000 withscores # 顯示工資小于5000的用戶升序 并且附帶成績(jī)
1) "xiaohong"
2) "2500"
127.0.0.1:6379> zrange salary 0 -1
1) "xiaohong"
2) "zhangsan"
3) "lisi"
127.0.0.1:6379> zrem salary xiaohong # 移除有序集合中的指定元素
(integer) 1
127.0.0.1:6379> zrange salary 0 -1
1) "zhangsan"
2) "lisi"
127.0.0.1:6379> zcard salary # 獲取有序集合中的個(gè)數(shù)
(integer) 2
127.0.0.1:6379> zadd myset 1 hello 2 wolrd 3 zhangsan
(integer) 3
127.0.0.1:6379> zcount myset 1 3 # 獲取指定區(qū)間成員的數(shù)量
(integer) 3