库:database,用来存放数据的一个基本单元,默认共16个库,且每个库都有一个唯一的编号,从0到15,默认使用0号库;

  • 切换库命令:select dbid(库编号)
  • 清空当前库:flushDB
  • 清空所有库:flushAll
  • 计算库中 key 的总数:dbsize,时间复杂度O(1)

Redis库的注意事项:

  1. 首先Redis不支持自定义数据库的名字,每个数据库都以编号命名,开发者必须自己记录哪些数据库存储了哪些数据
  2. Redis也不支持为每个数据库设置不同的访问密码,所以一个客户端要么可以访问全部数据库,要么连一个数据库也没有权限访问
  3. 多个数据库之间并不是完全隔离的,比如 FLUSHALL 命令可以清空一个Redis实例中所有数据库中的数据
  4. 这些数据库更像是一种命名空间,而不适宜存储不同应用程序的数据,即可以使用0号库存储生产数据,1号库存储测试数据;而不建议0号库存储A应用,1号库存储B应用;因为Redis非常轻量级,不用担心多个Redis实例会额外占用很多内存

key 命令

让客户端显示中文:在连接时添加参数 —raw,即redis-cli --raw

1、Keys pattern:获得符合规则的键名列表,pattern 支持 glob 风格通配符格式

注意:KEYS 命令需要遍历 Redis 中的所有键,当键的数量较多时会影响性能,不建议在生产环境中使用

符号 含义
? 匹配一个字符
* 匹配任意个(包括0个)字符
[] 匹配括号间的任一字符,- 符号表示一个范围,[a-z]
\x 匹配字符x,用于转义符号,如要匹配”?”就需要使用 ?

2、exists key:判断一个键是否存在,如果键存在则返回整数类型1,否则返回0

3、del key [key …]:删除键,可以删除一个或多个键,返回值是删除的键的个数

del 命令的参数不支持通配符:

  • 可以结合 Linux 的管道和 xargs 命令自己实现删除所有符合规则的键。比如要删除所有以“user:”开头的键,就可以执行redis-cli KEYS "user:*" | xargs redis-cli DEL
  • redis-cli DEL 'redis-cli KEYS "user:*"'

4、move key dbid:将当前数据库的 key 移动的给定的数据库 db 当中;移动成功返回 1,失败则返回 0

5、expire key seconds:为给定 key 设置生存时间(单位为 s),当 key 过期时(生存时间为 0),它会被自动删除,设置成功返 1 ,key 不存在或设置失败,返回 0

6、pexpire key milliseconds:同 expire ,单位 ms

7、expireat key seconds-timestamp:以s为单位设置key的过期unix时间戳,生存时间设置成功返回1,key不存在或设置失败返回 0

8、pexpireat key milliseconds-timestamp:以ms为单位设置key的过期unix时间戳,生存时间设置成功返回1,key不存在或设置失败返回 0

9、ttl key:返回key的剩余生存时间(单位为 s),返回 -1 为永久,-2为key不存在,正数为剩余时间

10、pttl key:同ttl,单位 ms

11、persist key:去掉 key 的过期时间

11、randomkey:从数据库中随机获取一个key,数据库为空,返回 nil

12、rename key newkey:将 key 改名为 newkey,当 key 不存在或者 key==newkey 返回错误提示,改名成功返回 OK

13、type key:获得键值的数据类型,返回值可能是string(字符串类型)、hash(散列类型)、list(列表类型)、set(集合类型)、zset(有序集合类型)

String 命令

字符串类型是Redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据。你可以用其存储用户的邮箱、JSON化的对象甚至是一张图片。一个字符串类型键允许存储的数据的最大容量是512 MB

  1. set key value:赋值
  2. get key:取值,键不存在返回 nil
  3. mset key1 value1 [key2 value2…]:一次设置多个key value
  4. mget key1 [key2 …]:一次获取多个 key
  5. getset key value:获取原始key的value值,同时设置新值
  6. strlen key:返回key存储的value的长度(为字节数,注意不是字符数
  7. append key value:为对应 key 的value追加内容
  8. getrange 索引0开始:截取value的内容,开始 0,结尾 -1
  9. setex key seconds value:设置一个key存活的有效期(秒)
  10. psetex key milliseconds value:设置一个key存活的有效期(毫秒)
  11. setnx key value:key存在不做任何操作,不存在则添加
  12. msetnx key1 value1 [key2 value2…]:一次设置多个key value,只要有一个存在则不做添加,原子操作
  13. decr key:进行数据的 -1 操作
  14. decrby key decrement:根据指定的decrement进行减法操作
  15. incr key:进行数据的 +1 操作
  16. incrby key increment:根据指定的increment进行加法操作
  17. incrbyfloat key float:根据提供的数据加入浮点数

List 命令

List 内存模型:
redis 基本命令 - 图1

  1. Ipush key value1 [value2 …]:将某个值加入到一个key列表头部(从左),key不存在则创建
  2. Ipushx key value1 [value2 …]:同push,但是必须要保证这个key存在
  3. rpush key value1 [value2 …]:将某个值加入到一个key列表末尾(从右),key不存在则创建
  4. rpushx key value1 [value2 …]:同rpush, 但是必须要保证这个key存在
  5. Ipop key:返回和移除列表的左边第一个元素
  6. грop key:返回和移除列表的右边第一个元素
  7. Irange key 0 -1:获取某一个下标区间内的元素
  8. llen key:获取列表元素个数
  9. Iset key index value:设置某一个指定索引的值(索引必须存在,索引从0开始
  10. lindex key index:获取某一个指定索引位置的元素
  11. Irem key:删除重复元素
  12. Itrim key start end:保留列表中特定区间内的元素
  13. insert key before|after pivolt newvalue:在某一个元素之前,之后插入新元素

Set 命令

内存模型:
redis 基本命令 - 图2

命令 解释
sadd 为集合添加元素
smembers 显示集合中所有元素无序
scard 返回集合中元素的个数
spop 随机返回一个元素并将元素在集合中删除
smove 从一个集合中向另一个集合移动元素必须是同一种类型
srem 从集合中删除一个元素
sismember 判断一个集合中是否含有这个元素
srandmember 随机返回元素
sdiff 去掉第一个集合中其它集合含有的相同元素
sinter 求交集
sunion 求和集

ZSet 命令

内存模型:
redis 基本命令 - 图3

命令 说明
zadd 添加一个有序集合元素
zcard 返回集合的元素个数
zrange 升序 zrevrange 降序 返回一个范围内的元素
zrangebyscore 按照分数查找一个范围内的元素
zrank 返回排名
zrevrank 倒序排名
zscore 显示某一个元素的分数
zrem 移除某一个元素
zincrby 给某个特定元素加分

Hash 命令

redis key(String) value(map) ==> Map>


命令 说明 时间复杂度
hset 设置一个key/value对 O(1)
hget 获得一个key对应的value O(1)
hgetall key 返回hash key对应的所有field和value O(n)
hdel 删除某一个key/value对 O(1)
hexists 判断一个key是否存在 O(1)
hkeys key 返回hash key对应的所有的field O(n)
hvals key 返回hash key对应的所有 field 的value O(n)
hmset 设置多个key/value O(n)
hmget 获得多个key的value O(n)
hsetnx 设置一个不存在的key的值 O(1)
hincrby 为value进行加法运算 O(1)
hincrbyfloat 为value加入浮点值 O(1)