Redis — 不仅仅是缓存

news2024/10/6 5:23:13
04452bd23d260448ddc1b4cca828101e.png
1*qIy3PMmEWNcD9Czh_21C8g.png

Redis是一种快速、开源的内存键值(NoSQL)数据库,远远超越了缓存的功能。Redis使用RAM进行操作,提供亚毫秒级的响应时间,支持每秒数百万次请求。Redis主要用于缓存,但它也可以作为那些数据不经常变化的应用程序的主要数据库。Redis内置了复制、服务端脚本(使用Lua脚本)、LRU驱逐、定时过期和事务支持。

Redis的用例包括:

•数据投影服务•临时消息代理•事件溯源系统

注意:Redis是使用C语言编写的。

Redis为什么快?

•Redis是基于RAM的。RAM访问速度比随机磁盘访问快。•使用IO多路复用和单线程执行循环来提高执行效率。•使用高效的底层数据结构(SDS、ZipList、SkipList、分层索引)。

Linux安装步骤

创建文件/etc/yum.repos.d/redis.repo,内容如下:

[Redis]
name=Redis
baseurl=http://packages.redis.io/rpm/rhel7
enabled=1
gpgcheck=1

然后运行以下命令:

curl -fsSL https://packages.redis.io/gpg > /tmp/redis.key
sudo rpm --import /tmp/redis.key
sudo yum install epel-release
sudo yum install redis-stack-server

高级CLI命令

$ redis-cli


INFO - 获取有关集群的信息
SELECT - 选择命名空间/数据库
DBSIZE - 获取键的数量
KEYS * - 列出所有键(模式匹配)(优先使用SCAN命令)
SCAN - 用游标返回结果的子集
EXISTS - 检查键是否存在
TYPE - 检查键的数据类型
EXPIRE - 设置键的过期时间
RENAME - 将键重命名为新名称
FLUSHDB - 清除命名空间中的所有键
FLUSHALL - 清除所有命名空间中的所有键
ROLE - 检查节点角色(主节点、从节点、哨兵节点)
CLEAR - 清除CLI上下文终端
QUIT - 退出CLI


# redis-cli --pipe #从文件或stdin流式传输命令到Redis
# redis-cli --hotkeys #查找热键

关于一些命令的几点说明

•Redis数据库是创建键的逻辑方式,用于创建键的隔离和命名空间。默认情况下,Redis有0-15个数据库索引。在集群模式下,这些数据库不存在。

SELECT index_no

•以下命令通常会添加

后缀。这些命令根据键的存在与否采取不同的行为。

NX - 如果不存在
XX - 如果存在

注意:通常在命令前加上"M"表示多,例如MGET与GET。类似地,在命令前加上"P"表示基于模式的命令。

•KEYS命令是顺序的(O(n))和同步的(阻塞的)。在应用程序中,优先使用SCAN而不是KEYS。

RedisInsight - 这是一个与Redis服务器交互的用户界面工具。

支持的数据结构

8b1889f3d95a7b6137ccfb575a6c6e53.png
1*f96hoFTEAiCt2jCF-s7EmA.png

String(字符串)

•最基本和常见的Redis数据类型•Redis字符串存储字节序列•最大大小为512 MB

SET | GET | DEL
INCR | INCRBY | INCRBYFLOAT
MSET | MGET


注意:DEL是阻塞的,而UNLINK是非阻塞的

List(列表)

b1c9d7e20d3f96d590365ce99d2a79e8.png
1*-DoC-iO1T8qRKUgd9mEG5A.png

•字符串值的链表•元素的集合•每个元素都是一个字符串•可以包含超过40亿个元素•元素顺序基于插入顺序•编码和内存优化

LPUSH | LRANGE | RPUSH | LPOP | RPOP | LLEN
LTRIM | LINDEX | LINSERT | LSET | LPOS | LREM

Set(集合)

•Redis集合是一组无序的唯一字符串(成员),用于跟踪唯一元素。

SADD | SREM | SCARD | SMEMBERS | SDIFF | SDIFFSTORE
SISMEMBER | SMISMEMBER | SMOVE | SPOP

Hash(哈希)

ba71f6445e3dd5afef4de8e4deb08cd4.png
1*nBB3vFuBYooNrPuS-Fnz9Q.png

•Redis哈希是作为字段-值对集合结构化的记录类型。每个哈希可以存储多达42亿个(2^32-1)个字段-值对。哈希可用于在应用程序中存储会话和个人资料。

HSET | HGET | HGETALL | HDEL | HEXIST | HMSET | HMGET

Sorted Set(有序集合)

3e2367a5033bcd1c0e3a88f7b400ef83.png
1*CkISVoBW8dIyC4YOu9005Q.png

•Redis有序集合是一组唯一字符串(成员),按相关分数进行排序的集

合。它可以用于排行榜、优先级队列、二级索引和速率限制器。

ZADD | ZCARD | ZSCORE | ZRANK | ZREVRANK | ZREM | ZRANGE

HyperLogLog

HyperLogLog是一种用于估计集合基数的数据结构。它可用于跟踪唯一访问者数量。HyperLogLog的实现使用了多达12KB的空间。PFADD | PFCOUNT | PFMERGE

Streams

4cad75ca804e74a637e8e23e14584a20.png
1*8NRb5TeJ34Jf08do8OzGxg.png

Redis流是一种类似追加日志的数据结构。您可以使用流记录和同时传播实时事件。

XADD | XREAD | XTRIM | XDEL

XGROUP CREATE | XGROUP DESTROY | XREADGROUP

XGROUP CREATECONSUMER | XGROUP DELCONSUMER

Redis Streams允许At-most-once或At-least-once的消息传递。Redis Streams支持同步和异步读取。

Bitmap

Redis位图是字符串数据类型的扩展,它允许您将字符串视为位向量。

BITOP | BITPOS | BITCOUNT

680d5785f5cc0fdb562503e01734547f.png
1*QZ7buW1SRfDIeccgmiXxGw.png

图片来源 — bytebytego.com

Bitfield

Redis位字段允许您设置、增加和获取任意位长度的整数值。

Geospatial

Redis地理空间索引允许您存储坐标并进行搜索,查找给定半径或边界框内的附近点。GEOADD | GEODIST | GEORADIUS | GEOSEARCH | GEOPOS

•Redis使用Haversine公式计算距离。•Redis将地理空间点存储在有序集合中。集合的分数用于编码坐标对。

Key Expiration

ad9c4d4c86a186f2f3d7421e246b5109.png
1*tf8z_SgKoz69y4sXtpwIxg.png

EX — 指定秒数后过期

PX — 指定毫秒数后过期

EXAT — 指定时间戳后过期(秒)

PXAT — 指定时间戳后过期(毫秒)

TTL — 键的剩余生存时间(近似值)

PERSIST — 移除当前的过期时间

Pipelining

Redis遵循客户端-服务器模型。客户端发送请求,服务器处理请求并返回响应。吞吐量主要由往返时间(通常在毫秒级别,请求处理通常在微秒级别)决定。Redis流水线是一种提高性能的技术,它可以一次性发出多个命令,而无需等待每个单独命令的响应。这是一种网络优化,因为我们减少了客户端和服务器之间的多次往返。

5d2d42c892d5d3db37790619a18526d6.png

注意:1. 管道不保证命令执行顺序。2. 在管道中不允许在写操作之后进行读操作,因为所有命令的结果将在最后一起返回。3. 在进行管道操作时,需要使用哈希标记(hash-tags),以便将键强制映射到同一个分片上。4. 管道不是原子性的。5. Python库中的管道被包装在MULTI/EXEC中。

Scripting

调用服务器端Lua脚本的执行。

SCRIPT LOAD | FUNCTION LOAD | EVAL | FCALL | FUNCTION KILL | SCRIPT KILL

注意:Lua脚本是原子的且是阻塞的。

Pub/Sub

Redis通过发布/订阅机制提供了一种解耦的消息传递范式。发布者将消息发送到频道,订阅者确认对一个或多个频道感兴趣,并接收感兴趣的消息。

e11ab6294195085d285ca4bc624b67c2.png
1*tV8vZ9MMnYPok7PiTKKjyQ.png

SUBSCRIBE | PUBLISH | PUBSUB CHANNELS | UNSUBSCRIBE

注意:发布/订阅与键空间无关。

事务

Redis事务允许将一组命令作为单个步骤执行,它们围绕以下命令展开:

MULTI — 事务的开始

EXEC — 事务的结束

DISCARD — 取消事务

WATCH — 持续监视键是否在我们开始监视后被修改

79b633a77f4bbccdecfdad35016627f4.png
1*mLHM_sFayUdEoT3AOKs5tg.png

UNWATCH 事务中的所有命令都是串行化执行的。在Redis事务的执行过程中,不会在执行Redis事务的过程中为另一个客户端服务。

持久化

在Redis中,如果启用持久化,数据会被持久化到磁盘。重新启动时,它会将数据加载到内存中进行计算。

dbbca7db45fff7fef9042c381b6e843d.png RDB — 在特定间隔的特定时间点进行快照AOF — 记录每个写操作的日志,每秒同步一次,后台线程,在恢复时回放日志 注意:您可以通过发出BGSAVE命令手动进行快照。

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

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

相关文章

【CSS】文字渐变色

CSS设置文字渐变色 background-image: -webkit-linear-gradient(bottom,red,#fd8403,yellow); -webkit-background-clip: text; // 设置背景作用域 -webkit-text-fill-color: transparent;

docker数据卷权限管理--理论和验证

一、Docker容器中用户权限管理 Linux系统的权限管理是由uid和gid负责,Linux系统会检查创建进程的uid和gid,以确定它是否有足够的权限修改文件,而非是通过用户名和用户组来确认。 同样,在docker容器中主机上运行的所有容器共享同一…

【DC系列06】DC-6靶机复盘

【DC系列06】DC-6靶机复盘 我们打开这个靶机后首先还是先对靶机进行一个ip扫描,然后再单独对这个ip进行一个全局扫描。 扫描后ip地址是192.168.102.147。 我们再单独扫描一下 nmap -A 192.168.102.147 -p-这个靶机有一个特点就是扫描到ip后,你需要往…

vulnhub靶机渗透:PWNLAB: INIT

PWNLAB: INIT 靶机环境介绍nmap扫描端口扫描服务扫描漏洞扫描扫描总结 80端口目录爆破LFI利用 3306端口回到80端口文件上传 获得立足点横向移动提权总结参考 靶机环境介绍 https://www.vulnhub.com/entry/skytower-1,96/ 靶机IP:192.168.56.103 kali IP&#xff…

OceanBase 特殊的 INT 与时间类型隐式转换问题

本文作者分享了Oceanbase时间与数值类型隐式转换导致查询结果不符合预期或“不正确”问题的排查思路。 作者:任仲禹 爱可生 DBA 团队成员,擅长故障分析和性能优化,文章相关技术问题,欢迎大家一起讨论。 本文来源:原创投…

create-react-app -V 报错无法将“create-react-app”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

create-react-app -Vcreate-react-app : 无法将“create-react-app”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果 包括路径,请确保路径正确,然后再试一次。 所在位置 行:1 字符: 1 + create-react-app -V + ~~~~~~~~~~~~~~~~+ CategoryInfo …

移动端 van-datetime-picker 组件不支持选择秒,自己写组件支持选择 “年月日时分秒”

需求 使用 van-datetime-picker 组件写时间选择时&#xff0c;不支持选择 “秒” 要求能够选择精确到秒 代码 封装组件 TimePicker <template><div><!-- 弹出层 --><van-popup get-container"body" v-model"isPicker" position&qu…

实时数仓-DWS层

理论依据&#xff1a;指标体系 如果表有相似&#xff0c;可以抽取成一张表 轻度聚合&#xff1a;比如聚合10秒的先放到DWS&#xff0c;这样ADS在计算的时候&#xff0c;会更快

计讯物联5G工业路由器加速赋能公交车监控系统解决方案智能升级

一、方案概述 为提升公交车智能化管理水平为目的&#xff0c;保障公交车营运人员和乘客的安全&#xff0c;计讯物联以公交车智能调度营运为核心&#xff0c;推出计讯物联5G公交车一站式解决方案&#xff0c;通过构建感知层、传输层、设备层、应用层四层架构&#xff0c;通过感…

将名为“普通高等学校本科专业目录.pdf”的pdf文件转换成csv文件

文章目录 任务描述2023年普通高等学校本科专业目录pdf链接代码代码解析运行截图 任务描述 将名为“普通高等学校本科专业目录.pdf”的pdf文件转换成csv文件。这个pdf每页是个表格&#xff0c;表格有7列。 下面是pdf的第一页和第二页&#xff1a; 2023年普通高等学校本科专业…

10.3.2 【Linux】历史命令:history

[dmtsaistudy ~]$ alias hhistory 在正常的情况下&#xff0c;历史命令的读取与记录是这样的&#xff1a; 当我们以 bash 登陆 Linux 主机之后&#xff0c;系统会主动的由主文件夹的 ~/.bash_history 读取以前曾经下过的指令&#xff0c;那么 ~/.bash_history 会记录几笔数据呢…

microblaze生成download.bit 报错:Program FPGA failed Reason: couldn‘t open......

报错信息&#xff1a; couldn’t open “E:/Xilinx_Project/……/……/…….sdk/top_wrapper_hw_platform_0/download.bit”: no such file or directory [Updatemem 57-153] Failed to update the BRAM INIT strings for E:\Xilinx_Project\……\……\…….sdk\……\Debug\……

基于vue的地方美食分享网站(spring boot)

本项目在开发和设计过程中涉及到原理和技术有&#xff1a;B/S、java技术和MySQL数据库等等。开发步骤如下&#xff1a; 绪论&#xff1b;剖析项目背景&#xff0c;说明研究的内容。 开发技术&#xff1b;系统主要使用了java技术&#xff0c;b/s模式和myspl数据库.

react-基础-01

vue tutorial 上的小demo 改用react 写法 属性绑定 <div className{xx}></div>事件绑定 import React, { useState } from react;export function App(props) {const [count, setCount] useState(0)function add() {setCount(count 1)}return (<div classN…

Broadcast 广播使用详解

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、Broadcast概述二、Broadcast的注册三、Broadcast的注册类型四、静态注册开机广播的实现五、动态监听亮灭屏幕广播实现六、广播的发送方法七、参考文…

【Hello mysql】 mysql的内置函数

Mysql专栏&#xff1a;Mysql 本篇博客简介&#xff1a;介绍mysql的基内置函数 mysql的内置函数 日期函数获取年月日获取时分秒获取时间戳在日期的基础上加上日期在日期的基础上减去日期计算两个日期之差创建一张表 记录生日创建一个留言表 字符串函数获取emp表的ename列的字符集…

arm学习stm32芯片学习方波启动蜂鸣器,马达,风扇

main.c #include "pwm.h" extern void printf(const char *fmt, ...); void delay_ms(int ms) {int i,j;for(i 0; i < ms;i)for (j 0; j < 1800; j); } int main() {//蜂鸣器初始化hal_pwm_beep_init1();//马达hal_pwm_motor_init1();//风扇hal_pwm_blower_…

MySQL 06 :多表查询

MySQL 05 :多表查询 加where过滤 老韩分析 1。雇员名&#xff0c;雇员工资来自emp表 2。部门的名字来自dept表 3。 需求对emp和dept查询 ename&#xff0c;sal&#xff0c;dname&#xff0c;deptno 4。 当我们需要指定显示某个表的列是&#xff0c;需要表&#xff0c; 说明 …

视频的特效效果是怎么加的?可以批量添加吗

经常逛自媒体平台的小伙伴不难发现&#xff0c;要想原创的短视频更有创造性&#xff0c;内容更丰富&#xff0c;给视频添加特效效果算是比较常用的一个方法了。今天小编要分享的可不只是单一地给视频添加特效这么简单&#xff0c;我要给大家分享如何才能快速地批量给视频素材添…

Linux 学习记录46(QT篇)

Linux 学习记录46(QT篇) 本文目录 Linux 学习记录46(QT篇)一、建立QT项目工程二、Assistant帮助文档的使用三、自动生成的文件介绍1. tempprj.pro2. mainwindow.h3. mainwindow.cpp4. main.cpp5. mainwindow.ui 四、常用类的介绍1. 信息调试类(1. qDebug(2. 输出当前界面尺寸(3…