一、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),还可以获取指定范围的元素列表、获取指定索引下标的元素等。

redis 获取文件夹下所有缓存key:*获取为空 redis获取所有key命令_字符串

1、lrange获取指定范围内的元素列表

索引下标特点:从左到右为0到N-1

lrange 0 -1  命令可以从左到右获取列表的所有元素
rpush 从右向左插入
lpush 从左向右插入
linsert 在某个元素前或后插入新元素
lpop 从列表左侧弹出
rpop 从列表右侧弹出

redis 获取文件夹下所有缓存key:*获取为空 redis获取所有key命令_自增_02

2、lrem 对指定元素进行删除

lrem命令会从列表中找到等于value的元素进行删除,根据count的不同分为三种情况:

  • count>0,从左到右,删除最多count个元素。
  • count<0,从右到左,删除最多count绝对值个元素。
  • count=0,删除所有。
lrem enjoylist 4 x

redis 获取文件夹下所有缓存key:*获取为空 redis获取所有key命令_redis_03

3、ltirm 按照索引范围修剪列表

例如想保留列表中第0个到第1个元素

ltrim enjoylist 0 1

redis 获取文件夹下所有缓存key:*获取为空 redis获取所有key命令_自增_04

4、lset修改指定索引下标的元素

lset enjoylist 1 web

redis 获取文件夹下所有缓存key:*获取为空 redis获取所有key命令_自增_05

5、lindex 获取列表指定索引下标的元素

lindex enjoylist 1

redis 获取文件夹下所有缓存key:*获取为空 redis获取所有key命令_字符串_06

6、llen获取列表长度

llen enjoylist

redis 获取文件夹下所有缓存key:*获取为空 redis获取所有key命令_字符串_07

集合(Set)

集合( set)类型也是用来保存多个的字符串元素,但和列表类型不一样的是,

集合中不允许有重复元素,并且集合中的元素是无序的,不能通过索引下标获取元 素。

redis 获取文件夹下所有缓存key:*获取为空 redis获取所有key命令_自增_08

1、sadd添加元素

允许添加多个,返回结果为添加成功的元素个数

sadd key member

redis 获取文件夹下所有缓存key:*获取为空 redis获取所有key命令_自增_09

2、srem删除元素

允许删除多个,返回结果为成功删除的元素个数

srem key member

redis 获取文件夹下所有缓存key:*获取为空 redis获取所有key命令_有序集合_10

3、scard计算元素个数

scard key

redis 获取文件夹下所有缓存key:*获取为空 redis获取所有key命令_redis_11

4、sismember判断元素是否在集合中

如果给定元素element在集合内返回1,否则返回0

sismember key member

redis 获取文件夹下所有缓存key:*获取为空 redis获取所有key命令_数据库_12

5、srandmember随机从集合返回 指定个数元素

指定个数如果不写默认为1

srandmember key count

redis 获取文件夹下所有缓存key:*获取为空 redis获取所有key命令_字符串_13

6、spop从集合随机弹出元素

可以指定个数,如果不写默认为1。spop命令执行后,元素会从集合中删除,而srandmember命令不会删除元素

spop key count

redis 获取文件夹下所有缓存key:*获取为空 redis获取所有key命令_数据库_14

7、smembers获取所有元素

返回的结果是无序的

smembers key

redis 获取文件夹下所有缓存key:*获取为空 redis获取所有key命令_字符串_15

8、sinter求多个集合的交集

sinter key1 key2

redis 获取文件夹下所有缓存key:*获取为空 redis获取所有key命令_redis_16

9、sunion求多个集合的并集

sunion key1 key2

redis 获取文件夹下所有缓存key:*获取为空 redis获取所有key命令_有序集合_17

10、sdiff求多个集合的差集

sdiff key1 key2

redis 获取文件夹下所有缓存key:*获取为空 redis获取所有key命令_数据库_18

11、将交集、并集、差集 的结果保存

集合间的运算在元素较多的情况下会比较耗时,所以redis提供了下面三个命令(原命令+store)将集合间交集、并集、差集的结果保存在destination key中

sinterstore destination key [key ...] 
suionstore destination key [key ...] 
sdiffstore destination key [key ...]

redis 获取文件夹下所有缓存key:*获取为空 redis获取所有key命令_数据库_19

有序集合(ZSET)

有序集合它保留了集合不能有重复成员的特性,但不同的是有序集合中的元素可以排序。它和列表使用索引下标作为排序依据不同的是,有序集合给每个元素设置一个分数(score)作为排序的依据。

有序集合的元素不能重复,但是score可以重复。就像班里同学的学号不能重复,但是分数可以重复一样。

有序集合提供子获取指定分数和元素范围查询、计算成员排名等功能。

1、zadd添加成员,返回结果代表成功添加成员的个数

向有序集合u:kaoshi添加用户test01和他的分数98:

zadd u:kaoshi 98 test01

redis 获取文件夹下所有缓存key:*获取为空 redis获取所有key命令_数据库_20

zadd命令还有四个选项nx、xx、ch、incr

  • nx:member必须不存在,才可以设置成功,用于添加
  • xx:member必须存在,才可以设置成功,用于更新
  • ch:返回此次操作后,有序集合元素和分数发生变化的个数
  • incr:对score做增加,相当于zincrby

2、zcard计算成员个数

zcard key

redis 获取文件夹下所有缓存key:*获取为空 redis获取所有key命令_数据库_21

3、zscore计算某个成员的分数

如果成员不存在则返回nil

zscore key member

redis 获取文件夹下所有缓存key:*获取为空 redis获取所有key命令_自增_22

4、zrank计算成员的排名

zrank是分数从低到高返回排名,zrevrank是分数是从高到低返回排名

zrank key member
zrevrank key member

redis 获取文件夹下所有缓存key:*获取为空 redis获取所有key命令_有序集合_23

5、zrem删除成员

允许一次删除多个成员,返回结果为成功删除的个数

zrem key member

redis 获取文件夹下所有缓存key:*获取为空 redis获取所有key命令_字符串_24

6、zincrby增加成员的分数

zincrby key score member

redis 获取文件夹下所有缓存key:*获取为空 redis获取所有key命令_redis_25

7、zrange 和 zrevrange 返回指定排名范围的成员

有序集合是按照分值排名的,zrange是从低到高返回,zrevrange反之,如果加上withscores选项,同时会返回成员的分数

zrange key min max 
zrange key min max withscores
zrevrange key min max
zrevrange key min max withscores

redis 获取文件夹下所有缓存key:*获取为空 redis获取所有key命令_自增_26

8、zrangebyscore 返回指定分数范围的成员

zrangebyscore 按照分数从低到高返回,zrevrangebyscore 反之。

zrangebyscore key min max [withscores] [limit offset count] zrevrangebyscore key max min [withscores][limit offset count]

redis 获取文件夹下所有缓存key:*获取为空 redis获取所有key命令_自增_27

9、zcount返回指定分数范围成员个数

zcount key min max

redis 获取文件夹下所有缓存key:*获取为空 redis获取所有key命令_字符串_28

10、zremrangebyrank 按升序删除指定排名内的元素

zremrangebyrank key start end

11、zremrangebyscore 删除指定分数范围的成员

zremrangebyscore key min max

redis 获取文件夹下所有缓存key:*获取为空 redis获取所有key命令_数据库_29

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。