Redis全局命令&键管理

全局命令

查看所有键

keys *

keys命令的时间复杂度为O(n),因为keys命令会遍历所有键. 线上环境禁止使用

127.0.0.1:6379[2]> KEYS *
(empty list or set)
127.0.0.1:6379[2]> select 0
OK
127.0.0.1:6379> KEYS *
1) "k1"
2) "name"
3) "student:2019205242"

键总数

dbsize

dbsize命令的时间复杂度为O(1),因为可以直接获取redis内置的键总数

127.0.0.1:6379> DBSIZE
(integer) 3

检查建是否存在

exists key

127.0.0.1:6379> exists java
(integer) 0
127.0.0.1:6379> exists name
(integer) 1

删除键

del key [key ...]

del是一个通用命令,无论值是什么数据类型,都可以用del删除

127.0.0.1:6379> DEl java
(integer) 0
127.0.0.1:6379> del k1
(integer) 1
127.0.0.1:6379> keys *
1) "java"
2) "name"
3) "student:2019205242"
4) "go"
127.0.0.1:6379> del go java
(integer) 2

键过期

expire key seconds 对key添加过期时间

ttl key 返回键的剩余时间

127.0.0.1:6379> EXPIRE user::1 10
(integer) 0
127.0.0.1:6379> get user::1
(nil)
127.0.0.1:6379> ttl user::1
(integer) -2
127.0.0.1:6379> ttl name
(integer) -1

键的数据类型

type key 返回对外的数据类型

object encoding key 返回底层数据结构

127.0.0.1:6379> TYPE java
string
127.0.0.1:6379> OBJECT encoding java
"int"

img

键管理

单个键管理

1.键重命名

rename key newkey

renamenx key newkey

renamenx确保只有newkey不存在时才被覆盖

127.0.0.1:6379> rename name java
OK
127.0.0.1:6379> get java
"red"
127.0.0.1:6379> keys *
1) "java"
2) "name"
3) "student:2019205242"
4) "go"
127.0.0.1:6379> renamenx go java
(integer) 0

key与newkey相同时,不同版本redis返回的结果有差异

127.0.0.1:6379> renamenx go go
(error) ERR source and destination objects are the same
2.随机返回一个键

randomkey

127.0.0.1:6379> RANDOMKEY
"java"
127.0.0.1:6379> RANDOMKEY
"go"
3.键过期
expire key seconds键在seconds秒后过期
pexpire key milliseconds键在milliseconds毫秒后过期
expireat key timestamp键在秒级时间戳timestamp后过期
pexpireat key milliseconds-timestamp键在秒级时间戳milliseconds-timestamp后过期
ttl key返回剩余时间单位秒
pttl key返回剩余时间单位毫秒

无论使用过期时间还是时间戳,秒级还是毫秒级,在redis内部最终使用的都是pexpireat

注意的点:

  1. 若expire key的键不存在,返回0

  2. 若设置过期时间为负值,键会立即被删除

  3. persist命令可以将过期时间清除

    127.0.0.1:6379> EXPIRE list1 50
    (integer) 1
    127.0.0.1:6379> pttl list1
    (integer) 43934
    127.0.0.1:6379> persist list1
    (integer) 1
    127.0.0.1:6379> pttl list1
    (integer) -1
    
  4. 对于字符串类型,执行set命令会去掉过期时间

  5. setex命令是set + expire的组合,不但是原子执行,同时减少了一次网络通讯的时间

4.迁移键

目的:我们只想把部分数据由一个redis迁移到另一个redis

  • move

    move key db

    127.0.0.1:6379> move list1 1
    (integer) 1
    127.0.0.1:6379> select 1
    OK
    127.0.0.1:6379[1]> keys *
    1) "list1"
    
  • dump + restore

    dump key

    restore key ttl value

    127.0.0.1:6379> lrange list1 0 -1
    1) "1"
    2) "2"
    3) "3"
    127.0.0.1:6379> dump list1
    "\n\x11\x11\x00\x00\x00\x0e\x00\x00\x00\x03\x00\x00\xf2\x02\xf3\x02\xf4\xff\x06\x00Z1_\x1cg\x04!\x18"
    127.0.0.1:6379> restore list2 0 "\n\x11\x11\x00\x00\x00\x0e\x00\x00\x00\x03\x00\x00\xf2\x02\xf3\x02\xf4\xff\x06\x00Z1_\x1cg\x04!\x18"
    OK
    
  • migrate

    migrate host port key|"" destination-db timeout [copy] [replace] [keys key [key ...]]

    这里我尝试向1号仓库迁移key, 结果之一阻塞直到超时,原因应该是migrate不能向同一个redis实例迁移数据,redis时单线程的

对比

redisqianyikey

遍历键

1.全量遍历键

keys pattern

通配符

  • *代表匹配任意字符
  • ?代表匹配一个字符
  • []代表匹配部分字符
  • \x用来做转义
127.0.0.1:6379> KEYS k?
1) "k2"
2) "k1"
3) "k3"
2.渐进式遍历

scan cursor [match pattern] [count number]

cursor: 游标,第一次遍历从0开始,每次scan遍历完都会返回当前游标的值,直到游标值为0,表示遍历结束

count number:表示每次遍历key的个数,默认是10

127.0.0.1:6379> scan 0
1) "0"
2) 1) "list2"
   2) "java"
   3) "k1"
   4) "student:2019205242"
   5) "k2"
   6) "name"
   7) "k3"
   8) "hello"
   9) "go"

数据库管理

1.切换数据库

select dbIndex

redis是用数字作为多个数据库的实现,redis默认配置中是有16个数据库

2.flushdb/flushall

flushdb清除当前数据库

flushall清除所有数据库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值