深入理解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(Remote Dictionary Server)是一款高性能的开源键值存储系统,广泛应用于缓存、会话管理、实时分析等领域。它支持多种数据结构,如字符串、哈希、列表、集合和有序集合等,提供了丰富的操作命令。本篇博客将详细介绍…...
stm32太阳能追光储能系统V2
大家好,我是 小杰学长 stm32太阳能追光储能系统V2. 增加了命令行交互和内置AT指令解析框架 (就是可以用电脑串口发送at指令控制板子的所有功能) 改动了spi 换成硬件 改动了硬件电源 增加了pcb原理图 附带上pcb源文件 增加了freertos 互斥锁…...
Docker笔记-解决非交互式运行python时print不输出的问题
换句话来说就是在docker中如何不会python的print 只需要在启动时,不让python缓冲其输出。 关键命令如下:PYTHONUNBUFFERED1 如下: docker run -e PYTHONUNBUFFERED1 <your_image> 下面解释下-e "-e"选项的全称是"…...
06- 数组的基础知识详细讲解
06- 数组的基础知识详细讲解 一、基本概念 一次性定义多个相同类型的变量,并且给它们分配一片连续的内存。 int arr[5];1.1 初始化 只有在定义的时候赋值,才可以称为初始化。数组只有在初始化的时候才可以统一赋值。 以下是一些示例规则: …...
CentOS6系统因目录有隐含i权限属性致下属文件无法删除的故障一例
CentOS6服务器在升级openssh时因系统目录权限异常(有隐含i权限属性),下属文件无法删除,导致系统问题的故障一例。 一、问题现象 CentOS6在升级openssh时,提示如下问题: warning: /etc/ssh/sshd_config c…...
【视频转码】ZLMediaKit漏洞报告的问题
漏洞问题: 支持ss1 rc4密码套件(bar mitzvah) 漏洞级别: 中危 漏洞修复: 方法:避免使用RC4密码,参考代码如下: 修改文件位于:webrtc/DtlsTransport.cpp ret SSL_CTX_set_cipher_list(ssl…...
100道大模型面试八股文
算法暑期实习机会快结束了,校招大考即将来袭。 当前就业环境已不再是那个双向奔赴时代了。求职者在变多,岗位在变少,要求还更高了。 最近,我们陆续整理了很多大厂的面试题,帮助球友解惑答疑和职业规划,分…...
【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表单像这样写出来,然后把需要用户填写的内容写在form表单内。 二.表单内数据绑定 <div class"input-container"><div style"margin-left: 9px;"&…...
6、架构-服务端缓存
为系统引入缓存之前,第一件事情是确认系统是否真的需要缓 存。从开发角度来说,引入缓存会提 高系统复杂度,因为你要考虑缓存的失效、更新、一致性等问题;从运维角度来说,缓存会掩盖一些缺 陷,让问题在更久的…...
服务器遭遇UDP攻击时的应对与解决方案
UDP攻击作为分布式拒绝服务(DDoS)攻击的一种常见形式,通过发送大量的UDP数据包淹没目标服务器,导致网络拥塞、服务中断。本文旨在提供一套实用的策略与技术手段,帮助您识别、缓解乃至防御UDP攻击,确保服务器稳定运行。我们将探讨监…...
美团发布2024年一季度财报:营收733亿元,同比增长25%
6月6日,美团(股票代码:3690.HK)发布2024年第一季度业绩报告。受益于经济持续回暖和消费复苏,公司各项业务继续取得稳健增长,营收733亿元(人民币,下同),同比增长25%。 财报显示,一季度,美团继续…...
sql注入-布尔盲注
布尔盲注(Boolean Blind SQL Injection)是一种SQL注入攻击技术,用于在无法直接获得查询结果的情况下推断数据库信息;它通过发送不同的SQL查询来观察应用程序的响应,进而判断查询的真假,并逐步推断出有用的信…...
docker-compose部署 kafka 3.7 集群(3台服务器)并启用账号密码认证
文章目录 1. 规划2. 服务部署2.1 kafka-012.2 kafka-022.3 kafka-032.4 启动服务 3. 测试3.1 kafkamap搭建(测试工具)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. 二分查找【数组 二分查找】 题目描述:解题思路一:注意开区间和闭区间背诵版:解题思路三: 题目描述: 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target …...
Rust 性能分析
都说Rust性能好,但是也得代码写得好,猜猜下面两个代码哪个快 . - 力扣(LeetCode) 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都是广泛使用的项目自动化构建工具,但它们在多个方面存在差异。以下是关于Gradle和Maven的详细对比: 一、构建脚本语言 Maven:使用XML作为构建脚本语言。XML的语法较为繁琐,不够灵活,对于复杂的构建逻辑…...
Seed-TTS语音编辑有多强?对比实测结果让你惊叹!
GLM-4-9B 开源系列模型 前言 就在最近,ByteDance的研究人员最近推出了一系列名为Seed-TTS的大规模自回归文本转语音(TTS)模型,能够合成几乎与人类语音无法区分的高质量语音。那么Seed-TTS的表现究竟有多强呢?让我们一起来感受下Seed-TTS带来的惊喜吧! 介绍Seed-TTS…...
Vue3——实现word,pdf上传之后,预览功能(实测有效)
vue-office/pdf - npm支持多种文件(**docx、excel、pdf**)预览的vue组件库,支持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之【类的生命周期】
首先,请区分Bean的声明周期和类的声明周期。此处讲的是类的声明周期 可以同步观看另一篇文章JVM之【类加载机制】 概述 在Java中数据类型分为基本数据类型和引用数据类型 基本数据类型由虚拟机预先定义,引用数据类型则需要进行类的加载 按照]ava虚拟机…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
《Docker》架构
文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器,docker,镜像,k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...
ui框架-文件列表展示
ui框架-文件列表展示 介绍 UI框架的文件列表展示组件,可以展示文件夹,支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项,适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...
6.计算机网络核心知识点精要手册
计算机网络核心知识点精要手册 1.协议基础篇 网络协议三要素 语法:数据与控制信息的结构或格式,如同语言中的语法规则语义:控制信息的具体含义和响应方式,规定通信双方"说什么"同步:事件执行的顺序与时序…...
Python异步编程:深入理解协程的原理与实践指南
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 持续学习,不断…...
虚拟机网络不通的问题(这里以win10的问题为主,模式NAT)
当我们网关配置好了,DNS也配置好了,最后在虚拟机里还是无法访问百度的网址。 第一种情况: 我们先考虑一下,网关的IP是否和虚拟机编辑器里的IP一样不,如果不一样需要更改一下,因为我们访问百度需要从物理机…...
八、【ESP32开发全栈指南:UDP客户端】
1. 环境准备 安装ESP-IDF v4.4 (官方指南)确保Python 3.7 和Git已安装 2. 创建项目 idf.py create-project udp_client cd udp_client3. 完整优化代码 (main/main.c) #include <string.h> #include "freertos/FreeRTOS.h" #include "freertos/task.h&…...
