概念
Redis (Remote Dictionary Server) is an in-memory data structure project implementing a distributed, in-memory key-value database with optional durability
redis基础数据结构
redis作为key-value数据库,key都是字符串,value则为以下数据结构其中之一
- string 字符串
- list 列表
- set 集合
- hash 哈希
- zset 有序集合
redis常用命令
db操作
redis由多个db构成,默认有0~15号db
操作 | 命令 | 说明 |
---|---|---|
选定db | select db |
select 1 表示选定1号数据库 |
获取db存储的key总数 | dbsize |
返回整数 |
清空当前db的数据 | flushdb |
谨慎使用 |
清空所有db的数据 | flushall |
谨慎使用!! |
key操作
db中可以有很多key
操作 | 命令 | 示例 | 说明 |
---|---|---|---|
给key赋值(不同的数据类型有不同的方式,用字符串类型来举例说明) | set key value |
set myname jack |
通常返回OK |
是否存在key | exists key |
exists myname |
存在=1,不存在=0 |
删除key | del key |
del myname |
成功=1,失败=0 |
查看key的数据类型 | type key |
type myname |
string/list/hash/set/zset... |
设置key过期时间(单位:秒) | expire key n |
expire myname 100 |
n<=0 时,key会马上过期 |
查看key剩余有效时间 | ttl key |
ttl myname |
-2=key不存在,-1=key无过期时间 |
模式匹配符合规则的key | keys pattern |
keys my_* |
keys * 查看所有key名 |
string 字符串
- 最常用(最简单)的数据结构
- value通常是普通字符串或序列化后的对象(也是字符串)
操作 | 命令 | 示例 | 说明 |
---|---|---|---|
给key赋值 | set key value |
set myname jack |
通常返回OK |
给多个key赋值(减少网络传输次数) | mset key1 val1 key2 val2 ... |
mset myname jack hisname john |
通常返回OK |
获取key的值 | get key |
get myname |
val字符串 / (nil)空值 |
获取多个key的值 | mget key1 key2 ... |
mget myname hisname |
val字符串 / (nil)空值 |
使key的值+1并返回(value不为数字时,会报错。key未定义,则赋值1并返回) | incr key |
incr age |
返回增加后的数 / 报错原因 |
使key的值-1并返回(key未定义,则赋值-1并返回) | decr key |
decr money |
返回增加后的数 / 报错原因 |
使key的值+N并返回 | incrby key num |
incrby money 100 |
返回增加后的数 / 报错原因 |
使key的值-N并返回 | decrby key num |
decrby money 50 |
返回增加后的数 / 报错原因 |
key的值的字符串长度 | strlen key |
strlen myname |
type=string时=长度 / type=none时=0 / type=其他时=报错 |
往key的值后追加字符串 | append key str |
append myname happy |
type=string/none 追加 , type=其他 报错 |
截取key对应的字符串返回(不会改变原串,start和end是闭区间,且支持负数) | substr key start end |
substr money 0 -3 |
超过范围不会报错 |
获取key用二进制表示的第n位(0或1) | getbit key n |
getbit myname 2 |
- |
设置key用二进制表示的第n位(0或1) | setbit key n val |
setbit myname 3 1 |
val=0/1,否则会报错 |
获取key中的范围内所有字符用二进制表示时的1的个数(闭区间) | bitcount key start end |
bitcount myname 2 3 ,start/end可以为空,表示整个字符串 |
- |
list 列表
- 双向链表结构,两端插入删除速度快,查询元素慢
操作 | 命令 | 示例 | 说明 |
---|---|---|---|
从key左边(逐个)插入元素 | lpush key val1 val2 ... |
lpush namelist jack john bob |
通常返回正数表示成功,正数=插入元素个数 |
从key右边(逐个)插入元素 | rpush key val1 val2 ... |
rpush namelist jack john bob |
通常返回正数表示成功,正数=插入元素个数 |
从key左边弹出元素 | lpop key |
lpop namelist |
弹出元素,如果key对应的是null值,则弹出(nil)空值 |
从key右边弹出元素 | rpop key |
rpop namelist |
弹出元素,如果key对应的是null值,则弹出(nil)空值 |
key中元素个数 | llen key |
llen namelist |
- |
获取key中元素范围(不会改变key,start和end是闭区间,且支持负数) | lrange namelist start end |
lrange namelist 2 5 |
空时返回(empty list or set)
|
改变key中元素,只保留范围内元素 | ltrim key start end |
ltrim namelist 1 2 |
返回OK表示成功 |
获取key的第n个元素 | lindex key n |
lindex namelist 2 |
返回该元素 / (nil)空值 |
hash 哈希
操作 | 命令 | 示例 | 说明 |
---|---|---|---|
赋值key中的field | hset key field val |
hset myattr age 10 |
初次创建返回1,否则(修改)返回0 |
获取key的field对应的值 | hget key field |
hget myattr age |
返回该元素 / (nil)空值 |
为key的field设置多个值 | hmset key f1 val1 f2 val2 |
hmset myattr eyes big mouth small |
通常返回OK |
从key中取多值 | hmget key f1 f2 ... |
hmget myattr f1 f2 f3 |
返回结果列表 |
获取key的所有字段和所有值 | hgetall key |
hgetall myattr |
返回key和value,每个元素都是一行 |
取所有字段名 | hkeys key |
hkeys myattr |
返回key,每个元素都是一行 |
取所有数据值 | hvals key |
hvals myattr |
返回value,每个元素都是一行 |
获取字段长度 | hlen key |
hlen myattr |
key-value对的个数 |
删除字段 | del key field1 field2 |
del myattr xxx yyy |
删除元素个数 |
字段是否存在 | hexists key field |
hexists myattr k3 |
存在=1,不存在=0 |
当字段存在的时候赋值(相当于exists+hset,但是是原子操作) | hsetnx key field val |
hsetnx myattr k3 aa |
设置成功=1,已存在=0 |
set 集合
操作 | 命令 | 示例 | |
---|---|---|---|
往key中增加值 | sadd key val1 val2 |
sadd flag red blue |
成功增加的元素个数(>=0) |
删除key中的值 | srem key val1 val2 |
srem flag red blue |
成功删除的元素个数(>=0) |
获取key中所有元素 | smembers key |
smembers flag |
返回列表 |
判断某个元素是否在key的元素中 | sismember key val |
sismember flag green |
存在=1,不存在=0 |
key中元素个数 | scard key |
scard flag |
元素个数 |
随机弹出一个元素 | spop key |
spop flag |
元素值 |
随机返回n个元素(负数表示可重复,正数表示不重复) | 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 |
成功增加的元素个数(>=0) |
删除key中的值 | zrem key val1 val2 |
zrem zflag red blue |
成功删除的元素个数(>=0) |
获取分数 | zscore key val |
zrem zflag red |
分数 |
key中元素个数 | zcard key |
zcard zflag |
元素个数 |
指定分数范围内的元素个数(默认是闭区间,加上( 可以转成开区间) |
zcount key min max |
zcount zflag (85 (90 |
元素个数 |
升序获取key中排名范围内的元素 | zrange key start end [withscores] |
zrange zflag 0 -3 withscores |
withscores参数表示同时返回分数,分数相等时,按key字典序 |
降序获取key中排名范围内的元素 | zrevrange key start end [withscores] |
zrevrange zflag 0 2 |
- |
升序获取key中分数范围内的元素 | zrangebyscore key min max [withscores] [limit offset count] |
zrangescore zflag 90 100 limit 3 1 |
升序的时候,先min后max,limit后接偏移量和获取的行数 |
降序获取key中分数范围内的元素 | zrevrangebyscore key max min [withscores] [limit offset count] |
zrevrangescore zflag 110 100 limit 3 1 |
降序的时候,先max后min,limit后接偏移量和获取的行数 |
获取key中某分数范围内的元素个数 | zcount key min max |
zcount zflag 100 110 |
元素个数 |
获取key中某个元素的升序排名 | zrank key value |
zrank zflag red |
从0开始算 |
获取key中某个元素的降序排名 | zrevrank key value |
zrevrank zflag red |
- |
删除key中某个元素 | zrem key val1 val2 |
zrem zflag red blue |
成功删除的元素个数(>=0) |
删除key中某个排名范围的元素 | zremrangebyrank key start end |
zremrangebyrank zflag 0 1 |
成功删除的元素个数(>=0) |
删除key中某个分数范围元素 | zremrangebyscore key min max |
zremrangebyscore zflag 90 100 |
成功删除的元素个数(>=0) |