当前位置: 首页 > news >正文

浅谈Redis和一些指令

浅浅谈一谈Redis的客户端

Redis客户端

Redis也是一个客户端/服务端结构的程序。

MySQL也是一个客户端/服务端结构的程序。

Redis的客户端也有多种形态

1.自带命令行客户端

redis-cli

2.图形化界面的客户端(桌面程序,web程序)

像这样的图形化程序,依赖 windows 系统.而未来在实际工作中,你用来办公的 windows 系统,连接到服务器可能会有诸多限制,你的 windows 上的图形化界面客户端能不能连上你们的服务器里的 redis, 是个未知数!!!(和 mysql 同理)

中间可能会经历很多的跳板机,堡垒机,权限校验。

3.基于redis的api自行开发客户端(工作中最主要的形态)

非常类似于MySQL的C语言API和JDBC

同样是存储键值对数据,用Redis和 hash map的优劣

使用hash map是可以直接操作内存的。

使用Redis是先通过网络然后操作内存的

Redis中最核心的两个命令:

Redis是按照键值对的方式存储数据。

get根据key来取value

set把key和value存储进去。

必须要先进入redis-cli 客户端程序,才能输入redis指令

这里的key和value都是字符串。

对于上述这里的key 和 value ,不要加上引号,就是字符串的类型。

当然加上引号也是可以的,单引号与双引号都行。

Redis的命令是不区分大小写的,也就和MySQL类似。

当输入get命令的时候,如果当前的key不存在,会返回一个nil,和null/NULL同理。

Redis全局命令

全局命令,就是能够搭配任意一个数据结构来使用的命令

Redis支持很多种数据结构,整体上来说,Redis是键值对结构,key固定是字符串,value实际上会有多种类型。(字符串,哈希表,列表,集合,有序集合)

操作不同的数据结构就会有不同的命令。

keys 用来查询当前服务器上匹配的key

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

语法: keys pattern

此中,pattern是包含特殊符号字符串。

规则大致如下

当然,keys命令的时间复杂度为O(N)

所以在生产环境上,一般都会禁止使用keys命令,尤其是keys *

原因是生产环境上的key可能会特别的多,而redis是一个单线程的服务器。执行keys * 的时间非常的长,就是redis服务器被阻塞了,无法给其他的客户端提供服务。

redis经常会用于做缓存,挡在MySQL前面,替MySQL负重前行的家伙,

万一redis被一个keys * 阻塞住了,此时其他的查询redis操作就会超时,此时这些请求就会直接查询数据库,然后突然一大波请求过来了,MySQL就会措手不及,就挂掉了。

导致整个系统瘫痪了。

exists 判定key是否存在

语法:exists key / [key ...]

返回值:key存在的个数

键值对存储的体系中(类似哈希表)

key得是唯一的

所以这个返回值返回一个非0/1数是对于多个key来说的。

时间复杂度为O(1),也可以说是O(N),如果是N,就是指key的个数。

redis组织这些key就是按照哈希表的方式来组织的。

redis的value可以是多种数据结构,本身又是一个通过哈希表的方式来组织的。

如果我们有两个名分别为hello和hallo的key,我们执行以下两组命令。

exists hello hallo

exists hello

exists hallo

这里虽然能让我们知道的结果是一样的,但是其实区别还是很大的。

原因:

redis 是一个客户端/服务器结构的程序,客户端和服务端之间通过网络来进行通信。

分开的写法会产生更多的网络通信,效率会比较低,且成本比较高。

当然这里的效率和成本是与内存进行相比。

封装和分用

进行网络通信的时候,发送方发送一个数据,这个数据就要从应用层到物理层,层层封装。

(每一层协议都要加上报头和报尾)

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

(把每一层协议中的报头或者报尾给拆掉)

跟发快递和收快递相似。

网卡是IO设备,速度上是和内存没法相提并论的。

更何况,客户端和服务器不一定在同一台主机上,中间可能还相隔十分远。

redis也很清楚上述的问题,所以redis的很多命令都是支持一次就能操作多个key /多种操作。

del

删除指定的key(可以一次删除一个或多个)

语法:del key [key...]

时间复杂度为O(1)

返回值:删除掉的key的个数

这里还是提个问题,这个del命令是否具有像MySQL一样的危险程度?

一般来说,危险程度还是比较小的,由于redis的一个主要场景是作为缓存,此时的redis存放的是热点数据,全量数据存放在MySQL当中,此时,如果把redis中的key删除了几个,一般来说问题是不大的。

相比之下,如果是MySQL这样的数据被删除,可能影响是巨大的。

但是如果redis作为数据库,此时误删的影响就很大了。

如果是把redis作为消息队列(mq) 这种需要具体问题具体分析。

expire

给指定的key 设置过期时间    ---   key存活时间超过这个指定的值,就会被自动删除。

语法: expire key seconds(秒)

很多业务场景,是有时间限制的。   经典的是---手机验证码。

eg:点外卖---优惠券  在指定的时间内有效  这个场景也是可以使用expire来实现

基于redis 实现分布式锁   ---  为了避免出现不能正确解锁的情况,通常都会在加锁的时候设置一个过期时间。

在使用expire的时候,还是有个小问题,这个单位也是一个小问题,对于计算机来说,秒这个单位是非常长的。

那么就可以使用底下类似命令。

pexpire key 毫秒

时间复杂度为O(1)

返回值:1 表示设置成功,0 表示设置失败。

生产环境(线上环境)

未来工作中会涉及到的几个环境

1.办公环境,可能是一台笔记本电脑

2.开发环境,有的时候,开发环境和办公环境是同一个,有的时候,开发环境是一个单独的服务器。

PS:做前端/客户端,一般来说,开发环境就是办公环境

做后端,很可能是一个单独的服务器。

有的后端程序比较复杂

1.编译一次时间特别长(C++) -> C++ 23 才会引入module(#include接锅)

所以会使用一些高性能的服务器进行编译。

2.有的程序一启动,就要消耗很多的CPU和内存资源

3.有的程序比较依赖Linux,在windows环境搭建不起来

3.测试环境(测试工程师使用)

以上统称为线下环境,外界用户无法访问到。

4.线上环境/生产环境

线上环境,外界用户是可以访问到的。

一旦生产环境出现问题,一定会对用户的使用产生影响。

相关文章:

浅谈Redis和一些指令

浅浅谈一谈Redis的客户端 Redis客户端 Redis也是一个客户端/服务端结构的程序。 MySQL也是一个客户端/服务端结构的程序。 Redis的客户端也有多种形态 1.自带命令行客户端 redis-cli 2.图形化界面的客户端(桌面程序,web程序) 像这样的图形…...

AI大模型探索之路-应用篇1:Langchain框架概述—快速构建大模型应用

目录 一、什么是LangChain? 二、LangChain解决了哪些问题? 三、LangChain总体架构 四、代码实践样例 总结 一、什么是LangChain? 为大模型应用提供简便之道。 LangChain,专为构建庞大的语言模型应用程序设计的框架&#xff0…...

Google Chrome 常用设置

Google Chrome 常用设置 References 转至网页顶部 快捷键:Home 转至内容设置 chrome://settings/content 清除浏览数据 历史记录 -> 清除浏览数据 关于 Chrome 设置 -> 关于 Chrome chrome://settings/help References [1] Yongqiang Cheng, https:/…...

如何提高旋转花键运行稳定性?

现代化精密仪器设备中,精密仪器的稳定工作性能对于生产效率和产品质量至关重要,运行效率和精度是常见问题。旋转花键作为机械传动系统中的重要组成部分,其稳定性也是直接影响到机械装配的质量和使用寿命,那么我们应该如何提升旋转…...

每日一题 第八十七期 洛谷 [蓝桥杯 2018 省 AB] 全球变暖

[蓝桥杯 2018 省 AB] 全球变暖 题目描述 你有一张某海域 N N N \times N NN 像素的照片,. 表示海洋、 # 表示陆地,如下所示: ....... .##.... .##.... ....##. ..####. ...###. .......其中 “上下左右” 四个方向上连在一起的一片陆地组…...

AI技术创业有哪些机会?

文章目录 ✍探索AI技术创业的机会与挑战💎引言💎AI技术的快速发展与应用💎🌹AI技术创业的机会与方向🌹1. 行业解决方案🌹2. 智能产品和服务🌹3. 教育和培训 💎AI技术创业的挑战与应对…...

TensorFlow学习之:基础概念和操作

TensorFlow简介 TensorFlow是一个开源的深度学习框架,由Google的研究团队Google Brain Team开发,并在2015年发布。它是基于DistBelief,Google之前的一个深度学习项目,但被重新设计以便更灵活、更强大、更适应于研究和生产。 历史…...

最新在线工具箱网站系统源码

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 系统内置高达72种站长工具、开发工具、娱乐工具等功能。此系统支持本地调用API,同时还自带免费API接口, 是一个多功能性工具程序,支持后台管理、上…...

c# InvokeRequested delegate解决线程访问界面

说明 界面操作的代码应该写在界面(Form/Dialog)里 方法定义 private void Method1(string s) {...... }delegate定义 private delegate void Method1Delegate(string s);界面调用代码 private void op(){string sText"hello";if (this.In…...

使用 Web Workers 作为setInterval的替代方案

使用 Web Workers 作为setInterval的替代方案 在 Vue 项目中,为了避免 setInterval 在标签页非激活状态下的不准确问题,我们可以使用 Web Workers 作为一个替代方案 Web Worker 介绍: Web Workers : 浏览器后台为网页运行的一个小助手&…...

python实现将日期文本化

环境:python3.8.10 需要:有些时候,需要在一段文本的后面,添加上日期,尤其是文本重复的情况下,添加上每天的日期更为重要。 代码实现: import datetimetodaydatetime.date.today() date_textto…...

react ant design 通过函数弹出 modal窗口

在React Ant Design中,可以通过调用Modal组件的方法来动态弹出和关闭Modal窗口。具体步骤如下: 1、首先,在组件中引入Modal组件: import { Modal } from antd;2、在组件中定义一个函数来弹出Modal窗口: const showM…...

力扣刷题Days33-209. 长度最小的子数组(js)

目录 1,题目-滑动窗口 2,代码 滑动窗口 3,学习与总结 1,题目-滑动窗口 给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1,…...

面对DDOS攻击,有哪些解决办法

随着互联网带宽的持续增长以及DDOS黑客技术的发展,DDOS拒绝服务攻击的实施变得愈发容易。商业竞争、打击报复、网络敲诈等多种因素,各行各业的用户都曾受到DDOS攻击的威胁。 一旦遭受到DDOS攻击,随之而来的就是业务宕机,用户无法…...

C++ GDAL提取多时相遥感影像中像素随时间变化的数值数组

本文介绍基于C语言GDAL库,批量读取大量栅格遥感影像文件,并生成各像元数值的时间序列数组的方法。 首先,我们来明确一下本文所需实现的需求。现在有一个文件夹,其中包含了很多不同格式的文件,如下图所示。 其中&#x…...

免费-华为od-C卷-javascript-动态规划-贪心歌手.js

动态规划-贪心歌手 还有很多其他题,链接是github, 进去可以查看对应文件夹就行...

elementui 实现一个固定位置的Pagination(分页)组件

系列文章目录 一、elementui 导航菜单栏和Breadcrumb 面包屑关联 二、elementui 左侧导航菜单栏与main区域联动 三、elementui 中设置图片的高度并支持PC和手机自适应 四、 elementui 实现一个固定位置的Pagination(分页)组件 文章目录 系列文章目录…...

紧急备考全攻略,如何短期通过PMP考试?

今年身边有很多同事朋友都要考PMP,而我属于这些人里”第一个吃螃蟹“的人,一次拿下5A,下面分享一下我自己备考PMP的经验。 我是根据自己的学习计划复习的,不能说这些方法适合所有人,但对备考的伙伴们来说,…...

python开发poc,fofa爬虫批量化扫洞

学习使用python做到批量化的漏洞脚本 1.通过fofa搜索结果来采集脚本 2.批量化扫描漏洞 ---glassfish存在任意文件读取在默认48484端口,漏洞验证的poc为: "glassfish" && port"4848" && country"CN" http://loca…...

适用于 Windows 10 的 10 大免费数据恢复软件

数据丢失可能是一场噩梦,尤其是在涉及重要文件和文档时。无论是由于意外删除、系统崩溃还是病毒攻击,找到适合 Windows 10 的文件夹恢复软件都可以在恢复丢失的数据方面发挥重要作用。在本指南中,我们将探索适用于 Windows 10 用户的 10 大免…...

zabbix企业级监控平台

zabbix部署 安装源 重新创建纯净环境,利用base克隆一台虚拟机server1 给server1做快照,方便下次实验恢复使用 进入zabbix官网https://www.zabbix.com rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm …...

如何关闭WordPress的自动更新功能

Wordpress为什么自动更新 WordPress自动更新是为了提供更好的安全性和稳定性。 安全性:WordPress是一个广泛使用的内容管理系统,因此成为恶意攻击的目标。WordPress的自动更新功能确保你的网站及时获得最新的安全补丁和修复程序,以保护你的网…...

【分析 GClog 的吞吐量和停顿时间、heapdump 内存泄漏分析】

文章目录 🔊博主介绍🥤本文内容GClog分析以优化吞吐量和停顿时间步骤1: 收集GClog步骤2: 分析GClog步骤3: 优化建议步骤4: 实施优化 Heapdump内存泄漏分析步骤1: 获取Heapdump步骤2: 分析Heapdump步骤3: 定位泄漏对象步骤4: 分析泄漏原因步骤5: 修复泄漏…...

[STL-list]介绍、与vector的对比、模拟实现的迭代器问题

一、list使用介绍 list的底层是带头双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行…...

代码随想录-035期-算法训练营【博客笔记汇总表】

ヾ(◍∇◍)ノ゙加油~ 目录 00、说明 01、刷题网址 02、每日打卡任务 03、博客打卡笔记 01、数组 02、链表 03、哈希表 04、字符串 05、双指针法 06、栈与队列 07、二叉树 08、回溯算法 09、贪心算法 10、动态规划 11、单调栈 12、图论 04…...

postgresql数据库|数据整合的好工具--Oracle-fdw的部署和使用

概述 Oracle_fdw 是一种postgresql外部表插件,可以读取到Oracle上面的数据。是一种非常方便且常见的pg与Oracle的同步数据的方法 Oracle_fdw 适用场景: Oracle_fdw 是一个开源的 Foreign Data Wrapper (FDW),主要用于在 PostgreSQL 数据库中…...

让php开发更优雅-Laravel篇

前言 随着开发经验的增加,也伴随团队开发的积累,规范开发显得越来越重要,本文给大家提供一些laravel开发的进阶思路和经验,让大家开发更加统一规范,代码看起来更加优雅。 1.更多使用第三方库。团队开发的时候&#xf…...

自动化测试之httprunner框架hook函数实操

本篇介绍httprunner中hook函数的使用,以及通过编程能力实现建设自动化测试更全面的场景覆盖 前置: 互联网时代让我们更快的学习到什么是Httprunner 正文: 经过上文了解到这个框架怎么使用之后,我们开始来探讨一下我们为什么要用…...

物联网实战--入门篇之(七)嵌入式-MQTT

目录 一、MQTT简介 二、MQTT使用方法 三、MQTT驱动设计 四、代码解析 五、使用过程 六、总结 一、MQTT简介 MQTT因为其轻量、高效和稳定的特点,特别适合作为物联网系统的数据传输协议,已经成为物联网事实上的通信标准了。关于协议的具体内容看看这…...

跑模型——labelme的json文件转成yolo使用的txt文件(语义分割)

前言 将labelme多边形标注的json文件转换成yolo使用的txt文件 import os import json import numpy as np from tqdm import tqdm#实现函数 def json2txt(path_json, path_txt): # 可修改生成格式with open(path_json, r) as path_json:jsonx json.load(path_json)with open…...