Skip to content

工具、数据库、基础命令

更新: 2025/2/24 字数: 0 字 时长: 0 分钟

连接上了Redis,我们还需要对Redis做进一步了解。

可视化工具

为了更直观的展示下面的例子,我们先来安装一个Redis可视化工具。

工具名称:RedisDesktopManager

安装完成桌面会生成如下快捷图标,双击启动如右图:

15531120-10faa59b172e8847

点击下方的 Connect to Redis Server 创建连接:出现 Successful connection to redis-server 说明连接成功。

Name:当前连接的名称
Host:主机地址(一般为本机的环回地址127.0.0.1或者局域网地址)
Port:连接端口
Auth:Reids的认证密码
Test Connection:测试能否连接成功

15531120-79124158f25aaafb

如果我们要连接云服务器上的Redis,还需要配置 SSH Tunnel 选项卡,**因为要先通过SSH连接到云服务器才能连接到里面的Redis。**配置如下:

勾选Use SSH Tunnel:使用SSH管道
Remote Host:云服务器的IP
Remote Port:SSH的连接端口,通常是22
User Name:登录云服务器的用户名
勾选Private Key:使用私钥登录
勾选Password:使用密码登录

QQ截图20220210151125

?> 注意:云服务器上的Redis要停止服务 systemctl stop redis,Redis要通过 路径\redis-server 路径\redis.conf 启动起来。

数据库

与其他数据库不同的是,Redis默认支持16个数据库(修改配置信息可以支持更多,无上限),每个数据库都以编号命名(默认0-15)。

QQ截图20220210155740

?> 提示:因为单线程架构,让Redis多数据库功能仍然是使用一个CPU核心,彼此之间还是会受到影响的。建议如果要使用多个数据库功能,完全可以在一台机器上部署多个Redis实例,彼此用端口来做区分,因为现代计算机或者服务器通常是有多核CPU的。这样既保证了业务之间不会受到影响,又合理地使用了CPU资源。

!> 注意:Redis每个数据库的数据是不能共享,不同数据库可以存在相同的键。

切换数据库

**客户端与Redis建立连接会自动选择0号数据库,通过 select 数据库编号 来切换数据库。**可以看到下图中,除0号数据库外,在其它库上都显示有编号:

QQ截图20220210160413

清空数据库

flushdb清除当前数据库。

127.0.0.1:6379[1]> flushdb   # 清空当前所在1号数据库中的所有数据

flushall清除所有数据库。

127.0.0.1:6379[1]> flushall  # 清空0号至15号的所有数据库的所有数据

!> 注意:如果当前数据库键值数量比较多,flushdb/flushall 存在阻塞Redis的可能性。所以在使用时一定要小心谨慎。

基础命令

Redis的命令有上百个,如果纯靠死记硬背比较困难,但是如果理解了Redis的一些机制,会发现这些命令有很强的通用性。**由于Redis中的数据都是以键值对的形式存在,如果键的值为空,那么键也不会存在,同样的只有值没有键也不会存在,因为“键值对”必须是一个键对应一个值。**为了更加直观的展示下面的操作,请在可视化工具中选中数据库,右键选择 Console 呼出命令行:

QQ截图20220210164634

设置键

set 键 值设置键值对的命令。

QQ截图20220210162829

同样,还可以用相同的命令来改变键值对当中键对应的值:

QQ截图20220210163131

类型键

type 键返回键的类型。Redis对外有5种数据结构分别是: string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)。

键hello是字符串类型,返回结果为string:

QQ截图20220210174759

获取值

get 键获取一个键对应的值,如果要获取的键不存在,则返回nil(空)。

QQ截图20220210175619

匹配键

keys 通配符按通配符来匹配键名。

  • keys:代表所有的键值对的键名。
  • *:代表匹配任意字符。
  • .:代表匹配一个字符。
  • []:代表匹配部分字符,[1,3]代表匹配1和3;[1-10]代表匹配1到10的任意数字。
  • \x:用来做转义,例如要匹配星号、问号需要进行转义。

keys * :遍历所有的键。

QQ截图20220210163912

keys h*ll*:匹配以h开头中间有两个l的键。

QQ截图20220210164047

keys [h,l]ell* :匹配以j,r开头,紧跟ell字符串的所有键。

QQ截图20220210164336

如果通配符不能完全匹配上,则返回为空。

QQ截图20220210164441

!> 注意:当Redis保存了大量键时,线上环境禁止使用 keys 命令。

键数量

dbsize:返回当前数据库中键的总数。

QQ截图20220210165618

?> 提示:dbsize命令是直接获取Redis内置的键总数变量,所以dbsize命令的时间复杂度是O(1),而keys命令会遍历所有键,所以它的时间复杂度是O(n)。

键存在

exists 键检查键是否存在,如果存在则返回1,不存在则返回0。

QQ截图20220210170058

重命名

rename 键 新键将旧键名称替换为新键名称,若已存在新键名称,新键的值将被覆盖。

现有一个键值对,键为hello,将键hello重命名为python:

QQ截图20220210170509

如果在键hello重命名之前,键python已经存在,键python的值也将被覆盖为键hello的值。

# 存在键值对:{hello: world123}、{python: world}
127.0.0.1:6379> rename hello python
OK
127.0.0.1:6379> get hello 
(nil)
127.0.0.1:6379> get python 
"world123"

为了防止被强行 rename,Redis提供了 renamenx命令,确保只有 newKey 不存在时候才被覆盖。

renamenx 键 新键将旧键名称替换为新键名称,若已存在新键名称,返回结果0,代表没有完成重命名,所以旧键新键的值不变。

新键名python已经存在,rename返回0,所以键hello和python的值没变:

# 存在键值对:{hello: world123}、{python:world}
127.0.0.1:6379> rename hello python
(integer) 0 
127.0.0.1:6379> get hello
"world123" 
127.0.0.1:6379> get python 
"world"

随机键

randomkey返回一个随机键。

QQ截图20220210171635

删除键

del 键删除单个或多个任意键,返回结果为成功删除的个数,如果删除不存在的键,返回0。

QQ截图20220210172333

过期键

过期键:即给键设置一个过期时间;在过期时间,键存在;超过过期时间,键会立即被删除,犹如使用del命令一样;如果过期时间为负值,键会立即被删除。

expire 键 秒数设置键在指定秒数后过期。

ttl 键观察键剩余过期时间;结果大于等于0的整数,键剩余的过期时间;结果等于-1,键没有设置过期时间;结果等于-2,键不存在。

persist 键清除键的过期时间。

新建一个键值对:set hello world

观察新键值对过期时间:ttl hello

QQ截图20220210173832

设置过期时间为20秒:expire hello 20

QQ截图20220210174057

20秒后再用 ttl 命令:ttl hello

QQ截图20220210174231

?> 提示:Redis不支持二级数据结构(例如哈希、列表)内部元素的过期功能,例如不能对列表中的某一个元素做过期时间设置。

!> 注意:set 相同的键会导致过期时间失效,可以用 setex 命令作为 set+expire 的组合,不但是原子执行,同时减少了一次网络通讯的时间。

计数键

计数键就是对键中的整型值进行操作:

incr 键:对键中的值进行自增1的操作。
incrby 键 指定整型:对键中的值自增指定数字。
decr 键:对键中的值进行自减1的操作。
decrby 键 指定整型:对键中的值自减指定数字。
incrbyfloat 键 自增浮点数:对键中的值自减指定浮点数。
  • 键中的值必须是整型,否则返回错误。

QQ截图20220210180510

  • 键不存在,按照值为0自增,返回结果为1。

QQ截图20220210180743

  • 值是整数,返回自增后的结果。

QQ截图20220210180939