概念
Redis (Remote Dictionary Server) is an in-memory data structure project implementing a distributed, in-memory key-value database with optional durability
redis基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)
redis作為key-value數(shù)據(jù)庫(kù),key都是字符串,value則為以下數(shù)據(jù)結(jié)構(gòu)其中之一
- string 字符串
- list 列表
- set 集合
- hash 哈希
- zset 有序集合
redis常用命令
db操作
redis由多個(gè)db構(gòu)成,默認(rèn)有0~15號(hào)db
| 操作 | 命令 | 說(shuō)明 |
|---|---|---|
| 選定db | select db |
select 1表示選定1號(hào)數(shù)據(jù)庫(kù) |
| 獲取db存儲(chǔ)的key總數(shù) | dbsize |
返回整數(shù) |
| 清空當(dāng)前db的數(shù)據(jù) | flushdb |
謹(jǐn)慎使用 |
| 清空所有db的數(shù)據(jù) | flushall |
謹(jǐn)慎使用!! |
key操作
db中可以有很多key
| 操作 | 命令 | 示例 | 說(shuō)明 |
|---|---|---|---|
| 給key賦值(不同的數(shù)據(jù)類(lèi)型有不同的方式,用字符串類(lèi)型來(lái)舉例說(shuō)明) | set key value |
set myname jack |
通常返回OK |
| 是否存在key | exists key |
exists myname |
存在=1,不存在=0 |
| 刪除key | del key |
del myname |
成功=1,失敗=0 |
| 查看key的數(shù)據(jù)類(lèi)型 | type key |
type myname |
string/list/hash/set/zset... |
| 設(shè)置key過(guò)期時(shí)間(單位:秒) | expire key n |
expire myname 100 |
n<=0時(shí),key會(huì)馬上過(guò)期 |
| 查看key剩余有效時(shí)間 | ttl key |
ttl myname |
-2=key不存在,-1=key無(wú)過(guò)期時(shí)間 |
| 模式匹配符合規(guī)則的key | keys pattern |
keys my_* |
keys *查看所有key名 |
string 字符串
- 最常用(最簡(jiǎn)單)的數(shù)據(jù)結(jié)構(gòu)
- value通常是普通字符串或序列化后的對(duì)象(也是字符串)
| 操作 | 命令 | 示例 | 說(shuō)明 |
|---|---|---|---|
| 給key賦值 | set key value |
set myname jack |
通常返回OK |
| 給多個(gè)key賦值(減少網(wǎng)絡(luò)傳輸次數(shù)) | mset key1 val1 key2 val2 ... |
mset myname jack hisname john |
通常返回OK |
| 獲取key的值 | get key |
get myname |
val字符串 / (nil)空值 |
| 獲取多個(gè)key的值 | mget key1 key2 ... |
mget myname hisname |
val字符串 / (nil)空值 |
| 使key的值+1并返回(value不為數(shù)字時(shí),會(huì)報(bào)錯(cuò)。key未定義,則賦值1并返回) | incr key |
incr age |
返回增加后的數(shù) / 報(bào)錯(cuò)原因 |
| 使key的值-1并返回(key未定義,則賦值-1并返回) | decr key |
decr money |
返回增加后的數(shù) / 報(bào)錯(cuò)原因 |
| 使key的值+N并返回 | incrby key num |
incrby money 100 |
返回增加后的數(shù) / 報(bào)錯(cuò)原因 |
| 使key的值-N并返回 | decrby key num |
decrby money 50 |
返回增加后的數(shù) / 報(bào)錯(cuò)原因 |
| key的值的字符串長(zhǎng)度 | strlen key |
strlen myname |
type=string時(shí)=長(zhǎng)度 / type=none時(shí)=0 / type=其他時(shí)=報(bào)錯(cuò) |
| 往key的值后追加字符串 | append key str |
append myname happy |
type=string/none 追加 , type=其他 報(bào)錯(cuò) |
| 截取key對(duì)應(yīng)的字符串返回(不會(huì)改變?cè)?,start和end是閉區(qū)間,且支持負(fù)數(shù)) | substr key start end |
substr money 0 -3 |
超過(guò)范圍不會(huì)報(bào)錯(cuò) |
| 獲取key用二進(jìn)制表示的第n位(0或1) | getbit key n |
getbit myname 2 |
- |
| 設(shè)置key用二進(jìn)制表示的第n位(0或1) | setbit key n val |
setbit myname 3 1 |
val=0/1,否則會(huì)報(bào)錯(cuò) |
| 獲取key中的范圍內(nèi)所有字符用二進(jìn)制表示時(shí)的1的個(gè)數(shù)(閉區(qū)間) | bitcount key start end |
bitcount myname 2 3,start/end可以為空,表示整個(gè)字符串 |
- |
list 列表
- 雙向鏈表結(jié)構(gòu),兩端插入刪除速度快,查詢?cè)芈?/li>
| 操作 | 命令 | 示例 | 說(shuō)明 |
|---|---|---|---|
| 從key左邊(逐個(gè))插入元素 | lpush key val1 val2 ... |
lpush namelist jack john bob |
通常返回正數(shù)表示成功,正數(shù)=插入元素個(gè)數(shù) |
| 從key右邊(逐個(gè))插入元素 | rpush key val1 val2 ... |
rpush namelist jack john bob |
通常返回正數(shù)表示成功,正數(shù)=插入元素個(gè)數(shù) |
| 從key左邊彈出元素 | lpop key |
lpop namelist |
彈出元素,如果key對(duì)應(yīng)的是null值,則彈出(nil)空值 |
| 從key右邊彈出元素 | rpop key |
rpop namelist |
彈出元素,如果key對(duì)應(yīng)的是null值,則彈出(nil)空值 |
| key中元素個(gè)數(shù) | llen key |
llen namelist |
- |
| 獲取key中元素范圍(不會(huì)改變key,start和end是閉區(qū)間,且支持負(fù)數(shù)) | lrange namelist start end |
lrange namelist 2 5 |
空時(shí)返回(empty list or set)
|
| 改變key中元素,只保留范圍內(nèi)元素 | ltrim key start end |
ltrim namelist 1 2 |
返回OK表示成功 |
| 獲取key的第n個(gè)元素 | lindex key n |
lindex namelist 2 |
返回該元素 / (nil)空值 |
hash 哈希
| 操作 | 命令 | 示例 | 說(shuō)明 |
|---|---|---|---|
| 賦值key中的field | hset key field val |
hset myattr age 10 |
初次創(chuàng)建返回1,否則(修改)返回0 |
| 獲取key的field對(duì)應(yīng)的值 | hget key field |
hget myattr age |
返回該元素 / (nil)空值 |
| 為key的field設(shè)置多個(gè)值 | hmset key f1 val1 f2 val2 |
hmset myattr eyes big mouth small |
通常返回OK |
| 從key中取多值 | hmget key f1 f2 ... |
hmget myattr f1 f2 f3 |
返回結(jié)果列表 |
| 獲取key的所有字段和所有值 | hgetall key |
hgetall myattr |
返回key和value,每個(gè)元素都是一行 |
| 取所有字段名 | hkeys key |
hkeys myattr |
返回key,每個(gè)元素都是一行 |
| 取所有數(shù)據(jù)值 | hvals key |
hvals myattr |
返回value,每個(gè)元素都是一行 |
| 獲取字段長(zhǎng)度 | hlen key |
hlen myattr |
key-value對(duì)的個(gè)數(shù) |
| 刪除字段 | del key field1 field2 |
del myattr xxx yyy |
刪除元素個(gè)數(shù) |
| 字段是否存在 | hexists key field |
hexists myattr k3 |
存在=1,不存在=0 |
| 當(dāng)字段存在的時(shí)候賦值(相當(dāng)于exists+hset,但是是原子操作) | hsetnx key field val |
hsetnx myattr k3 aa |
設(shè)置成功=1,已存在=0 |
set 集合
| 操作 | 命令 | 示例 | |
|---|---|---|---|
| 往key中增加值 | sadd key val1 val2 |
sadd flag red blue |
成功增加的元素個(gè)數(shù)(>=0) |
| 刪除key中的值 | srem key val1 val2 |
srem flag red blue |
成功刪除的元素個(gè)數(shù)(>=0) |
| 獲取key中所有元素 | smembers key |
smembers flag |
返回列表 |
| 判斷某個(gè)元素是否在key的元素中 | sismember key val |
sismember flag green |
存在=1,不存在=0 |
| key中元素個(gè)數(shù) | scard key |
scard flag |
元素個(gè)數(shù) |
| 隨機(jī)彈出一個(gè)元素 | spop key |
spop flag |
元素值 |
| 隨機(jī)返回n個(gè)元素(負(fù)數(shù)表示可重復(fù),正數(shù)表示不重復(fù)) | srandmember key count |
srandmember flag -2 |
元素列表 |
| 差集 | sdiff key1 key2 ... |
sdiff f1 f2 f3 |
元素列表 |
| 交集 | sinner key1 key2 ... |
sinner f1 f2 f3 |
元素列表 |
| 并集 | sunion key1 key2 ... |
sunion f1 f2 f3 |
元素列表 |
zset 有序集合
| 操作 | 命令 | 示例 | |
|---|---|---|---|
| 往key中增加值 | zadd key score1 val1 score2 val2 |
zadd zflag 100 red 90 blue |
成功增加的元素個(gè)數(shù)(>=0) |
| 刪除key中的值 | zrem key val1 val2 |
zrem zflag red blue |
成功刪除的元素個(gè)數(shù)(>=0) |
| 獲取分?jǐn)?shù) | zscore key val |
zrem zflag red |
分?jǐn)?shù) |
| key中元素個(gè)數(shù) | zcard key |
zcard zflag |
元素個(gè)數(shù) |
指定分?jǐn)?shù)范圍內(nèi)的元素個(gè)數(shù)(默認(rèn)是閉區(qū)間,加上(可以轉(zhuǎn)成開(kāi)區(qū)間) |
zcount key min max |
zcount zflag (85 (90 |
元素個(gè)數(shù) |
| 升序獲取key中排名范圍內(nèi)的元素 | zrange key start end [withscores] |
zrange zflag 0 -3 withscores |
withscores參數(shù)表示同時(shí)返回分?jǐn)?shù),分?jǐn)?shù)相等時(shí),按key字典序 |
| 降序獲取key中排名范圍內(nèi)的元素 | zrevrange key start end [withscores] |
zrevrange zflag 0 2 |
- |
| 升序獲取key中分?jǐn)?shù)范圍內(nèi)的元素 | zrangebyscore key min max [withscores] [limit offset count] |
zrangescore zflag 90 100 limit 3 1 |
升序的時(shí)候,先min后max,limit后接偏移量和獲取的行數(shù) |
| 降序獲取key中分?jǐn)?shù)范圍內(nèi)的元素 | zrevrangebyscore key max min [withscores] [limit offset count] |
zrevrangescore zflag 110 100 limit 3 1 |
降序的時(shí)候,先max后min,limit后接偏移量和獲取的行數(shù) |
| 獲取key中某分?jǐn)?shù)范圍內(nèi)的元素個(gè)數(shù) | zcount key min max |
zcount zflag 100 110 |
元素個(gè)數(shù) |
| 獲取key中某個(gè)元素的升序排名 | zrank key value |
zrank zflag red |
從0開(kāi)始算 |
| 獲取key中某個(gè)元素的降序排名 | zrevrank key value |
zrevrank zflag red |
- |
| 刪除key中某個(gè)元素 | zrem key val1 val2 |
zrem zflag red blue |
成功刪除的元素個(gè)數(shù)(>=0) |
| 刪除key中某個(gè)排名范圍的元素 | zremrangebyrank key start end |
zremrangebyrank zflag 0 1 |
成功刪除的元素個(gè)數(shù)(>=0) |
| 刪除key中某個(gè)分?jǐn)?shù)范圍元素 | zremrangebyscore key min max |
zremrangebyscore zflag 90 100 |
成功刪除的元素個(gè)數(shù)(>=0) |