likes
comments
collection
share

6.redis常用命令汇总

作者站长头像
站长
· 阅读数 9

KEYS命令: KEYS PATTERN

Keys 命令用于查找所有符合给定模式 pattern 的 key 。

redis 127.0.0.1:6379> KEYS PATTERN

//查找以 runoob 为开头的 key
redis 127.0.0.1:6379> SET runoob1 redis
OK
redis 127.0.0.1:6379> SET runoob2 mysql
OK
redis 127.0.0.1:6379> SET runoob3 mongodb
OK

//获取 redis 中所有的 key 可用使用 *。
redis 127.0.0.1:6379> KEYS *
1) "runoob3"
2) "runoob1"
3) "runoob2

keys:全量遍历键,用来列出所有满足特定正则字符串规则的key,假设redis此时正在生产环境下,使用该命令就会造成隐患,当redis数据量比较大时,keys会一次性返回所有符合条件的key,所以会造成redis的卡顿。 另外如果一次性返回所有key,对内存的消耗在某些条件下也是巨大的。 keys性能比较差,要避免使用。不推荐使用keys命令,推荐使用scan。

EXISTS命令:EXISTS KEY

用于检查给定 key 是否存在。

redis 127.0.0.1:6379> EXISTS KEY_NAME
//若 存在key=KEY_NAME 存在返回 1 ,否则返回 0
redis 127.0.0.1:6379> EXISTS runoob-new-key
(integer) 0

//现在我们创建一个名为 runoob-new-key 的键并赋值,再使用 EXISTS 命令。
redis 127.0.0.1:6379> set runoob-new-key newkey
OK
redis 127.0.0.1:6379> EXISTS runoob-new-key
(integer) 1
redis 127.0.0.1:6379>

DEL 命令:DEL KEY

DEL 命令用于删除已存在的键,不存在的 key会被忽略。

//返回被删除 key 的数量。
redis 127.0.0.1:6379> DEL KEY_NAME 

redis 127.0.0.1:6379> SET w3ckey redis
OK

redis 127.0.0.1:6379> DEL w3ckey
(integer) 1

RENAME命令:RENAME OLD_KEY NEW_KEY

重命名key

改名成功时提示 OK ,失败时候返回一个错误。

当 OLD_KEY_NAME 和 NEW_KEY_NAME 相同,或者 OLD_KEY_NAME 不存在时,返回一个错误。 当 NEW_KEY_NAME 已经存在时, RENAME 命令将覆盖旧值。

redis 127.0.0.1:6379> RENAME OLD_KEY_NAME NEW_KEY_NAME

# key 存在且 newkey 不存在

redis> SET message "hello world"
OK

redis> RENAME message greeting
OK

redis> EXISTS message               # message 不复存在
(integer) 0

redis> EXISTS greeting              # greeting 取而代之
(integer) 1


# 当 key 不存在时,返回错误

redis> RENAME fake_key never_exists
(error) ERR no such key


# newkey 已存在时, RENAME 会覆盖旧 newkey

redis> SET pc "lenovo"
OK

redis> SET personal_computer "dell"
OK

redis> RENAME pc personal_computer
OK

redis> GET pc
(nil)

redis:1> GET personal_computer      # 原来的值 dell 被覆盖了
"lenovo"

TYPE命令

//返回的是数据的类型
//示例:这个方法可以非常简单的判断出值的类型
redis 127.0.0.1:6379> type addr
string
redis 127.0.0.1:6379> type myzset2
zset
redis 127.0.0.1:6379> type mylist
list
redis 127.0.0.1:6379>

SELECT命令

选择数据库:Select 15即选择下标为15的数据库

★SACN

Scan 命令用于迭代数据库中的数据库键。 ​ SCAN 命令是一个基于游标的迭代器,每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程。SCAN以0作为游标,开始一次新的迭代,直到命令返回游标0完成一次遍历。另外,SCAN支持模糊查询。 ​ SCAN 返回一个包含两个元素的数组, 第一个元素是用于进行下一次迭代的新游标, 而第二个元素则是一个数组, 这个数组中包含了所有被迭代的元素。如果新游标返回 0 表示迭代已结束。

SSCAN 命令用于迭代集合键中的元素。 HSCAN 命令用于迭代哈希键中的键值对。 ZSCAN 命令用于迭代有序集合中的元素(包括元素成员和元素分值)。

SCAN cursor [MATCH pattern] [COUNT count]
cursor - 游标。
pattern - 匹配的模式。
count - 指定从数据集里返回多少元素,默认值为 10
> SADD myset1 "Google"
(integer) 1
> SADD myset1 "Runoob"
(integer) 1
> SADD myset1 "Taobao"
(integer) 1
> SSCAN myset1 0 match R*
1) "0"
2) 1) "Runoob"


> HMSET sites google "google.com" runoob "runoob.com" weibo "weibo.com" 4 "taobao.com"
OK
> HSCAN sites 0 match "run*"
1) "0"
2) 1) "runoob"
2) "runoob.com"

> ZADD site 1 "Google" 2 "Runoob" 3 "Taobao" 4 "Weibo"
(integer) 4
> ZSCAN site 0 match "R*"
1) "0"
2) 1) "Runoob"
2) 2.0
redis 127.0.0.1:6379> scan 0   # 使用 0 作为游标,开始新的迭代
1) "17"                        # 第一次迭代时返回的游标
2)  1) "key:12"
    2) "key:8"
    3) "key:4"
    4) "key:14"
    5) "key:16"
    6) "key:17"
    7) "key:15"
    8) "key:10"
    9) "key:3"
   10) "key:7"
   11) "key:1"
redis 127.0.0.1:6379> scan 17  # 使用的是第一次迭代时返回的游标 17 开始新的迭代
1) "0"
2) 1) "key:5"
   2) "key:18"
   3) "key:0"
   4) "key:2"
   5) "key:19"
   6) "key:13"
   7) "key:6"
   8) "key:9"
   9) "key:11"

注意:但是scan并非完美无瑕, 如果在scan的过程中如果有键的变化(增加、 删除、 修改) ,那么遍历效果可能会碰到如下问题: 新增的键可能没有遍历到, 遍历出了重复的键等情况, 也就是说scan并不能保证完整的遍历出来所有的键, 这些是我们在开发时需要考虑的。

设置key的生存时间

Redis在实际使用过程中更多的用作缓存,然而缓存的数据一般都是需要设置生存时间的,即:到期后数据销毁。

EXPIRE key seconds

生存时间(单位:秒) key在多少秒后会自动删除。设置成功返回 1 。 当key不存在或者不能为key设置过期时间时返回 0 。

PEXPIRE key milliseconds 生存时间设置单位为:毫秒 Redis PEXPIRE命令和EXPIRE命令的作用类似。 但是它以毫秒为单位设置 key 的生存时间,而不像 EXPIRE 命令那样,以秒为单位。

TTL key

查看key剩余的生存时间 当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以秒为单位,返回 key 的剩余生存时间。

PERSIST key

用于移除给定 key 的过期时间,使得 key 永不过期。

192.168.101.3:7002> set test 1          设置test的值为1
OK
192.168.101.3:7002> get test            获取test的值
"1"
192.168.101.3:7002> EXPIRE test 5       设置test的生存时间为5
(integer) 1
192.168.101.3:7002> TTL test            查看test的生于生成时间还有1秒删除
(integer) 1
192.168.101.3:7002> TTL test            key 不存在 
(integer) -2
192.168.101.3:7002> get test            获取test的值,已经删除
(nil)