Redis — 不仅仅是缓存

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-cliINFO - 获取有关集群的信息
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.hqwc.cn/news/18200.html

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

相关文章

设置和使用DragGAN:搭建非官方的演示版

ragGAN的官方版还没有发布,但是已经有非官方版的实现了,我们看看如何使用。DragGAN不仅让GAN重新回到竞争轨道上,而且为GAN图像处理开辟了新的可能性。正式版本将于本月发布。但是现在已经可以在一个非官方的演示中试用这个新工具了 DragGAN …

GitKraken 6.5.1免费中文版安装

今天发现SmartGit上传不了代码了, 看了一下过期了, 我不想花钱买, 就找个替代工具, 方便写代码, 方便合并代码, 方便点击提交代码, 免得敲命令浪费时间. 安装 6.5.1 版本 下载版本,已上传到 CSDN :GitKraken 6.5.1免费中文版安装更换快捷方式 C:\Users\kentrl\AppData\Local\…

Linux进程信号(一)

信号产生 1.信号基础知识2.初步认识信号3.signal函数4.技术应用角度的信号5.调用系统函数向进程发信号6.由软件条件产生的信号7.硬件异常产生信号8.core 🌟🌟hello,各位读者大大们你们好呀🌟🌟 🚀&#x1f…

GPT模型应用丨遥感云大数据在灾害、水体与湿地领域典型案例实践

​ ​ ​ ​ 第一部分 基础实践 一 平台及基础开发平台 GEE平台及典型应用案例介绍; GEE开发环境及常用数据资源介绍; ChatGPT、文心一言等GPT模型介绍 JavaScript基础简介; GEE遥感云重要概念与典型数据分析流程; …

基于单片机的智能鞋柜的设计与实现

功能介绍 以51单片机作为主控系统;通过DHT11温湿度采集;通过按键设置逻辑处理;通过LED紫外线消毒;通过继电器控制风扇进行换气除湿;通过继电器控制加热片进行加热;整个电路以5v供电; 电路图 PCB 源代码 #i…

《网络安全标准实践指南》(72页)

导读 摘要:为指导网络数据安全风险评估工作,发现数据安全隐患,防范数据安全风险,依据《中华人民共和国网络安全法》《中华人民共和国数据安全法》《中华人民共和国个人信息保护法》等法律法规,参照数据安全相关国家标…

[QT编程系列-2]:C++图形用户界面编程,QT框架快速入门培训 - 1- 预备知识

目录 概述 1. 前置条件 1.1 C 1.2 图形界面 1.3 图形程序集成开发环境 1.4 图形程序开发框架 1.5 跨平台特性 1.6 QT快速感知 1.6.1 QT的典型应用 1.6.2 QT的特点 1.6.3 QT跨平台集成开发环境 1.6.4 QT是一种UI开发框架 1.6.5 QT的主要函数库 概述 1. 前置条件 学习…

如何在Ubuntu18.04中下载MySQL5.7

检查环境 首先检查自己电脑有没有安装过mysql,输入如下: rpm -qa | grep mysql如果有则清理干净在安装,输入 whereis mysql找到文件夹目录,再把它删除 rpm -e --nodeps mysql-xxx检查系统是否自带mariadb,输入如下检查 rpm -…

Spring6 JdbcTemplate和事务

文章目录 1、JdbcTemplate1.1、简介1.2、准备工作1.3、实现CURD①装配 JdbcTemplate②测试增删改功能③查询数据返回对象④查询数据返回list集合⑤查询返回单个的值 2、声明式事务概念2.1、事务基本概念①什么是事务②事务的特性 2.2、编程式事务2.3、声明式事务 3、基于注解的…

MySQL存储函数和存储过程习题

创建表并插入数据 字段名 数据类型 主键 外键 非空 唯一 自增id INT 是 否 是 是 否name VARCHAR(50) 否 否 是 否 否glass VARCHAR(50) 否 否 是 否 否sch 表内容id name glass1 xiaommg glass 12 xiaojun glass 21、创建一个可以统计…

Vue-cli脚手架

文章目录 前言搭建Vue-Cli脚手架安装npm可能出现的报错及解决办法国内淘宝镜像服务器 全局安装 vue-cli创建 Vue-Cli工程创建 Vue 的基本模板 总结终端打开/关闭操作创建Vue-Cli工程过程 前言 提示:这里可以添加本文要记录的大概内容: Vue CLI是一个基…

【Linux】- Vim 编辑器、开关机、和用户权限管理常用命令

Vim 编辑器、开关机、和用户权限管理常用命令 1.1🌰vi 和 vim 的基本介绍1.2🍮vi 和 vim 常用的三种模式1.3🌠vim的基本使用2.1🍥开机、重启2.2🍼用户登录注销3.1😀用户管理(crud)3.…