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

深入理解Redis:多种操作方式详解

Redis(Remote Dictionary Server)是一款高性能的开源键值存储系统,广泛应用于缓存、会话管理、实时分析等领域。它支持多种数据结构,如字符串、哈希、列表、集合和有序集合等,提供了丰富的操作命令。本篇博客将详细介绍Redis的多种操作方式,帮助初学者全面掌握Redis的使用。

一、Redis的安装与配置

1. 安装Redis

在Linux系统上,你可以通过以下命令安装Redis:

sudo apt update sudo apt install redis-server

在Windows系统上,可以通过下载Redis的Windows版本进行安装。

2. 配置Redis

Redis的配置文件通常位于/etc/redis/redis.conf。你可以通过修改该文件来配置Redis的各种参数,如绑定地址、端口、持久化方式等。

示例配置:

bind 127.0.0.1 port 6379 daemonize yes

二、Redis基本操作

1. 连接Redis

在安装好Redis后,可以通过命令行连接Redis:

redis-cli

连接成功后,你将看到提示符127.0.0.1:6379>,表示已经进入了Redis命令行模式。

2. 键值操作
(1)设置键值

使用SET命令可以设置键值:

SET key1 "Hello, Redis!"
(2)获取键值

使用GET命令可以获取键值:

GET key1
(3)键值存在性检查

使用EXISTS命令可以检查键是否存在:

EXISTS key1
(4)删除键

使用DEL命令可以删除键:

DEL key1
(5)键过期设置

使用EXPIRE命令可以为键设置过期时间(单位:秒):

SET key1 "Hello, Redis!" EXPIRE key1 10

三、Redis高级数据结构操作

1. 字符串(String)

字符串是Redis中最基本的数据类型,使用非常简单。

(1)追加字符串

使用APPEND命令可以向已有字符串追加内容:

APPEND key1 " Welcome to Redis!"
(2)获取字符串长度

使用STRLEN命令可以获取字符串的长度:

STRLEN key1
2. 哈希(Hash)

哈希用于存储键值对,可以看作是一个小型的键值存储系统。

(1)设置哈希字段值

使用HSET命令可以设置哈希字段值:

HSET user1 name "Alice" HSET user1 age 30
(2)获取哈希字段值

使用HGET命令可以获取哈希字段值:

HGET user1 name
(3)获取所有哈希字段值

使用HGETALL命令可以获取所有哈希字段值:

HGETALL user1
(4)删除哈希字段

使用HDEL命令可以删除哈希字段:

HDEL user1 age
3. 列表(List)

列表是一种链表结构,可以在列表的头部或尾部进行插入和删除操作。

(1)向列表头部插入元素

使用LPUSH命令可以向列表头部插入元素:

LPUSH mylist "a" LPUSH mylist "b"
(2)向列表尾部插入元素

使用RPUSH命令可以向列表尾部插入元素:

RPUSH mylist "c"
(3)获取列表元素

使用LRANGE命令可以获取列表的元素:

LRANGE mylist 0 -1
(4)弹出列表头部元素

使用LPOP命令可以弹出列表头部元素:

LPOP mylist
4. 集合(Set)

集合是一种无序的集合结构,支持添加、删除和检查元素。

(1)向集合添加元素

使用SADD命令可以向集合添加元素:

SADD myset "a" SADD myset "b"
(2)获取集合所有元素

使用SMEMBERS命令可以获取集合的所有元素:

SMEMBERS myset
(3)检查元素是否在集合中

使用SISMEMBER命令可以检查元素是否在集合中:

SISMEMBER myset "a"
(4)删除集合中的元素

使用SREM命令可以删除集合中的元素:

SREM myset "a"
5. 有序集合(Sorted Set)

有序集合是一种带有评分的集合结构,元素按评分排序。

(1)向有序集合添加元素

使用ZADD命令可以向有序集合添加元素:

ZADD myzset 1 "a" ZADD myzset 2 "b"
(2)获取有序集合的元素

使用ZRANGE命令可以按评分顺序获取有序集合的元素:

ZRANGE myzset 0 -1
(3)删除有序集合中的元素

使用ZREM命令可以删除有序集合中的元素:

ZREM myzset "a"

四、Redis事务操作

Redis支持简单的事务操作,可以保证一组命令的原子性执行。

1. 开启事务

使用MULTI命令可以开启事务:

MULTI
2. 执行事务命令

在事务开启后,可以执行多个命令:

SET key1 "value1" SET key2 "value2"
3. 提交事务

使用EXEC命令可以提交事务:

EXEC
4. 放弃事务

使用DISCARD命令可以放弃事务:

DISCARD

五、Redis持久化操作

Redis提供了两种主要的持久化方式:RDB(Redis Database)和AOF(Append Only File)。

1. RDB持久化

RDB持久化是将数据快照保存到磁盘中,可以在指定时间间隔内生成数据快照。

(1)手动生成RDB快照

使用SAVE命令可以手动生成RDB快照:

SAVE
(2)配置自动生成RDB快照

redis.conf中,可以配置自动生成RDB快照的规则:

save 900 1 save 300 10 save 60 10000
2. AOF持久化

AOF持久化是将每次写操作记录到文件中,可以更细粒度地恢复数据。

(1)启用AOF持久化

redis.conf中,可以启用AOF持久化:

appendonly yes appendfilename "appendonly.aof"
(2)重写AOF文件

使用BGREWRITEAOF命令可以手动重写AOF文件:

BGREWRITEAOF

六、Redis发布/订阅操作

Redis的发布/订阅(Pub/Sub)机制允许消息在不同的客户端之间进行传递。

1. 发布消息

使用PUBLISH命令可以发布消息:

PUBLISH mychannel "Hello, Redis!"
2. 订阅消息

使用SUBSCRIBE命令可以订阅消息:

SUBSCRIBE mychannel

订阅成功后,当有消息发布到该频道时,订阅客户端会收到相应的消息。

七、Redis Lua脚本操作

Redis支持通过Lua脚本执行一组命令,提供原子性和高效性。

1. 执行Lua脚本

使用EVAL命令可以执行Lua脚本:

EVAL "return redis.call('SET', KEYS[1], ARGV[1])" 1 key1 "value1"
2. 加载并执行Lua脚本

使用SCRIPT LOAD命令可以加载Lua脚本,并使用EVALSHA命令执行:

SCRIPT LOAD "return redis.call('SET', KEYS[1], ARGV[1])" EVALSHA <script_sha1> 1 key1 "value1"

八、Redis集群操作

Redis集群模式可以实现数据的分片和高可用性。

1. 创建集群

可以使用redis-cli工具创建Redis集群:

redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 --cluster-replicas 1
2. 集群节点操作

集群中的每个节点可以执行常规的Redis命令,并自动处理数据分片和复制。

九、总结

通过本文的详细讲解,我们深入探讨了Redis的多种操作方式,包括基本操作、高级数据结构操作、事务操作、持久化操作、发布/订阅操作、Lua脚本操作和集群操作。Redis作为一款高性能的键值存储系统,提供了丰富的功能和命令,适用于多种业务场景。希望通过这篇详细的讲解,能够帮助初学者全面掌握Redis的使用,并在实际项目中得心应手地应用它。

如果你对Redis的使用还有其他疑问或有更多的使用技巧,欢迎在评论区分享和讨论。记住,编程不仅仅是写代码,更是不断学习和交流的过程。Happy coding!

相关文章:

深入理解Redis:多种操作方式详解

Redis&#xff08;Remote Dictionary Server&#xff09;是一款高性能的开源键值存储系统&#xff0c;广泛应用于缓存、会话管理、实时分析等领域。它支持多种数据结构&#xff0c;如字符串、哈希、列表、集合和有序集合等&#xff0c;提供了丰富的操作命令。本篇博客将详细介绍…...

stm32太阳能追光储能系统V2

大家好&#xff0c;我是 小杰学长 stm32太阳能追光储能系统V2. 增加了命令行交互和内置AT指令解析框架 &#xff08;就是可以用电脑串口发送at指令控制板子的所有功能&#xff09; 改动了spi 换成硬件 改动了硬件电源 增加了pcb原理图 附带上pcb源文件 增加了freertos 互斥锁…...

Docker笔记-解决非交互式运行python时print不输出的问题

换句话来说就是在docker中如何不会python的print 只需要在启动时&#xff0c;不让python缓冲其输出。 关键命令如下&#xff1a;PYTHONUNBUFFERED1 如下&#xff1a; docker run -e PYTHONUNBUFFERED1 <your_image> 下面解释下-e "-e"选项的全称是"…...

06- 数组的基础知识详细讲解

06- 数组的基础知识详细讲解 一、基本概念 一次性定义多个相同类型的变量&#xff0c;并且给它们分配一片连续的内存。 int arr[5];1.1 初始化 只有在定义的时候赋值&#xff0c;才可以称为初始化。数组只有在初始化的时候才可以统一赋值。 以下是一些示例规则&#xff1a; …...

CentOS6系统因目录有隐含i权限属性致下属文件无法删除的故障一例

CentOS6服务器在升级openssh时因系统目录权限异常&#xff08;有隐含i权限属性&#xff09;&#xff0c;下属文件无法删除&#xff0c;导致系统问题的故障一例。 一、问题现象 CentOS6在升级openssh时&#xff0c;提示如下问题&#xff1a; warning: /etc/ssh/sshd_config c…...

【视频转码】ZLMediaKit漏洞报告的问题

漏洞问题&#xff1a; 支持ss1 rc4密码套件(bar mitzvah) 漏洞级别&#xff1a; 中危 漏洞修复&#xff1a; 方法&#xff1a;避免使用RC4密码&#xff0c;参考代码如下&#xff1a; 修改文件位于&#xff1a;webrtc/DtlsTransport.cpp ret SSL_CTX_set_cipher_list(ssl…...

100道大模型面试八股文

算法暑期实习机会快结束了&#xff0c;校招大考即将来袭。 当前就业环境已不再是那个双向奔赴时代了。求职者在变多&#xff0c;岗位在变少&#xff0c;要求还更高了。 最近&#xff0c;我们陆续整理了很多大厂的面试题&#xff0c;帮助球友解惑答疑和职业规划&#xff0c;分…...

【ARM Cache 及 MMU 系列文章 6.2 -- ARMv8/v9 Cache 内部数据读取方法详细介绍】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 Direct access to internal memoryL1 cache encodingsL1 Cache Data 寄存器Cache 数据读取代码实现Direct access to internal memory 在ARMv8架构中,缓存(Cache)是用来加速数据访…...

使用Vue.js将form表单传递到后端

一.form表单 <form submit.prevent"submitForm"></form> form表单像这样写出来&#xff0c;然后把需要用户填写的内容写在form表单内。 二.表单内数据绑定 <div class"input-container"><div style"margin-left: 9px;"&…...

6、架构-服务端缓存

为系统引入缓存之前&#xff0c;第一件事情是确认系统是否真的需要缓 存。从开发角度来说&#xff0c;引入缓存会提 高系统复杂度&#xff0c;因为你要考虑缓存的失效、更新、一致性等问题&#xff1b;从运维角度来说&#xff0c;缓存会掩盖一些缺 陷&#xff0c;让问题在更久的…...

服务器遭遇UDP攻击时的应对与解决方案

UDP攻击作为分布式拒绝服务(DDoS)攻击的一种常见形式&#xff0c;通过发送大量的UDP数据包淹没目标服务器&#xff0c;导致网络拥塞、服务中断。本文旨在提供一套实用的策略与技术手段&#xff0c;帮助您识别、缓解乃至防御UDP攻击&#xff0c;确保服务器稳定运行。我们将探讨监…...

美团发布2024年一季度财报:营收733亿元,同比增长25%

6月6日&#xff0c;美团(股票代码:3690.HK)发布2024年第一季度业绩报告。受益于经济持续回暖和消费复苏&#xff0c;公司各项业务继续取得稳健增长&#xff0c;营收733亿元(人民币&#xff0c;下同)&#xff0c;同比增长25%。 财报显示&#xff0c;一季度&#xff0c;美团继续…...

sql注入-布尔盲注

布尔盲注&#xff08;Boolean Blind SQL Injection&#xff09;是一种SQL注入攻击技术&#xff0c;用于在无法直接获得查询结果的情况下推断数据库信息&#xff1b;它通过发送不同的SQL查询来观察应用程序的响应&#xff0c;进而判断查询的真假&#xff0c;并逐步推断出有用的信…...

docker-compose部署 kafka 3.7 集群(3台服务器)并启用账号密码认证

文章目录 1. 规划2. 服务部署2.1 kafka-012.2 kafka-022.3 kafka-032.4 启动服务 3. 测试3.1 kafkamap搭建&#xff08;测试工具&#xff09;3.2 测试 1. 规划 服务IPkafka-0110.10.xxx.199kafka-0210.10.xxx.198kafka-0310.10.xxx.197kafkamp10.10.xxx.199 2. 服务部署 2.1…...

LeetCode-704. 二分查找【数组 二分查找】

LeetCode-704. 二分查找【数组 二分查找】 题目描述&#xff1a;解题思路一&#xff1a;注意开区间和闭区间背诵版&#xff1a;解题思路三&#xff1a; 题目描述&#xff1a; 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xf…...

Rust 性能分析

都说Rust性能好,但是也得代码写得好,猜猜下面两个代码哪个快 . - 力扣&#xff08;LeetCode&#xff09; use std::collections::HashMap; use lazy_static::lazy_static;lazy_static! {static ref DIGIT: HashMap<char, usize> {let mut m HashMap::new();for c in …...

Gradle和Maven都是广泛使用的项目自动化构建工具

Gradle和Maven都是广泛使用的项目自动化构建工具&#xff0c;但它们在多个方面存在差异。以下是关于Gradle和Maven的详细对比&#xff1a; 一、构建脚本语言 Maven&#xff1a;使用XML作为构建脚本语言。XML的语法较为繁琐&#xff0c;不够灵活&#xff0c;对于复杂的构建逻辑…...

Seed-TTS语音编辑有多强?对比实测结果让你惊叹!

GLM-4-9B 开源系列模型 前言 就在最近&#xff0c;ByteDance的研究人员最近推出了一系列名为Seed-TTS的大规模自回归文本转语音(TTS)模型,能够合成几乎与人类语音无法区分的高质量语音。那么Seed-TTS的表现究竟有多强呢?让我们一起来感受下Seed-TTS带来的惊喜吧! 介绍Seed-TTS…...

Vue3——实现word,pdf上传之后,预览功能(实测有效)

vue-office/pdf - npm支持多种文件(**docx、excel、pdf**)预览的vue组件库&#xff0c;支持vue2/3。也支持非Vue框架的预览。. Latest version: 2.0.2, last published: a month ago. Start using vue-office/pdf in your project by running npm i vue-office/pdf. There are …...

JVM之【类的生命周期】

首先&#xff0c;请区分Bean的声明周期和类的声明周期。此处讲的是类的声明周期 可以同步观看另一篇文章JVM之【类加载机制】 概述 在Java中数据类型分为基本数据类型和引用数据类型 基本数据类型由虚拟机预先定义&#xff0c;引用数据类型则需要进行类的加载 按照]ava虚拟机…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...