Redis相关学习

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类型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/722522.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

商淘云成功通过中国支付清算协会备案 助力商户合规发展有序经营

2023年12月,商淘云(广州商淘信息科技有限公司)进入中国支付清算协会第五批收单外包服务机构名单,成功通过聚合支付技术服务类型机构备案。这是继2022年商淘云通过第36类(支付和投资类别)商标的又一大喜事&a…

Python Shebang(#!)中的/usr/bin/env原理(#!/usr/bin/env python3)(定位系统安装Python解释器的位置)

文章目录 Understanding the Principle of /usr/bin/env in Python Shebang(理解Python Shebang中的/usr/bin/env原理)Introduction(简介)Understanding /usr/bin/env(理解/usr/bin/env)Defining /usr/bin/…

【Lattice FPGA 开发】IP核的调用

本文介绍Diamond开发软件进行IP核调用与对应官方文档查找方法。 文章目录 1. IP核的调用1.1 IPexpress调用IP核1.2 Clarity Designer调用IP核 2. IP核相关文档查找2.1 方法一2.2 方法二2.3 方法三 3 问题 1. IP核的调用 Diamond软件中,根据所选目标FPGA器件型号的…

Golang embed 库全面解析:从基础到高级应用

Golang embed 库全面解析:从基础到高级应用 引言Golang的 embed:简化资源管理提升可移植性与便利性适用场景的拓展 embed 库的基本概念embed 库的工作原理使用 embed 的基本语法访问嵌入资源的方法embed 的限制 如何使用 embed嵌入单个文件嵌入整个目录结…

zephyr学习笔记

zephyr内核对象学习 定时器 类似linux的定时器, 可以分别设置第一次到期时间和后续的周期触发时间, 可以注册到期回调和停止回调 还有一个计数状态,用于标记timer到期了多少次 duration:设定timer第一次到期的时间。 period: …

keycloak-鉴权springboot

一、环境描述 keycloak鉴权springboot的方式,此处简单介绍,springboot官方也提供了demo https://github.com/keycloak/keycloak-quickstarts/tree/latest/spring/rest-authz-resource-server 以及文档说明 Securing Applications and Services Guide…

华为OD机试真题-提取字符串中的最长数学表达式并计算-2023年OD统一考试(C卷)---Python3--开源

题目: 考察内容: 滑动窗口 eval() 思路:先把合法字符提取出来;再从合法字符提取出合法表达式;再获取最长字符串,并运算最后结果。 代码: """ analyze: 如果没有,返…

数字逻辑与计算机组成

冯诺依曼计算机 计算机结构 计算机特点 1.采用二进制 2.程序存储 2.由五大部件组成计算机系统:运算器、存储器、控制器、输入设备和输出设备 计算机硬件系统的层次 中央处理器(CPU):运算器 控制器 计算机主机:…

CAN总线位时序的介绍

CAN控制器根据两根线上的电位差来判断总线电平。总线电平分为显性电平和隐性电平,二者必居其一。发送方通过使总线电平发生变化,将消息发送给接收方。 显性电平对应逻辑 0,CAN_H 和 CAN_L 之差为 2.5V 左右。而隐性电平对应逻辑 1&#xff0c…

阿里云搭建私有docker仓库(学习)

搭建私有云仓库 首先登录后直接在页面搜索栏中搜索“容器镜像服务” 进入后直接选择个人版(可以免费使用) 选择镜像仓库后创建一个镜像仓库 在创建仓库之前我们先创建一个命名空间 然后可以再创建我们的仓库,可以与我们的github账号进行关联…

开发知识点-Python-爬虫

爬虫 scrapybeautifulsoupfind_all find祖先/父节点兄弟节点nextpreviousCSS选择器属性值 attrsselect 后 class 正则使用字符串来描述、匹配一系列符合某个规则的字符串组成元字符使用grep匹配正则组与捕获断言与标记条件匹配正则表达式的标志 特定中文 匹配 scrapy scrapy内…

011-闭包

闭包 1、概念2、闭包应用防抖&节流 1、概念 闭包:就是能够读取其他函数内部变量的函数。 function fn1() {const num 100;return function(num1) {return num num1; // 该函数 使用了 父作用域里面的 num,所以被称为闭包} }const sumFn fn1();…

【C语言】指针超级无敌金刚霹雳进阶(但不难,还是基础)

点击这里访问我的博客主页~~ 对指针概念还不太清楚的点击这里访问上一篇指针初阶2.0 上上篇指针初阶1.0 谢谢各位大佬的支持咯 今天我们一起来学习指针进阶内容 指针进阶 一、指针变量1、字符指针变量2、数组指针变量①数组指针变量的定义②数组指针变量的初始化 3、函数指…

C++面试干货---带你梳理常考的面试题(二)

顾得泉:个人主页 个人专栏:《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂,年薪百万! 1.struct 和 class 区别 1.默认访问权限:struct中的成员默认为public,而class中的成员默认为priv…

ClickHouse安装、简介及使用

文章目录 一、简介1、什么是ClickHouse2、什么是OLAP3、列式存储特性 二、安装1、官方文档2、docker安装3、核心目录4、clickhouse-client使用 参考资料 一、简介 1、什么是ClickHouse ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。 官网:htt…

网上搞钱的方法你知道几个?盘点3个普通人都可操作的赚钱项目

项目一,微头条 我们可以借助精彩的文章,分享知识、心得和见解,吸引更多的读者关注并获得更多的点赞与评论。关键字的巧妙运用将使你的文章更具吸引力和影响力,同时也会为你带来更多的关注度和阅读量。我们写微头条文章的时候&…

2024.3.5每日一题

LeetCode 到达目的地的方案数 题目链接:1976. 到达目的地的方案数 - 力扣(LeetCode) 题目描述 你在一个城市里,城市由 n 个路口组成,路口编号为 0 到 n - 1 ,某些路口之间有 双向 道路。输入保证你可以…

LeetCode 2673. 使二叉树所有路径值相等的最小代价【贪心】1917

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

Android开发第三方库PhotoView的使用

PhotoView 是一个用于Android的第三方库,它扩展了Android的ImageView,提供了诸如捏合缩放、平移和双击缩放等交互功能。 多点触控缩放:用户可以使用两个手指捏合来放大或缩小图片。平滑滚动:当图片被放大后,用户可以拖…

python三剑客之一——Numpy

温故而知新,借着工作需要用到Numpy的机会重新学习一遍Numpy。 Numpy是一个运行速度非常快的数学库,主要用于数组计算,包含如下: 一个强大的N维数组对象ndarray【Nd(Dimension维度)array】 广播功能函数 整…