库
库:database,用来存放数据的一个基本单元,默认共16个库,且每个库都有一个唯一的编号,从0到15,默认使用0号库;
- 切换库命令:select dbid(库编号)
- 清空当前库:flushDB
- 清空所有库:flushAll
- 计算库中 key 的总数:dbsize,时间复杂度O(1)
Redis库的注意事项:
- 首先Redis不支持自定义数据库的名字,每个数据库都以编号命名,开发者必须自己记录哪些数据库存储了哪些数据
- Redis也不支持为每个数据库设置不同的访问密码,所以一个客户端要么可以访问全部数据库,要么连一个数据库也没有权限访问
- 多个数据库之间并不是完全隔离的,比如 FLUSHALL 命令可以清空一个Redis实例中所有数据库中的数据
- 这些数据库更像是一种命名空间,而不适宜存储不同应用程序的数据,即可以使用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
- set key value:赋值
- get key:取值,键不存在返回 nil
- mset key1 value1 [key2 value2…]:一次设置多个key value
- mget key1 [key2 …]:一次获取多个 key
- getset key value:获取原始key的value值,同时设置新值
- strlen key:返回key存储的value的长度(为字节数,注意不是字符数)
- append key value:为对应 key 的value追加内容
- getrange 索引0开始:截取value的内容,开始 0,结尾 -1
- setex key seconds value:设置一个key存活的有效期(秒)
- psetex key milliseconds value:设置一个key存活的有效期(毫秒)
- setnx key value:key存在不做任何操作,不存在则添加
- msetnx key1 value1 [key2 value2…]:一次设置多个key value,只要有一个存在则不做添加,原子操作
- decr key:进行数据的 -1 操作
- decrby key decrement:根据指定的decrement进行减法操作
- incr key:进行数据的 +1 操作
- incrby key increment:根据指定的increment进行加法操作
- incrbyfloat key float:根据提供的数据加入浮点数
List 命令
List 内存模型:
- Ipush key value1 [value2 …]:将某个值加入到一个key列表头部(从左),key不存在则创建
- Ipushx key value1 [value2 …]:同push,但是必须要保证这个key存在
- rpush key value1 [value2 …]:将某个值加入到一个key列表末尾(从右),key不存在则创建
- rpushx key value1 [value2 …]:同rpush, 但是必须要保证这个key存在
- Ipop key:返回和移除列表的左边第一个元素
- грop key:返回和移除列表的右边第一个元素
- Irange key 0 -1:获取某一个下标区间内的元素
- llen key:获取列表元素个数
- Iset key index value:设置某一个指定索引的值(索引必须存在,索引从0开始)
- lindex key index:获取某一个指定索引位置的元素
- Irem key:删除重复元素
- Itrim key start end:保留列表中特定区间内的元素
insert key before|after pivolt newvalue
:在某一个元素之前,之后插入新元素
Set 命令
内存模型:
命令 | 解释 |
---|---|
sadd | 为集合添加元素 |
smembers | 显示集合中所有元素无序 |
scard | 返回集合中元素的个数 |
spop | 随机返回一个元素并将元素在集合中删除 |
smove | 从一个集合中向另一个集合移动元素必须是同一种类型 |
srem | 从集合中删除一个元素 |
sismember | 判断一个集合中是否含有这个元素 |
srandmember | 随机返回元素 |
sdiff | 去掉第一个集合中其它集合含有的相同元素 |
sinter | 求交集 |
sunion | 求和集 |
ZSet 命令
内存模型:
命令 | 说明 |
---|---|
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) |