前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis开发与运维学习笔记---(1)

Redis开发与运维学习笔记---(1)

作者头像
AsiaYe
发布2020-03-31 12:14:05
4530
发布2020-03-31 12:14:05
举报
文章被收录于专栏:DBA随笔
最近准备开始拓宽视野,看看redis的东西,之前就了解过redis的部署方法和5种基本的数据结构,现在准备稍微深入的了解下redis,先写篇文章立个flag,这样以后就用动力写系列文章了。

今天主要看Redis中的数据库管理部分。

redis中的数据是通过key-value的方法存储的,类似C++中的map,我们通过key就可以获取value的值。redis提供了几个面向redis数据库的操作,分别是keys、exists、del、expire、type、dbsize、select、flushdb、flushall命令。今天来看这几个命令:

keys

我们使用keys *能够获得所有的redis键,但是该命令复杂度比较高,为O(n),不建议在线上环境直接使用。

代码语言:javascript
复制
127.0.0.1:7393> set hello world
OK
127.0.0.1:7393> keys *
1) "hello"

exist keys

这个命令是判断键是否存在的,如果存在,返回1,如果不存在,返回0

代码语言:javascript
复制
127.0.0.1:7393[14]> exists hello
(integer) 1
127.0.0.1:7393[14]> exists yyz
(integer) 0

del

del命令用来删除某个键

del key

举例如下:

代码语言:javascript
复制
127.0.0.1:7393[14]> del hello
(integer) 1
127.0.0.1:7393[14]> exists hello
(integer) 0

del返回1表示有一个键删除成功,exists返回0表示不存在hello

expire key seconds

expire命令用来设置键的超时时间,一旦超过这个时间,则键会被自动删除。

代码语言:javascript
复制
127.0.0.1:7393[14]> set hello world
OK
127.0.0.1:7393[14]> expire hello 5
(integer) 1
127.0.0.1:7393[14]> exists hello
(integer) 1
127.0.0.1:7393[14]> exists hello
(integer) 0

在这个过程中,我们可以使用ttl命令来查看键的剩余时间,如下:

代码语言:javascript
复制
127.0.0.1:7393[14]> set hello world
OK
127.0.0.1:7393[14]> expire hello 10
(integer) 1
127.0.0.1:7393[14]> ttl hello
(integer) 8
127.0.0.1:7393[14]> ttl hello
(integer) 5
127.0.0.1:7393[14]> ttl hello
(integer) -2
127.0.0.1:7393[14]> exists hello
(integer) 0

当ttl返回大于0的整数时,该整数表示键的过期时间,单位为s,如果返回-1,则说明该键没有设置过期时间,如果返回-2,则说明键不存在。

type

type命令用来查看当前键的数据结构类型,结果可能有5中,string,hash,list,set,zset

代码语言:javascript
复制
127.0.0.1:7393[15]> set hello world
OK
127.0.0.1:7393[15]> type hello
string

dbsize

这个命令是获取redis中键的个数,该命令在执行的时候,不会遍历所有的键,而是会直接获取redis内置的键总数变量,所以该命令的复杂度是O(1),而keys * 命令的复杂度是O(n),当redis保存了大量的键时,keys * 在线上环境中是需要禁用的。

select

和MySQL不同,redis中的数据库只是用数字来作为多个数据库的实现,redis默认配置中有16个数据库,每个数据库使用数字来区分。

代码语言:javascript
复制
127.0.0.1:7393> set hello world
OK
127.0.0.1:7393> get hello
"world"
127.0.0.1:7393> select 15
OK
127.0.0.1:7393[15]> get hello
(nil)

上面的例子中,默认的hello,world都是进入到0号数据库的,当我们使用select 15语法,会切换到15号数据库,再去get hello的时候,就会得到空值nil

当我们使用redis-cli -h {ip} -p {port}的方法连接Redis的时候,默认使用的就是0号数据库,当选择其他数据库时,会有[index]标识,index就是数据库的下表。例如上面的例子中,我们可以看到,shell中有[15]字样,这意味着我们进入到了15号数据库中。

建议:

单机多库这种方法虽然类似MySQL中的数据库一样,可以让我们自由切换,但是由于redis是单线程的,如果使用多个数据库,那么这些数据库仍然使用同一个CPU,彼此之间还是会受到影响。

因此,redis中,如果我们想要实现多个redis数据库,最好的办法是起其他实例,用单机多实例的方法来弥补,这种方法的好处是可以最大程度使用CPU资源,而且使得运维和调试功能更加简便。

flushdb和flushall命令

这两个命令都是用于清理数据库的,二者的区别是flushdb只清楚当前数据库,而flushall会清楚所有数据库,如果某个redis实例中只有1个数据库有数据,那么这两个操作是等效的。

另外,如果redis的键值数量比较多,flushdb和flushall存在阻塞redis的可能性。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档