【Redis】简单了解Redis中常用的命令与数据结构
希望文章能给到你启发和灵感~
如果觉得文章对你有帮助的话,点赞 + 关注+ 收藏 支持一下博主吧~
阅读指南
- 开篇说明
- 一、基础环境说明
- 1.1 硬件环境
- 1.2 软件环境
- 二、Redis的特点和适用场景
- 三、Redis的数据类型和使用
- 3.1`字符串(String)`
- 3.2 `列表(List):`
- 3.3 `集合(Set):`
- 3.4 `有序集合(Sorted Set):`
- 3.5 `哈希(Hash):`
- 3.6 `位图(Bitmaps)`
- 3.7 `超日志(HyperLogLog):`
- 3.8 `地理空间(Geo):`
- 3.9 `流(Streams):`
- 四、最后
开篇说明
说到redis,一定不陌生,Redis是一个开源的、
基于内存的、支持多种类型数据结构的键值存储数据库,都知道他能实现快速读写、高并发访问和实时性快等特点,这篇就主要说说他的特点使用场景、以及我们日常可能常用的命令;

一、基础环境说明
考虑环境因素,大家适当的对比自己的软硬件环境情况分析~请仔细阅读硬件、软件环境
1.1 硬件环境
演示环境:Windows 11 专业版
1.2 软件环境
数据存储:Redis 3.0.504
二、Redis的特点和适用场景
-
缓存(Caching)Redis最常见的用途是作为
缓存层,比如存储一些热点数据,来减少我们数据库的访问压力。这原因其事很简单,因为Redis是基于内存的,因此其读写速度非常快,可以显著提升应用的响应速度。同时,Redis支持多种数据过期策略,能够自动清理长时间未访问的数据,优化内存使用。 -
会话管理(Session Management)
在Web应用中,Redis可以用来存储用户会话信息。 -
消息队列(Message Queue)
Redis的列表(Lists)和发布/订阅(Pub/Sub)功能可以用来实现简单的消息队列系统。虽然Redis不是专门设计来作为消息队列的,但在一些轻量级的场景下,使用Redis作为消息队列可以简化系统架构,降低部署成本。 -
计数器(Counters)
Redis的原子操作特性使得它非常适合实现计数器功能。例如,可以使用INCR命令来实现页面的访问计数、用户的点赞数统计等。由于Redis的操作是原子性的,因此不需要担心并发更新导致的数据不一致问题。 -
排行榜(Leaderboards)
利用Redis的有序集合(Sorted Sets)可以方便地实现排行榜功能。有序集合中的每个成员都有一个分数与之关联,Redis会根据分数对成员进行排序。这使得Redis成为实现排行榜、热门榜单等功能的理想选择。 -
社交网络功能(Social Networking Features)
Redis可以用来实现社交网络中的一些常见功能,如用户关注关系、好友列表、点赞、评论等。通过合理设计数据结构,Redis可以高效地存储和查询这些社交数据,支持大规模用户的实时交互。 -
分布式锁(Distributed Locks)
在分布式系统中,Redis可以用来实现分布式锁。通过Redis的SETNX(Set if Not eXists)命令或Lua脚本,可以确保在分布式环境中只有一个客户端能够获取锁,从而避免数据竞争和一致性问题。 -
地理空间信息(Geospatial Information)
Redis的地理空间索引功能可以用来存储和查询地理位置信息。这使得Redis在需要处理地理位置数据的场景(如地图应用、物流追踪等)中非常有用。 -
实时分析(Real-time Analytics)
虽然Redis主要是一个内存数据库,但它也可以与一些外部系统(如Apache Kafka、Apache Spark等)结合使用,来实现实时数据分析。通过将数据先写入Redis,然后再由其他系统进行处理和分析,可以显著提升数据分析的实时性和准确性。
三、Redis的数据类型和使用
redis中的数据类型目前主要分为几种,分别是字符串,列表,集合(有序和无序),哈希,位图,超日志,地理空间,流;后4个类型内容相对较多,我们这里就不细说了,后续再另起篇幅来细讲;
尝试使用一下命令时,请先保证自己的redis已正确安装并且已经通过客户端登录了;
3.1字符串(String)
Redis 中最基本的类型,是二进制安全的,即意味着它们能包含任何数据,比如图片或者序列化的对象。字符串类型的值最大能存储 512MB。
// 设置键的值为字符串。如果键已存在,则覆盖原有值
SET key value
// 获取键的值。如果键不存在,则返回nil。
GET key
// 将键的整数值增加1。如果键不存在,则将其值初始化为0再执行增加操作。
INCR key
// 有递增,自然有递减
DECR key
// 获取一个或多个键的值。
MGET key1 [key2...]

3.2 列表(List):
Redis 的列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
【1】如何列表中添加元素:lpush和rpush,实现左边和右边插入的方式;
【2】如何列表中删除元素:lpop和rpop,实现左边和右边移除的方式;
【3】如何查询列表中的元素:0~-1代表取所有元素,这里有点类似python切片的取法;

【4】如何移除指定元素:lrem key count value:移除列表中等于value的元素。count>0时,从表头开始搜索;count<0时,从表尾开始搜索;count=0时,移除所有等于value的元素。

3.3 集合(Set):
Redis 的集合是一个无序的字符串集合,不允许有重复的元素。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
所谓复杂度,也就是从复杂度的角度方面来看,理论上来讲,它不随你的数据量大小的增加而增加他增删查的执行时间,也就是你数据量再大,也不影响我的执行时间;不过吧,实际情况未必是这样,毕竟复杂度并不考虑具体的执行速度或硬件限制;而且有些情况这个复杂度也不是固定的,O(1)也可能比那成O(n);
【1】查询结合内的元素:smembers key
【2】集合添加元素:sadd key value
【3】检查member是否是集合key的成员。:sismember key member
【4】移除集合中一个或多个成员。:srem key member

3.4 有序集合(Sorted Set):
Redis 的有序集合和集合一样也是字符串集合,不允许重复的成员。为了实现排序,给每个成员都关联一个 double 类型的分数。这使得有序集合既可以做为一个 set 来使用,又可以保存一个 value 对应的 score,从而实现排序等功能。
【1】向有序集合添加一个或多个成员,或者更新已存在成员的分数。
【2】返回有序集合中指定范围的成员,可包含分数。
【3】移除有序集合中的一个或多个成员。
【4】返回有序集合中成员的排名(按分数从低到高)。

zrank这里注意一下返回的情况,默认情况下返回0代表分数是最高的,如果第二返回的是1,依次类推就行,相反的zrevrank 则是和上面的相反;

3.5 哈希(Hash):
Redis 的哈希是键值对的集合。Redis 中的哈希类型可以存储不定数量的键值对,是一个字符串类型的 field 和 value 的映射表。
【1】hset key field value :为哈希表中的字段赋值。
【2】hget key field:获取哈希表中字段的值。
【3】hmset key field1 value1 [field2 value2...]:同时设置哈希表中的多个字段。
【4】hgetall key:获取哈希表中所有的字段和值。


【注】以下内容这里我们只做了解,具体使用根据实际场景再来说明;
3.6 位图(Bitmaps)
位图严格来说,不算是 Redis 的一种数据类型,但它是一个字符串的二进制表示形式,因此可以使用字符串类型来实现。位图支持位级别的操作,可以非常高效地处理大量的数据,例如用于用户签到、统计在线人数等场景。
【1】setbit key offset value
设置位(SETBIT)SETBIT命令用于将位图指定偏移量上的位设置为0或1。
key:位图的键名。
offset:位的偏移量(从0开始)。
value:要设置的值(0或1)。
【2】getbit key offset
获取位,GETBIT命令用于获取位图指定偏移量上的位的值。
【3】bitcount key [start end]
统计位,用于统计位图中值为1的位的数量
【4】bitop operation destkey key [key …]
位运算,用于对一个或多个位图执行位运算,并将结果保存到新的位图中
【5】bitops key bit [start] [end]
用于查找位图中第一个被设置为指定值的二进制位,并返回它的偏移量。
3.7 超日志(HyperLogLog):
Redis 的 HyperLogLog 是一种概率性的数据结构,用于估计一个集合中不重复元素的数量。与集合相比,HyperLogLog 在保持一定的准确度的基础上,内存消耗极低。
3.8 地理空间(Geo):
Redis 3.2 版本中引入了地理空间数据类型,允许存储地理位置信息,并可以基于这些信息执行地理空间相关的查询,比如计算两个位置之间的距离,或者查找给定半径内的所有位置等。
3.9 流(Streams):
Redis 5.0 引入了 Streams 数据类型,它是一个新的强大的支持多播的原生数据类型,可以看作是一个仅追加的日志数据结构,用于消息队列等场景。
四、最后
【1】在Redis中,位图(Bitmap)、HyperLogLog、Geo和流(Stream)都被视为Redis支持的数据结构或数据类型,但它们各自具有不同的特性和应用场景。
【2】本篇我们只需要知道redis前5五种常见的数据类型的用法即可
【3】不同版本的redis,这些数据类型并不都是有的,例如Geo是Redis 3.2版本中新增的一种数据类型,流是Redis 5.0版本中新增加的数据结构,这个需要注意一下
相关文章:
【Redis】简单了解Redis中常用的命令与数据结构
希望文章能给到你启发和灵感~ 如果觉得文章对你有帮助的话,点赞 关注 收藏 支持一下博主吧~ 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境 二、Redis的特点和适用场景三、Redis的数据类型和使用3.1字符串(String&…...
IDEA启动Web项目总是提示端口占用
文章目录 IDEA启动Web项目总是提示端口占用一、前言1.场景2.环境 二、正文1.场景一:真端口占用2. 场景二:假端口占用 IDEA启动Web项目总是提示端口占用 一、前言 1.场景 IDEA启动Web项目总是提示端口占用: 确实是端口被占用,比如:没有正常…...
JRT打印鉴定记录单
良好的基础会使上层实现越做越简单,jrt在开始写业务之前就把运用场景需要的基础实验和设计完毕了。基于jrt的基础可以很轻松的实现强大的打印效果。jrt的打印和lodop比较像,是高度为满足建议系统打印定制的打印实现,设计器可能没lodop通用&am…...
数据处理-Matplotlib 绘图展示
文章目录 1. Matplotlib 简介2. 安装3. Matplotlib Pyplot4. 绘制图表1. 折线图2. 散点图3. 柱状图4. 饼图5. 直方图 5. 中文显示 1. Matplotlib 简介 Matplotlib 是 Python 的绘图库,它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。 Ma…...
Nginx -Web服务器/反向代理/负载均衡
文章目录 一、web服务1.1 nginx安装1.2 配置文件1.3 Nginx处理Web机制 二、反向代理三、负载均衡3.1 分类3.2 负载相关配置文件3.3 keepalive 提高吞吐量3.4 配置浏览器缓存 附、JMeter性能测试工具 以赛促学内容,大概率感觉会使用nginx做web服务,特对nginx做总结归纳. Nginx是…...
机器人三定律及伦理分析
全世界的机器人定律并没有一个统一的标准或体系,但是在科学文献中,最广为人知的是由科幻小说家阿西莫夫提出的“机器人三定律”。本文将以这些定律为基础,分析现有的机器人伦理和实际应用中的问题,给出若干实例,并对相…...
自动驾驶算法———车道检测(一)
“ 在本章中,我将指导您构建一个简单但有效的车道检测管道,并将其应用于Carla 模拟器中捕获的图像。管道将图像作为输入,并产生车道边界的数学模型作为输出。图像由行车记录仪(固定在车辆挡风玻璃后面的摄像头)捕获。…...
小程序自学教程
从0开始搭建微信小程序前后台 0、准备 如何安装?去CSDN搜索“xxx安装教程”即可。 (1)工具 IntelliJ IDEA(必选)——Java开发集成环境,可以前后端同时使用 Web Storm——web开发集成环境,主要…...
How do I format markdown chatgpt response in tkinter frame python?
题意:怎样在Tkinter框架中使用Python来格式化Markdown格式的ChatGPT响应? 问题背景: Chatgpt sometimes responds in markdown language. Sometimes the respond contains ** ** which means the text in between should be bold and ### te…...
vs2019 QT无法打开源文件QModbusTcpClient
vs2019无法打开源文件QModbusTcpClient 如果配置的msvc2019,则查找到Include目录 然后包含: #include <QtSerialBus/qmodbustcpclient.h>...
初识c++(命名空间,缺省参数,函数重载)
一、命名空间 1、namespace的意义 在C/C中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全 局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名 冲突…...
印尼Facebook直播网络需要达到什么要求?
在全球化浪潮的推动下,海外直播正受到企业、个人和机构的广泛关注和青睐。无论是用于营销、推广还是互动,海外直播为各种组织提供了更多机会和可能性。本文将探讨在进行印尼Facebook直播前,需要满足哪些网络条件以确保直播的质量和用户体验。…...
力扣题解(最长回文子串)
5. 最长回文子串 给你一个字符串 s,找到 s 中最长的 回文子串 。思路: 对于第i个字符,可能的回文子串构成方式有两种,一种是以i位置元素为中心元素,向着两边扩展,一种是以i位置和i1位置元素为中心…...
数据湖表格式 Hudi/Iceberg/DeltaLake/Paimon TPCDS 性能对比(Spark 引擎)
当前,业界流行的集中数据湖表格式 Hudi/Iceberg/DeltaLake,和最近出现并且在国内比较火的 Paimon。我们现在看到的很多是针对流处理场景的读写性能测试,那么本篇文章我们将回归到大数据最基础的场景,对海量数据的批处理查询。本文…...
脚本练习-每5分钟执行一次获取当前服务器的基本情况
设计一个shell程序,每5分钟执行一次获取当前服务器的基本情况(内存使用率,CPU负载,I/O,磁盘使用率),保存到120.20.20.20数据库上数据库帐号aaa密码bbb库名test表名host 创建一个名为server_stat…...
技术探索之kotlin浅谈
Kotlin是一种静态类型编程语言,它运行在Java虚拟机(JVM)上,可以与Java代码互操作。Kotlin由JetBrains开发,是一种现代、简洁且安全的编程语言。它在2011年首次亮相,2017年被谷歌宣布为Android官方开发语言。…...
机器学习之常用优化器
机器学习之常用优化器 1、SGD 优化器1.2、 SGD 的优缺点 2、 Adam 优化器2.1、设置 Adam 优化器2.2、使用 Adam 优化器的训练流程2.3、Adam 优化器的优缺点 3. AdamW 优化器3.1、示例3.2、训练过程3.3、AdamW 优化器的优点 1、SGD 优化器 在 PyTorch 中,设置 SGD 优…...
机器学习基本概念,Numpy,matplotlib和张量Tensor知识进一步学习
机器学习一些基本概念: 监督学习 监督学习是机器学习中最常见的形式之一,它涉及到使用带标签的数据集来训练模型。这意味着每条训练数据都包含输入特征和对应的输出标签。目标是让模型学会从输入到输出的映射,这样当给出新的未见过的输入时…...
博客前端项目学习day01
这里写自定义目录标题 登录创建项目配置环境变量,方便使用登录页面验证码登陆表单 在VScode上写前端,采用vue3。 登录 创建项目 检查node版本 node -v 创建一个新的项目 npm init vitelatest blog-front-admin 中间会弹出询问是否要安装包,…...
java Collections.synchronizedCollection方法介绍
Collections.synchronizedCollection 是 Java 中的一个实用方法,用于创建一个线程安全的集合。它通过包装现有的集合对象来实现线程安全,以确保在多线程环境中对集合的访问是安全的。 主要功能 线程安全:通过同步包装现有的集合,使得在多线程环境中对集合的所有访问(包括…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
