1.前言
Redis 是一个基于键值对(key-value)的数据结构存储系统,在学习Redis数据类型之前,先来了解一下key相关的命令吧
2. 获取和设置Key的值
SET key value
:设置key对应的值。GET key
:获取key对应的值。SETNX key value
:只有当key不存在时,才设置key的值。- 示例:
127.0.0.1:6379> set k1 hello
OK
127.0.0.1:6379> get k1
"hello"
127.0.0.1:6379> setnx k1 1 # k1存在,不修改
(integer) 0
127.0.0.1:6379> get k1
"hello"
127.0.0.1:6379> setnx k2 2 # k2不存在,生成key并赋值
(integer) 1
127.0.0.1:6379> get k2
"2"
127.0.0.1:6379>
3. Key的生存时间
EXPIRE key seconds
:为key设置过期时间(单位秒)。SETEX key seconds value
:设置key的值,并为其设置过期时间(单位秒)。TTL key
:获取key的剩余生存时间(单位秒),如果key没有设置过期时间则返回-1,如果key不存在则返回-2。PTTL key
:同TTL,但返回毫秒精度的剩余生存时间。PEXPIRE key milliseconds
:为key设置过期时间(单位毫秒)。PERSIST key
:移除key的过期时间,使其永不过期。- 示例:
127.0.0.1:6379> set k1 1 # 没设置过期时间
OK
127.0.0.1:6379> ttl k1
(integer) -1
127.0.0.1:6379> expire k1 5 # 设置过期时间 5s
(integer) 1
127.0.0.1:6379> ttl k1
(integer) 3
127.0.0.1:6379> ttl k1
(integer) 1
127.0.0.1:6379> ttl k1
(integer) -2 # 已过期
127.0.0.1:6379> setex k2 5 2 # 设置key并设置过期时间
OK
127.0.0.1:6379> ttl k2
(integer) 4
127.0.0.1:6379> ttl k2
(integer) 1
127.0.0.1:6379> ttl k2
(integer) -2
127.0.0.1:6379>
127.0.0.1:6379> setex k3 100 3
OK
127.0.0.1:6379> ttl k3
(integer) 96
127.0.0.1:6379> persist k3 # 移除k3的过期时间
(integer) 1
127.0.0.1:6379> ttl k3
(integer) -1
127.0.0.1:6379>
4. 删除Key
DEL key [key ...]
:删除一个或多个key。- 示例:
127.0.0.1:6379> set k1 1
OK
127.0.0.1:6379> set k2 2
OK
127.0.0.1:6379> set k3 3
OK
127.0.0.1:6379> del k1
(integer) 1
127.0.0.1:6379> del k2 k3
(integer) 2
127.0.0.1:6379>
⭐UNLINK key [key ...]
:非阻塞地删除一个或多个key(仅仅将keys从keyspace元数据中删除,真正的删除会在后续异步中操作,这个命令很重要!)。
5. 检查Key的存在性
EXISTS key
:检查key是否存在,存在返回1,否则返回0。TYPE key
:返回key所储存的值的类型。- 示例:
127.0.0.1:6379> set k1 1
OK
127.0.0.1:6379> exists k1
(integer) 1
127.0.0.1:6379> exists k2
(integer) 0
127.0.0.1:6379> type k1
string
127.0.0.1:6379>
6. Key的计数
DBSIZE
:返回当前数据库中key的数量。- 示例:
127.0.0.1:6379> keys *
1) "k1"
127.0.0.1:6379> dbsize
(integer) 1
127.0.0.1:6379>
7. 遍历和查找Key
KEYS pattern
:查找所有符合给定模式的key,但此命令可能阻塞服务器,慎用。- 示例:
127.0.0.1:6379> set k1 1
OK
127.0.0.1:6379> set k2 2
OK
127.0.0.1:6379> keys * #key * 这个操作十分危险,慎用!
1) "k2"
2) "k1"
127.0.0.1:6379>
8. 数据库的相关key的操作
MOVE key dbindex
:将key移动到另一个数据库dbindex中。- select dbindex: 切换数据库
- 示例:
# Redis中默认是有16个数据库,数据库下标从0开始
# 数据库数量 可在Redis的配置文件中修改
127.0.0.1:6379> set k1 1
OK
127.0.0.1:6379> set k2 2
OK
127.0.0.1:6379> move k1 6 #将k1从0号数据库移到6号数据库
(integer) 1
127.0.0.1:6379> keys *
1) "k2"
127.0.0.1:6379> select 6 # 进入6号数据库
OK
127.0.0.1:6379[6]> keys *
1) "k1"
127.0.0.1:6379[6]> select 15 # 第16个数据库
OK
127.0.0.1:6379[15]> select 16
(error) ERR DB index is out of range
127.0.0.1:6379[15]>
RANDOMKEY
:随机返回数据库中的一个key。flushdb
: 清空当前数据库flushall
: 清空全部数据库- 示例:
127.0.0.1:6379> keys *
1) "k4"
2) "k2"
3) "k3"
127.0.0.1:6379> randomkey
"k4"
127.0.0.1:6379> randomkey
"k4"
127.0.0.1:6379> randomkey
"k3"
127.0.0.1:6379> randomkey
"k2"
127.0.0.1:6379> flushdb # 清空当前数据库
OK
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> 127.0.0.1:6379> select 6 # 查看6号数据库
OK
127.0.0.1:6379[6]> keys *
1) "k1" # 6号库key没有被清除
127.0.0.1:6379[6]> select 0 # 进入0号数据库
OK
127.0.0.1:6379> flushall # 清空全部数据库
OK
127.0.0.1:6379> select 6
OK
127.0.0.1:6379[6]> keys *
(empty array) # 6号库key已被清除