Redis的基础命令
在前面我们讲了redis的搭建和启动,这里直接开始将他的基础命令
一、连接命令
1.ping:用于测试与服务器的连接是否仍然生效,如果连接正常就返回一个PONG 否则返回一个连接错误。
127.0.0.1:6379> ping
PONG
2.echo :用于打印特定信息
127.0.0.1:6379> echo 'hello world'
"hello world"
3.select i:切换到指定的数据库,数据库索引号 i 用数字值指定,以 0 作为起始索引值。默认使用 0号数据库。
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]>
这里要注意,你在0库里面设置的键,只能在0库里面使用,在1库里面不生效。可以采用命令给它移过去,下文会讲到。
4.auth pword:开启了密码保护,在每次连接 Redis 服务器之后,就要使用auth命令解锁,解锁之后才能使用其他 Redis 命令。密码匹配时返回 OK
,否则返回一个错误。
设置密码
127.0.0.1:6379> config set requirepass 123.com
OK #requirepass的值123.com就是密码
127.0.0.1:6379> quit
下次登录时
[root@localhost redis]# ./src/redis-cli
127.0.0.1:6379> ping
(error) NOAUTH Authentication required. #是 Redis 提示需要身份验证才能执行命令的错误信息。
127.0.0.1:6379> auth 123.com #直接使用auth后面加自己的密码即可登录成功
OK
清空密码
127.0.0.1:6379> config set requirepass “”
OK #requirepass的值就是密码
127.0.0.1:6379> quit
5.quit:请求服务器关闭与当前客户端的连接。总是返回 OK
(但是不会被打印显示,因为当时 Redis-cli 已经退出)。
127.0.0.1:6379[1]> quit
[root@localhost redis]#
二、键命令
1.set key value:将字符串值 value关联到 key 。(当然这里的key 也可以是其他内容)
127.0.0.1:6379> set key1 1 #传入的都是字符串
OK127.0.0.1:6379> set y11 1 #也可以不叫key
OK
127.0.0.1:6379> get y11
"1"
2.get key:返回 key所关联的字符串值。如果 key 不存在那么返回特殊值 nil 。
127.0.0.1:6379> get key1
"1"
3.del key1 key2 :删除给定的一个或多个 key 。没有的key忽略,返回被删除 key 的数量。
127.0.0.1:6379> del key1 y11
(integer) 2
4.mset key1 value1 key2 value2
批量设置key
127.0.0.1:6379> mset key1 1 key2 2 key3 3
OK
5.mget key1 key2 key3 批量查看key
127.0.0.1:6379> mget key1 key2 key3
1) "1"
2) "2"
3) "3"
6.exists key:检查 key 是否存在。
存在返回 1,不存在返回 0 。
127.0.0.1:6379> exists key3
(integer) 1
7.type key:返回 key 所储存的值的类型。none (key不存在)、string (字符串)、list (列表)、set (集合)、zset (有序集)、hash (哈希表)
127.0.0.1:6379> type key1
string
8.expire key seconds:以秒为单位,为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除。
设置成功返回 1 。其他为0。
127.0.0.1:6379> expire key3 30
(integer) 1
127.0.0.1:6379> ttl key3 #查看有效时间
(integer) 24
127.0.0.1:6379> exists key3 #验证是否存在
(integer) 0
9.ttl key:以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
当 key 不存在时,返回 -2 。当 key 存在但没有设置剩余生存时间时,返回 -1 。
127.0.0.1:6379> set key1 helloworld
OK
127.0.0.1:6379> ttl key1
(integer) -1
127.0.0.1:6379> expire key1 50
(integer) 1
127.0.0.1:6379> ttl key1
(integer) 44
127.0.0.1:6379> ttl key1
(integer) -2
10.pexpire key mseconds,以毫秒为单位设置 key 的生存时间,
设置成功,返回 1。key不存在或设置失败,返回0
127.0.0.1:6379> set key1 abc
OK
127.0.0.1:6379> pexpire key1 10000
(integer) 1
127.0.0.1:6379> ttl key1
(integer) 5
127.0.0.1:6379> pttl key1
(integer) 746
11.pttl key:以毫秒为单位返回 key 的剩余生存时间,
当 key 不存在时,返回 -2 。当 key 存在但没有设置剩余生存时间时,返回 -1 。
127.0.0.1:6379> pttl key1
(integer) -2
127.0.0.1:6379> set key1 abc
OK
127.0.0.1:6379> pexpire key1 30000
(integer) 1
127.0.0.1:6379> pttl key1
(integer) 27345
12.keys pattern:查找所有符合给定模式 pattern 的 key 。符合给定模式的 key 列表。
通配符
* 表示多个字符
? 表示一个字符
[] 表示只能是[]里面的字符
\ 表示指定特殊字符
127.0.0.1:6379> mset zhangsan 1 zhangsi 2 zhangwu 3
OK
127.0.0.1:6379> keys *
1) "zhangwu"
2) "zhangsan"
3) "zhangsi"
127.0.0.1:6379> keys ng*
(empty list or set)
127.0.0.1:6379> keys *ng*
1) "zhangwu"
2) "zhangsan"
3) "zhangsi"
127.0.0.1:6379> keys zhang??
1) "zhangwu"
2) "zhangsi"
127.0.0.1:6379> keys zha[ng]si
(empty list or set)
127.0.0.1:6379> keys zhan[ng]si
1) "zhangsi"
13.move key db:移动key。将当前数据库的 key 移动到给定的数据库 db 当中。
移动成功返回 1 ,失败则返回 0 。
127.0.0.1:6379> keys *
1) "zhangwu"
2) "zhangsan"
3) "zhangsi"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> move zhangsan 1
(integer) 1
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
1) "zhangsan"
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> keys *
1) "zhangwu"
2) "zhangsi"
注意:
key不存在时,移动失败
key移动到1库时,1库中出现同名的key,移动失败
14.random key:从当前数据库中随机一个 key 。
当数据库不为空时,返回随机一个 key 。当数据库为空时,返回 nil 。
127.0.0.1:6379> randomkey
"zhangwu"
127.0.0.1:6379> randomkey
"key"
127.0.0.1:6379> randomkey
"key"
127.0.0.1:6379> randomkey
"zhangwu"
15.rename key newkey:将 key 改名为 newkey 。
改名成功时提示 OK ,失败时候返回一个错误。
127.0.0.1:6379> rename key key1
OK
127.0.0.1:6379> keys *
1) "key1"
2) "zhangwu"
3) "zhangsi"
注意:
当 key 和 newkey 相同,或者 key 不存在时,返回一个错误。
当 newkey 已经存在时, RENAME 命令将覆盖旧值。
rename key newkey
:强制重命名(覆盖风险)
功能:无条件将
key
改名为newkey
。关键特性:
- 如果
newkey
已经存在,会直接覆盖原newkey
的值(数据会丢失)。 - 如果
key
不存在,或key
与newkey
同名,会返回错误。 - 成功时返回
OK
例如
# 假设已存在 key1="a"、key2="b" 127.0.0.1:6379> rename key1 key2 # key2 已存在,会被覆盖 OK 127.0.0.1:6379> get key2 # 原 key2 的值 "b" 已丢失,变为 key1 的值 "a" "a"
16.renamenx key newkey:当且仅当 newkey 不存在时,将 key 改名为 newkey 。修改成功时,返回 1 。如果 newkey 已经存在,返回 0 。
127.0.0.1:6379> renamenx zhangsi zhangwu
(integer) 0
127.0.0.1:6379> renamenx zhangsi zhangsan
(integer) 1
127.0.0.1:6379> keys *
1) "zhangsan"
2) "key1"
3) "zhangwu"
renamenx key newkey
:安全重命名(不覆盖)
功能:仅当
newkey
不存在时,才将key
改名为newkey
(nx
是 "not exists" 的缩写)。关键特性:
- 如果
newkey
已存在,不做任何操作,返回0
(表示失败)。 - 如果
newkey
不存在,重命名成功,返回1
(表示成功)。 - 避免了覆盖已有数据的风险,更安全。
示例:
# 假设已存在 key1="a"、key2="b" 127.0.0.1:6379> renamenx key1 key2 # key2 已存在,不操作 (integer) 0 127.0.0.1:6379> get key2 # 仍为原 value "b" "b"
- 如果
补充建立不同类型的key、
①. 哈希(Hash)
用于存储键值对集合(类似 JSON 对象),适合存储结构化数据(如用户信息)。
设置命令:hset key field value
(单个字段)、hmset key field1 value1 field2 value2...
(批量字段,Redis 4.0 后推荐用 hset
替代)
# 设置哈希类型的键(用户信息)
127.0.0.1:6379>hset user:1 name "张三" age 25 city "北京"
(integer) 3 # 成功设置 3 个字段这里创建了一个叫 user:1 的哈希键,包含 3 个字段:
name → 张三
age → 25
city → 北京# 查看类型
127.0.0.1:6379> type user:1
hash# 获取哈希中的字段值
127.0.0.1:6379> hget user:1 name
"zhangsan"#获取所有哈希值
127.0.0.1:6379> hgetall user:1
1) "name" # 第一个字段
2) "张三" # 第一个字段的值
3) "age" # 第二个字段
4) "25" # 第二个字段的值
5) "city" # 第三个字段
6) "北京" # 第三个字段的值#删除字段 语法:hdel 哈希键 字段1 字段2 ...
127.0.0.1:6379> hdel user:1 city
(integer) 1 # 表示成功删除1个字段# 再次查看,city 字段已消失
127.0.0.1:6379> hgetall user:1
1) "name"
2) "张三"
3) "age"
4) "25"
②. 列表(List)
有序的字符串集合(可重复),支持从两端添加 / 删除元素,类似链表。
设置命令:lpush key value1 value2...
(从左侧添加)、rpush key value1 value2...
(从右侧添加)
# 设置列表类型的键(存储用户 ID 列表)
127.0.0.1:6379> rpush user_ids 1001 1002 1003 # 从右侧添加元素
(integer) 3 # 列表长度# 查看类型
127.0.0.1:6379> type user_ids
list# 获取列表元素(索引 0 到 2)
127.0.0.1:6379> lrange user_ids 0 2
1) "1001"
2) "1002"
3) "1003"#添加元素
# 往列表 "fruits" 右边添加元素
127.0.0.1:6379> rpush fruits "apple" "banana"
(integer) 2 # 列表现在有2个元素:["apple", "banana"]# 往列表左边添加元素
127.0.0.1:6379> lpush fruits "orange"
(integer) 3 # 列表变成:["orange", "apple", "banana"]#删除元素
# 删除左边第一个元素
127.0.0.1:6379> lpop fruits
"orange" # 被删除的元素
127.0.0.1:6379> lrange fruits 0 -1
1) "apple"
2) "banana" # 现在列表剩下这两个# 删除右边最后一个元素
127.0.0.1:6379> rpop fruits
"banana" # 被删除的元素
127.0.0.1:6379> lrange fruits 0 -1
1) "apple" # 列表只剩这个
③. 集合(Set)
无序的字符串集合(不可重复),支持交集、并集等集合操作。
设置命令:sadd key member1 member2...
# 设置集合类型的键(存储标签)
127.0.0.1:6379> sadd tags "redis" "python" "database"
(integer) 3 # 成功添加 3 个元素# 查看类型
127.0.0.1:6379> type tags
set# 查看集合所有元素
127.0.0.1:6379> smembers tags
1) "database"
2) "python"
3) "redis"
④. 有序集合(Sorted Set)
类似集合,但每个元素关联一个分数(score),可按分数排序(不重复)。
设置命令:zadd key score1 member1 score2 member2...
# 设置有序集合类型的键(存储学生成绩,分数为成绩)
127.0.0.1:6379> zadd scores 90 "zhangsan" 85 "lisi" 95 "wangwu"
(integer) 3 # 成功添加 3 个元素# 查看类型
127.0.0.1:6379> type scores
zset# 按分数升序查看元素(0 表示从最低分开始,-1 表示到最高分结束)
127.0.0.1:6379> zrange scores 0 -1 withscores
1) "lisi"
2) "85"
3) "zhangsan"
4) "90"
5) "wangwu"
6) "95"
关键说明
- 每个键只能属于一种数据类型,设置时通过命令自动关联(例如
hset
对应哈希,sadd
对应集合)。 - 可通过
type key
命令查看某个键的类型。 - 若对已存在的键使用其他类型的命令,会返回错误(例如对字符串键使用
hset
)。
总结:这是一个简单的使用redis,有需要的可以自己再去网上找找相关内容,还有cue一嘴机械革命,我辛辛苦苦码了一天的笔记,还没保存呢,电脑直接关机????然后我的笔记消失了~蛙趣~当下一万匹尼马跑过去---,祝大家天天开心