单位秒。
- 设置 key 的过期时间以毫秒计
PEXPIRE key milliseconds
- 和 EXPIRE 类似
EXPIREAT key timestamp
EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。
- 和 EXPIRE 类似
PEXPIREAT key milliseconds-timestamp
设置 key 过期时间的时间戳(unix timestamp) 以毫秒计
- 移除过期时间
PERSIST key
移除 key 的过期时间,key 将持久保持。
注意,使用SET
、GETSET
命令为键赋值,也会同时清除键的过期时间。
但是只对键值操作的命令,如(RPUSH、INCR、HSET、ZREM)
- 返回剩余的生存时间。
TTL key
以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
- 和TTL类似
PTTL key
以毫秒为单位返回 key 的剩余的过期时间。
[](()其他命令
- 修改 key 的名称
RENAME key newkey
- 仅当 newkey 不存在时,将 key 改名为 newkey 。
RENAMENX key newkey
- 从当前数据库中随机返回一个 key
RANDOMKEY
- 将当前数据库的 key 移动到给定的数据库 db 当中
MOVE key db
- 清除某个数据库的数据
FLUSHDB
- 清除Redis所有数据
FLUSHALL
[](()数据类型
====================================================================
[](()字符串(string)
[](()性质
-
string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。
-
string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。
-
string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。
[](()操作命令
- 取值赋值
SET key value
GET key
- 递增递减数字
当存储的字符串是整数形式时,可以使用INCR
命令自增1,并返回自增后的值。
(当键不存在时,默认从0开始自增,所 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 以第一次返回值为 1 )。
INCR num
返回:1
INCR num
返回:2
如果给非整数类型的值,如浮点值、字符串,使用INCR命令,会报错。
如:
127.0.0.1:6379[1]> GET s
“helloworld”
127.0.0.1:6379[1]> INCR s
(error) ERR value is not an integer or out of range
指定增量
INCRBY key increment
同样的,也有减少命令。
DECR key
DECR key decrement
- 浮点数的增加
INCRBYFLOAT key increment
但没有对应的减少命令。
- 向尾部追加值
APPEND key value
- 获取字符串长度
STRLEN key
- 同时获得/得到多个键值
MGET key [key …]
MSET key value [key1 value1 …]
- 位操作
暂略。
以下的数据类型都不能支持嵌套。
[](()散列(hash)
[](()特点
-
Redis hash 是一个键值(key=>value)对集合。
-
键值的类型只能是字符串,也就是说不能去嵌套其他类型。
-
hash 特别适合用于存储对象。
-
一个散列类型的键最多只能包含 2 32 − 1 2^{32}-1 232−1(40亿多)个字段。
[](()操作命令
- 赋值、取值
HSET key field value
HGET key field
注:HSET命令不区分插入还是更新操作,插入操返回1,更新返回0;
HMSET key field1 value1 field2 value2 [filed3 value3]
HMGET key field1 field2 [field3]
如果不知道散列类型的键对应的值有哪些字段,可以使用:
HGETALL
- 只获取字段名或字段值
HKEYS key
HVALS key
- 只获取字段数量
返回字段的数量。
HLEN key
示例:
127.0.0.1:6379> HSET car price 50000
(integer) 1
127.0.0.1:6379> HMSET car kind bmw color white
OK
127.0.0.1:6379> HGET car price
“50000”
127.0.0.1:6379> HMGET car kind color
-
“bmw”
-
“white”
127.0.0.1:6379> HGETALL car
-
“price”
-
“50000”
-
“kind”
-
“bmw”
-
“color”
-
“white”
- 判断字段是否存在
HEXISTS key field
- 当字段不存在时赋值
(NX表示not exists)
HSETNX key field value
值得一提的是,这个命令也是一个原子操作,不需要担心静态条件。
- 增加数字
HINCRBY key filed increment
(散列类型没有HINCR命令)
- 删除字段
HDEL key field [field1 ……]
返回成功的删除字段的个数。
[](()列表
[](()特点
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
列表类型的内部使用双向链表,所以在链表两端添加元素的时间复杂度为O(1)。
自然,在链表两端查询元素都是很快的。
[](()操作命令
- 向列表两端添加元素
// 从左边添加(头部)
LPUSH key val [val1 ……]
// 从右边添加(尾部)
RPUSH key val [val1 ……]
- 向列表两端弹出元素
LPOP key
RPOP key
- 获取列表中元素的个数
LLEN
当键不存在时,返回0;
- 获得列表片段
两个注意点,① 索引从0开始, ② 左右都是闭区间。
LRANGE key start end
并且支持负索引,表示从右边开始计数。
如-1表示右边第一个,-2表示右边第二个。
两个情况
① start的位置在stop的后面,返回空列表
② stop的位置大于实际的索引范围,则返回到列表最右边的元素。
- 删除列表中指定的值
REM为remove的缩写
LREM key count value
删除前count个值value的元素。
注意:
① count为0时,删除所有
②count为负,仍然删除前|count|个。
返回的是实际删除的元素的个数。
- 获得/修改制定索引的元素值
LINDEX key index
LSET KEY index value
注意:索引从0开始
- 只保留指定阶段
只保留[start,end]的元素,其余的元素删除。
LTRIM key start end
- 将元素从一个列表转到另一个列表
将第一个列表的元素从右边弹出,从左边添加进第二的列表。
RPOPLPUSH source destination
[](()集合
[](()特点
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中集合是通过哈希表 hash table实现的,所以添加,删除,查找的复杂度基本上是 O(1)的。
集合中最大的成员数为 2 32 − 1 2^{32}- 1 232−1 (4294967295, 每个集合可存储40多亿个成员)。
[](()操作命令
- 增加/删除元素
SADD key member [member …]
SREM key member [member …]
返回是成功添加、删除的元素的个数。
- 获得集合的所有元素
SMEMBERS
- 判断元素是否在集合中
SISMEMBER key member
时间复杂度为O(1)。当值存在时返回1,否则返回0。
- 集合的交
intersection: 交集
SINTER setA setB setC
- 集合的并
union:并集