Redis相关学习

本文探讨了Redis凭借内存优势在访问速度上远超MySql,并详细介绍了Redis的关键命令如SET/GET、keys、exists、del、expire、ttl等,以及其内存管理策略和适用场景,包括作为缓存、数据库和消息队列。
摘要由CSDN通过智能技术生成

Redis 的访问速度比 MySql 快上万倍。因为Redis 在内存中使用,MySql 在硬盘上使用

Redis 和 MySql 相比最大的劣势是存储空间是有限的

redis 主要作为缓存、内存数据库、消息队列

在启动redis客户端的时候,加上--raw,可以让redis客户端将二进制翻译 redis-cli --raw

启动redis服务

redis-server /etc/redis/redis.conf

连接redis客户端

redis-cli

一、Redis的命令

1.SET和GET

set key value
get key

// key和value是字符串类型,不用必须加引号,但是加上引号也可以

//当使用get命令时,如果当前key不存在,会返回一个 nil,相当于null/NULL

//整体上说,redis是键值对结构,key 永远是字符串,value 实际上有多种数据类型

//字符串、哈希表、列表、集合、有序集合

二、全局命令

1.keys

功能:用来查询当前服务器上匹配的 key

通过一些特殊符号(通配符)来描述 key 的模样,匹配上述模样的key就能被查询出来

keys pattern
    
//pattern 包含特殊符号的字符串
//存在的意义,是去描述另外的字符串长的啥样的
        

pattern 的格式

h?llo : ?可代替任何字母,如 hello,hqllo,hxllo等

h * llo :* 表示0个或多个字符,如haallo,heeeeeello

h[bcd]llo:[bcd]表示只能匹配 b c d ,相当于给出固定选项,如hbllo,hcllo,hdllo

h[ ^e ]llo:[ ^e ]表示除了e都能匹配,如 hallo,hillo

h[a-b]llo:[a-b]表示 a 到 d 都可以,如 hallo,hbllo

*:         表示查询所有的key值

注意事项:keys命令的时间复杂度是O(N),在生产环境中,禁止使用 keys *

因为生产环境上的key非常多,而redis是一个单线程的服务器,执行keys * 的时间非常长,就使得redis服务器被阻塞,无法给其他客户提供服务

一旦redis被阻塞,其他请求就会发送的数据库了,容易把数据库搞崩,这就相当于把系统给搞崩一大半了

所以:禁止使用 keys * (十颗星级别重要 * * * * * * * * * *)

2.exists

exists key

功能:判断 key 是否存在,返回 key 存在的个数

时间复杂度:O(1),因为redis是按照哈希表的方式来组织的

exists key1 key2 key3 表式一次查询key1 key2 key3 三个key
这行命令比拆分成三天语句要快
因为此条语句只需要一次访问服务器,而拆分成三行语句,需要访问三次服务器,增加了开销
redis客户端访问redis服务器是进行网络通信的,每一次通信都需要额外的封装和分用

封装和分用:

进行网络通信的时候,发送方发送一个数据,这个数据就要从应用层到物理层,层层封装,每一层都要加上报头或者报尾

接收方接收一个数据的时候,这个数据就要从物理层到应用层,层层分用

3.del(delete)

功能:删除指定的key,可以一次删除一个或者多个

del key [key ... ]

时间复杂度也是O(1),和 exists 一样,可以同时删除多个 key

返回值是删除的key的个数

redis 主要的应用场景之一是作为缓存

如果是把redis作为缓存

redis里面存的是一个热点数据,全量数据在Mysql中,此时如果把redis里面的key删除了几个,影响是不大的

但是如果把redis里面的key被删了一大半,此时大部分的请求就直接发生到Mysql了,容易把Mysql数据库搞崩溃

相比之下,如果是Mysql中的数据,那怕删除一个,影响都是很大的

如果是把redis作为数据库

如果误删数据,此时影响就很大了

如果是作为消息队列(MQ)

如果误删数据,此时需要具体问题具体分析,

总之,永远不要误删数据

4.expire

功能:给指定的 key 设置一个过期时间,单位是秒

设置的key 必须是存在的,返回1表示设置成功,返回0表示设置失败

还可以使用 pexpire key 2 来设置,key的存活时间是2毫秒,单位是毫秒

key的存活时间超过这个指定的值,就会被自动删除

比如:手机验证码

  • 该验证码5分钟内有效,可以基于redis使用

  • 点外卖,优惠券:在指定时间之内有效

  • 基于 redis 实现分布式锁,为了避免出现不能正确解锁的情况,通常会在加锁的时候设置一下过期时间(所谓使用redis作为分布式锁,就是在redis里面写一个特殊的 key value,过期自动删除即可)

5.ttl

功能:查询过期时间,time to live

IP数据报的报头也有TTL字段,不过这里的TTL表示的是次数,IP数据报每通过一个路由器,TTL的数值减一,减为0时,丢弃此数据报

ttl key

表示剩余的过期时间,单位是秒

返回的是剩余的描述,返回-1表示没有关联过期时间,返回-2表示当前key已过期

6.redis的key的过期策略

一个redis中可能同时存在很多key,这些key中可能有很大一部分有自己的过期时间,那么redis是怎么知道那个key到过期时间了呢

删除策略:

  • 定期删除:每次抽取一部分进行验证过期时间,保证抽取检查的过程足够快,因为redis是单线程程序,所以导致正常处理请求的命令被阻塞了,所以需要定期删除key的速度足够快

  • 惰性删除:假设这个key已经到了过期时间了,但是key暂时还存在,但是紧接着后面又一次访问,正好用到了这个key,这次访问就会让redis服务器删除这个key,同时返回一个nil

但redis的过期策略又会留存一些过期的key,所以redis还提供了一系列的内存淘汰策略

7.定时器--redis并没有这样实现

在某个时间到达之后,执行指定的任务

  • 基于优先级队列/堆

  • 基于时间轮实现的定时器

8.type

返回 key 对应的 value 对应的数据类型

none、string、list、set、zset、hash、stream

在redis中,上述类型操作的方式差别很大,使用的指令完全不同

时间复杂度是O(1)

9.小结

keys:用来查看匹配规则的key

exists:用来判定指定key是否存在

del:删除指定的key

expire:给key设置过期时间

ttl:查询key的过期时间

type:查询key对应的value类型

  • 36
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于学习Redis的基础知识,可以按照以下思路进行学习: 1. 了解Redis的概念和特点:首先需要了解Redis是什么,它的主要特点是什么,它为什么被广泛应用于缓存、消息队列、会话管理等场景。 2. 安装和配置Redis:根据你的操作系统,安装Redis并进行相关配置。可以参考Redis官方文档或其他教程来完成这一步。 3. 学习Redis的数据结构:Redis支持多种数据结构,如字符串、哈希、列表、集合和有序集合等。了解每种数据结构的特点、用途和操作命令,并通过实际操作来加深理解。 4. 掌握Redis的常用命令:学习Redis的常用命令,如get、set、hget、hset、lpush、lrange、sadd、smembers等,了解每个命令的具体用法和参数含义。 5. 理解Redis的持久化机制:了解Redis的RDB和AOF两种持久化方式,以及它们的优缺点。学习如何进行备份和恢复数据。 6. 学习Redis的事务和Lua脚本:了解Redis事务的基本概念和使用方法,以及如何使用Lua脚本来进行复杂的操作。 7. 深入了解Redis的性能优化和高可用方案:学习如何优化Redis的性能,包括配置调优、使用合适的数据结构、合理地使用缓存等。同时了解Redis的高可用方案,如主从复制、哨兵模式和集群模式。 8. 学习Redis与其他技术的结合:了解Redis如何与其他技术进行结合,如与Python、Java等编程语言的配合使用,以及与Spring、Django等框架的整合。 以上是学习Redis基础知识的一个思路,你可以根据自己的实际情况和需求进行学习和拓展。推荐参考一些经典的Redis教程和实战案例,通过实际操作和项目实践来提升自己的技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值