一、Redis的全局命令操作
1、查看所有键
keys *
-- 也可以模糊搜索查询,但一般不推存
keys s*
2、查看键总数
dbsize
3、检查键是否存在
exists key
4、删除键,返回删除的条数
del key
5、键过期
返回剩余的过期时间:-1表示没有设置过期,-2表示已过期,正数表示还剩余的过期时间(秒)
expire key seconds
-- 设置时间戳以后过期
expireat key 时间戳
-- 查看还剩多久过期
ttl key
6、查看键的数据结构类型
type key
7、键重命名
如果newkey存在,则会强制覆盖
rename oldkey newkey
二、Redis常用的五种数据结构操作
字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(ZSET)
字符串(String)
1、设置值
set key value
-- key必须不存在,才能设置成功,用于添加
setnx key value
-- key必须存在,才能设置成功,用于更新
set key value xx
--批量设置
mset key1 value1 key2 value2
例:
set age 23 ex 10
setnx name test
set age 25 xx
set命令有几个选项:
-
ex seconds:为键设置秒级过期时间。
-
px milliseconds:为键设置毫秒级过期时间。
-
nx:键必须不存在,才可以设置成功,用于添加。
-
xx:与nx相反,键必须存在,才可以设置成功,用于更新。
set key value ex seconds
2、获取值
get key
--批量获取
mget key1 key2
例:
批量设值:mset country china city beijing
批量获取:mget country city address
3、lncr数字运算
lncr命令用于对值做自增操作,返回结果分为三种情况:
- 值不是整数,返回错误
- 值是整数,返回自增后的结果
- 键不存在,按照值为0自增,返回结果为1
-- 自增
incr key
-- 自减
decr key
-- 自增指定数字
incrby 数字 key
-- 自减指定数字
decrby 数字 key
-- 自增浮点数
incrbyfloat 数字 key
例:
incr age //必须为整数自加1,非整数返回错误,无age键从0自增返回1
decr age //整数age减1
incrby age 2 //整数age+2
decrby age 2//整数age -2
incrbyfloat score 1.1 //浮点型score+1.1
4、append追加指令
append key 追加的字符串
例:
set name hello
append name world //追加后成helloworld
5、strlen字符串长度,返回字符串长度
strlen key
例:
set hello “世界”
strlen hello
6、getset设置并返回原值
getset和set一样会设置值,但是不同的是,它同时会返回键原来的值
getset key value
7、setrange设置指定位置的字符,下标从0开始计算
setrange key 下标 设置的值
8、getrange截取字符串
getrange截取字符串中的一部分,形成一个子串,需要指明开始和结束的偏移量,截取的范围 是个闭区间
getrange key 开始下标 结束下标
例:
set name helloworld ; getrange name 2 4//返回 llo
哈希(Hash)
id | name | age |
---|---|---|
1 | xiaoming | 18 |
-- 用String设置值(命令空间防止键名冲突:业务名:对象名:id:属性)
set user:1:name xiaoming
set user:1:age 18
-- 用Hash设置值
hmset user:1 name xiaoming age 18
哈希是一个string类型的field和value的映射表,hash特适合用于存储对象
命令 hset key field value
设值:hset user:1 name xiaoming
取值:hget user:1 name
删值:hdel user:1 age
计算个数:hset user:1 name xiaoming; hset user:1 age 23;
hlen user:1
批量设值:hmset user:2 name xiaoming age 23 sex boy
批量取值:hmget user:2 name age sex
判断field是否存在:hexists user:2 name
获取所有field: hkeys user:2
获取user:2所有value:hvals user:2
获取user:2所有field与value:hgetall user:2
增加1:hincrby user:2 age 1
hincrbyfloat user:2 age 2
列表(List)
列表( list)类型是用来存储多个有序的字符串,a、b、c、d、e五个元素从左到右组成了一个有序的列表,列表中的每个字符串称为元素(element),一个列表最多可以存储2-1个元素。在Redis 中,可以对列表两端插入( push)和弹出(pop),还可以获取指定范围的元素列表、获取指定索引下标的元素等。
1、lrange获取指定范围内的元素列表
索引下标特点:从左到右为0到N-1
lrange 0 -1 命令可以从左到右获取列表的所有元素
rpush 从右向左插入
lpush 从左向右插入
linsert 在某个元素前或后插入新元素
lpop 从列表左侧弹出
rpop 从列表右侧弹出
2、lrem 对指定元素进行删除
lrem命令会从列表中找到等于value的元素进行删除,根据count的不同分为三种情况:
- count>0,从左到右,删除最多count个元素。
- count<0,从右到左,删除最多count绝对值个元素。
- count=0,删除所有。
lrem enjoylist 4 x
3、ltirm 按照索引范围修剪列表
例如想保留列表中第0个到第1个元素
ltrim enjoylist 0 1
4、lset修改指定索引下标的元素
lset enjoylist 1 web
5、lindex 获取列表指定索引下标的元素
lindex enjoylist 1
6、llen获取列表长度
llen enjoylist
集合(Set)
集合( set)类型也是用来保存多个的字符串元素,但和列表类型不一样的是,
集合中不允许有重复元素,并且集合中的元素是无序的,不能通过索引下标获取元 素。
1、sadd添加元素
允许添加多个,返回结果为添加成功的元素个数
sadd key member
2、srem删除元素
允许删除多个,返回结果为成功删除的元素个数
srem key member
3、scard计算元素个数
scard key
4、sismember判断元素是否在集合中
如果给定元素element在集合内返回1,否则返回0
sismember key member
5、srandmember随机从集合返回 指定个数元素
指定个数如果不写默认为1
srandmember key count
6、spop从集合随机弹出元素
可以指定个数,如果不写默认为1。spop命令执行后,元素会从集合中删除,而srandmember命令不会删除元素
spop key count
7、smembers获取所有元素
返回的结果是无序的
smembers key
8、sinter求多个集合的交集
sinter key1 key2
9、sunion求多个集合的并集
sunion key1 key2
10、sdiff求多个集合的差集
sdiff key1 key2
11、将交集、并集、差集 的结果保存
集合间的运算在元素较多的情况下会比较耗时,所以redis提供了下面三个命令(原命令+store)将集合间交集、并集、差集的结果保存在destination key中
sinterstore destination key [key ...]
suionstore destination key [key ...]
sdiffstore destination key [key ...]
有序集合(ZSET)
有序集合它保留了集合不能有重复成员的特性,但不同的是有序集合中的元素可以排序。它和列表使用索引下标作为排序依据不同的是,有序集合给每个元素设置一个分数(score)作为排序的依据。
有序集合的元素不能重复,但是score可以重复。就像班里同学的学号不能重复,但是分数可以重复一样。
有序集合提供子获取指定分数和元素范围查询、计算成员排名等功能。
1、zadd添加成员,返回结果代表成功添加成员的个数
向有序集合u:kaoshi添加用户test01和他的分数98:
zadd u:kaoshi 98 test01
zadd命令还有四个选项nx、xx、ch、incr
- nx:member必须不存在,才可以设置成功,用于添加
- xx:member必须存在,才可以设置成功,用于更新
- ch:返回此次操作后,有序集合元素和分数发生变化的个数
- incr:对score做增加,相当于zincrby
2、zcard计算成员个数
zcard key
3、zscore计算某个成员的分数
如果成员不存在则返回nil
zscore key member
4、zrank计算成员的排名
zrank是分数从低到高返回排名,zrevrank是分数是从高到低返回排名
zrank key member
zrevrank key member
5、zrem删除成员
允许一次删除多个成员,返回结果为成功删除的个数
zrem key member
6、zincrby增加成员的分数
zincrby key score member
7、zrange 和 zrevrange 返回指定排名范围的成员
有序集合是按照分值排名的,zrange是从低到高返回,zrevrange反之,如果加上withscores选项,同时会返回成员的分数
zrange key min max
zrange key min max withscores
zrevrange key min max
zrevrange key min max withscores
8、zrangebyscore 返回指定分数范围的成员
zrangebyscore 按照分数从低到高返回,zrevrangebyscore 反之。
zrangebyscore key min max [withscores] [limit offset count] zrevrangebyscore key max min [withscores][limit offset count]
9、zcount返回指定分数范围成员个数
zcount key min max
10、zremrangebyrank 按升序删除指定排名内的元素
zremrangebyrank key start end
11、zremrangebyscore 删除指定分数范围的成员
zremrangebyscore key min max
12、zinterstore 交集
zinterstore destination numkeys key [key ...] [weights weight [weight ...]] [aggregate sum / min / max]
destination:交集计算结果保存到这个键。
numkeys:需要做交集计算键的个数。
key [key …]:需要做交集计算的键。
weights weight [weight …]:每个键的权重,在做交集计算时,每个键中的每个
member 会将自己分数乘以这个权重,每个键的权重默认是 1。
aggregate sum/ min |max:计算成员交集后,分值可以按照 sum(和)、min(最
小值)、max(最大值)做汇总,默认值是 sum
13、zunionstore 并集
zunionstore destination numkeys key [key ...] [weights weight [weight ...]] [ aggregate sunmI minl max]
交集
zinterstore destination numkeys key [key ...] [weights weight [weight ...]] [aggregate sum / min / max]
destination:交集计算结果保存到这个键。
numkeys:需要做交集计算键的个数。
key [key …]:需要做交集计算的键。
weights weight [weight …]:每个键的权重,在做交集计算时,每个键中的每个
member 会将自己分数乘以这个权重,每个键的权重默认是 1。
aggregate sum/ min |max:计算成员交集后,分值可以按照 sum(和)、min(最
小值)、max(最大值)做汇总,默认值是 sum。