Redis(2)常用命令
安装Redis
现在我们安装Redis 5,Redis安装在Linux上面安装,如果想在本机上面安装多个Redis的话,就要使用Docker。
在Ubuntu上面安装:
- 切换到root用户
- 使用apt命令搜索相关的软件包(apt search redis)
- apt install redis。
- 通过netstat -anp | grep redis这个指令查看redis是否安装好了。默认端口为6379
说明只能由当前主机的客户端访问,跨主机访问不了。
- 从进入cd /etc/redis进入redis的配置文件。
。
- 通过vim redis.config进行编辑把bind修改成
,再把protected mode切换成no
- 重启服务器。
- 使用redis自带的客户端连接服务器redis-cli
- ctrl+d退出客户端。
通过service redis-server status方式进行查看当前的redis状态。
配置文件的定义:一个大的软件里面有很多定制化的功能,我们可以通过开启或者关闭来定制化我们的功能。
Redis客户端
redis也是一个客户端服务器程序。也就是说redis的客户端和服务器之间是通过网络进行通信的,redis客户端和服务器可以在一个主机上,也可以不在一个主机上面。
redis自带了命令行客户端
如果想要使用其他的ip如下使用:
图形化客户端
暂时用不到,redis自带的客户端百分百能连接到我的客户端,但是图形化客户端不一定。可能会经历很多的跳板机。
基于Redis的api自行开发的客户端
后边通过java程序的api调用进行自行开发redis
Redis快:
redis的快是和mysql这种的相比比较快,但是和内存中直接操作变量相比就慢不少。
使用hashmap是直接操作内存,,而redis是通过网络再操作内存。单机系统要不要用得看情况。搞个redis可以独立存储数据,扩展分布式就要用redis。
Redis实战操作
redis服务器和客户端交互:掌握常用的命令。使用redis的文档
Redis文档
Redis最核心的命令
get(根据key取value)
要进入redis-cli命令才能用redis的命令
如果查询了一个不存在的key的话就会得到一nil(和null一个意思)。
set(把key和value存进去)
set方法的key和value都是字符串
对于上述的key和value不需要加上引号,就是表示字符串的类型,并且redis中的命令不区分大小写,redis可以就当作一个哈希表使用。
keys:看看有哪些key
pattern匹配
- ?是匹配任意字符。
- *匹配任意0个或者多个字符。
- [ae]表示匹配a或者e(给出固定选项) 。
- [^e]表示不匹配e这个字符,只要不是e都行。
- [a~e]a到e都可以,abcde都可以。
注意事项:keys命令时间复杂度是o(n),要遍历所有的o(n),在生产环境上静止使用特别是keys *,查询redis中所有的key,redis实际上执行命令只是单线程,导致执行keys时间很长,导致redis被阻塞。
Redis经常用作缓存,是替mysql负重前行的人,如果redis被阻塞了,其他访问数据库的线程就会直接访问mysql。mysql由于一大堆请求过来容易挂掉。
exists:判断key是否存在
返回值是key存在的个数(针对多个key)。o(1)复杂度。
redis组织key的形式是以哈希表的形式。哈希表查询的复杂度是o(1)。
redis支持很多数据结构,就是value有很多数据结构。
通过exists加上key的形式看有几个value。
封装和分用:
进行网络通信要经历应用层到物理层层次层封装(类似于装快递),接收方要从物理层层层分用(类似于收快递拆快递)。
客户端和服务器不在一个主机上,可能隔着比较远,那么客户端发起的redis请求 。所以redis尽量一次命令操作多个key。
del(delete删除指定的key)
可以删除一个或者多个,可以存在可能不存在,时间复杂度是o(1)。他的返回值也是删除的个数。删除成功几个返回几个。redis中的del相比mysql中的删除危险性少了很多,redis实际上经常是作为缓存,redis只是存一个热点数据,在mysql中也存了一份。
但是不要全删了,会导致数据库的访问量剧增。
EXPIRE(秒)(给指定的key设定过期时间)
此时设置的key要对已经存在的key进行设置
此时等待过期之后就发现没有了。
key的存活时间超过指定时间会被删除(手机验证码),验证码超过多久就失效,生成验证码的时候同时设定过期时间,存储在redis中,如果超过的话就删去。
基于redis实现分布式锁,使用的时候,避免出现不能正确解锁的时候,就在加锁的时候进行加上一个过期时间,即使出现极端情况,过期删去key value的时候就相当于被解锁了。
ttl(time to live)
pttl和ttl一样
查看当前key的过期时间还剩下多少
当返回-1的时候代表没有设置过期时间,-2表示key不存在。
type
返回key所对应的value的类型,比如这里的lpush左侧插入key6一个数组111,222,这时候返回的type类型就行list。时间复杂度o(1)。
生产环境(线上环境):
未来在工作中会遇到的几个环境
开发环境:直接在我的笔记本上面开发,有可能在服务器。
测试环境:实际上和开发环境差不多,也可能在服务器。
线上环境:外界用户能访问到的,线上挂了,一定会对用户访问产生问题。
redis针对key的过期策略如何实现(面试题):
一个redis中存在很多key,很多都有过期时间,redis怎么知道哪些要过期被删除,哪些不用被删除。key很多的话,遍历所有的key就不合适。
定期删除:
每次抽取一部分进行验证过期,保证抽取检查过程足够快。
redis是一个单线程,主要的任务都是在主线程之中完成,如果抽取检查的时间太长了,那么处理命令的就会被阻塞了。
惰性删除:
假设key已经到时间了,但是暂时还没删除,紧接着后面有一次访问,发现key过期了,所以这次访问就会使得redis触发删除,同时返回空值。
redis为了对定期删除删除不干净,还使用了一系列的内存淘汰机制。
强制删除(内存淘汰机制):
如果redis使用的内存已经达到maxmemory
配置的值时,会触发强制清理策略。
定时器(拓展,redis都没有采取)
基于优先级队列(按照指定的优先级)
在redis中就可以通过过期时间越早,优先级越高,很多的key都设置了时间,过期时间早,就先出任务。此时就要扫描队首元素。扫描的时候不可能一直使用while,不然就会忙等,等待队首时间快到了,就进行唤醒。如果有一个新的任务的话,就唤醒一下刚刚的线程,重现检查一下队首元素,再根据时间差距调整阻塞时间。
基于时间轮
把时间轮划分成很多小段 ,每次到时间就会滚到响应的时间尝试执行,进行循环放置。到时间了就放置,没到时间就循环放置。如果时间太长,就会一圈一圈循环,直到找到。
相关文章:

Redis(2)常用命令
安装Redis 现在我们安装Redis 5,Redis安装在Linux上面安装,如果想在本机上面安装多个Redis的话,就要使用Docker。 在Ubuntu上面安装: 切换到root用户使用apt命令搜索相关的软件包(apt search redis)apt …...

【原生js案例】ajax的简易封装实现后端数据交互
ajax是前端与后端数据库进行交互的最基础的工具,第三方的工具库比如jquery,axios都有对ajax进行第二次的封装,fecth是浏览器原生自带的功能,但是它与ajax还是有区别的,总结如下: ajax与fetch对比 实现效果 代码实现 …...

安卓环境配置及打开新项目教程,2024年12月20日最新版
1.去官网下载最新的Android Studio,网址:https://developer.android.com/studio?hlzh-cn 2.下载加速器,注册账号,开启加速器。网址:放在文末。 3.下载安卓代码,项目的路径上不能有中文,特别是…...

Docker 安装 禅道-21.2版本-外部数据库模式
Docker 安装系列 1、拉取最新版本(zentao 21.2) [rootTseng ~]# docker pull hub.zentao.net/app/zentao Using default tag: latest latest: Pulling from app/zentao 55ab1b300d4b: Pull complete 6b5749e5ef1d: Pull complete bdccb03403c1: Pul…...

写SQL太麻烦?免费搭建 Text2SQL 应用,智能写 SQL | OceanBase AI 实践
自OceanBase 4.3.3版本推出以来,向量检索的能力受到了很多客户的关注,也纷纷表达希望OB能拓展更多 多模数据库大模型 的AI应用实践。 在上篇文章 👉 OceanBase LLM,免费构建你的专属 AI 助手 ,我们介绍了如何去搭建一…...

数据分析实战—鸢尾花数据分类
1.实战内容 (1) 加载鸢尾花数据集(iris.txt)并存到iris_df中,使用seaborn.lmplot寻找class(种类)项中的异常值,其他异常值也同时处理 。 import pandas as pd from sklearn.datasets import load_iris pd.set_option(display.max_columns, N…...

【专题】2024抖音电商母婴行业分析报告汇总PDF洞察(附原数据表)
原文链接:https://tecdat.cn/?p38651 在数字化浪潮的席卷下,抖音电商母婴行业正经历着深刻变革。当下,年轻一代父母崛起,特别是 24 至 30 岁以及 18 至 23 岁的群体成为抖音母婴行业兴趣人群的主力军。他们带来全新育儿理念&…...
堆栈粉碎的原理与预防攻击措施
1、堆栈粉碎的原理 “堆栈粉碎”(stack smashing)指的是在计算机程序中利用缓冲区溢出漏洞来修改或破坏函数调用栈的过程。以下是其基本原理: 缓冲区溢出:当程序接收输入数据时,如果没有适当的边界检查和验证&#x…...

Flutter组件————AppBar
AppBar 是 Flutter 中用于创建应用程序顶部栏的组件,它遵循 Material Design 规范。 参数: 参数名称类型描述titleWidget设置 AppBar 中的标题文本或自定义标题小部件。automaticallyImplyLeadingbool决定是否自动添加返回按钮(如果页面不是…...

请问深度学习直接缝了别的模型,在论文中这种创新点应该如何描述呢?
作者:星辰 链接:https://www.zhihu.com/question/599461738/answer/3289126344 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 作为散养硕士,我们希望能早早发小论文,…...

微流控专题 | 微流体应用说明——藻酸盐微球生产简介
基于水凝胶的递送系统正被越来越多地应用于各个领域,包括封装、保护以及在制药、保健品、食品工业中释放生物活性物质,还用于细胞/细菌/微生物的培养与植入,以及生物研究中基于细胞的基因操作。 尺寸在 50m 范围内的高度单分散的藻酸盐微球 —…...

【前后端】HTTP网络传输协议
近期更新完毕,建议关注、收藏! http请求 URL 严格意义上应该是URI http or https http不加密不安全;https加密协议(公网使用) http端口号80 https端口号443GET or POST GET和POST是HTTP请求的两种基本方法. 因为POST需…...

Fastdfs V6.12.1集群部署(arm/x86均可用)
文章目录 一、 Fastdfs 介绍二、部署 信息三、步骤tracker/storage 机器的 compose 内容storage 机器的 composetracker 与 storage 启动目录层级与配置文件测试测试集群扩容与缩减注意事项 一、 Fastdfs 介绍 FastDFS 是一款高性能的分布式文件系统,特别适合用于存…...

【LeetCode每日一题】——434.字符串中的单词数
文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【时空频度】八【代码实现】九【提交结果】 一【题目类别】 字符串 二【题目难度】 简单 三【题目编号】 434.字符串中的单词数 四【题目描述】 统计字符串中的单词个…...
windows C#-使用构造函数
实例化类或结构时,将会调用其构造函数。 构造函数与该类或结构具有相同名称,并且通常初始化新对象的数据成员。 在下面的示例中,通过使用简单构造函数定义了一个名为 Taxi 的类。 然后使用 new 运算符对该类进行实例化。 在为新对象分配内存…...
[react]redux异步处理和重写useDispatch
异步代码 import { createAsyncThunk, createSlice } from reduxjs/toolkit; import { getBanner } from ../http/request; import store from /store; export const fetchBanner createAsyncThunk(recommend/banners,async (args, thunkAPI) > {const response await ge…...
基础数据结构---栈
顺序表实现 一、栈类的声明 栈是一种特殊的线性表,可以由顺序表来实现,也可以由链表来实现,这节课,我们采用顺序表来实现栈。 #include <iostream>#include <stdexcept>using namespace std;template<typename …...

【HarmonyOS之旅】DevEco Studio的安装与环境配置
目录 1 -> 下载与安装DevEco Studio 1.1 -> 运行环境要求 1.2 -> 下载和安装DevEco Studio 2 -> 配置环境变量 3 -> 配置开发环境 4 -> 开发项目准备 5 -> 实用小技巧 5.1 -> 中文插件 2 -> 简化工程目录栏 1 -> 下载与安装DevEco Stud…...

Liveweb视频融合共享平台在果园农场等项目中的视频监控系统搭建方案
一、背景介绍 在我国的大江南北遍布着各种各样的果园,针对这些地处偏僻的果园及农场等环境,较为传统的安全防范方式是建立围墙,但是仅靠围墙仍然无法阻挡不法分子的有意入侵和破坏,因此为了及时发现和处理一些难以察觉的问题&…...

Android4.4 在系统中添加自己的System Service
添加系统service时,源码限制只能添加以android开头的包名,如果不是android开头的,编译时会提示找不到对应的文件。 比如说在系统中添加一个包名为:tel.gateway.connservice的系统服务。 1.在framework/base目录下面创建如下路径&a…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...

用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...

MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...

Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...