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

数据库——redis

一、Redis 介绍

1. 概述

Redis(Remote Dictionary Server)是一个开源的、高性能的内存键值数据库系统,具有以下核心特点:

  • 内存存储架构:数据主要存储在内存中,提供微秒级的读写响应

  • 多数据结构支持

    • 基础类型:字符串(Strings)

    • 集合类型:列表(Lists)、集合(Sets)、有序集合(Sorted Sets)

    • 复合类型:哈希表(Hashes)

    • 特殊类型:位图(Bitmaps)、超日志(HyperLogLogs)

    • 空间数据:地理空间索引(Geospatial)

  • 多功能应用

    • 高性能数据库

    • 分布式缓存系统

    • 消息中间件

    • 实时数据处理平台

2. 核心特性

2.1 卓越性能
  • 内存存储架构实现微秒级响应

  • 单节点可达10万+ QPS

  • 单线程模型避免锁竞争

2.2 数据持久化
  • RDB:定时快照,适合备份

  • AOF:日志追加,保证数据安全

  • 混合持久化策略可选

2.3 高级数据结构
  • 支持7种核心数据结构

  • 提供160+操作命令

  • 支持Lua脚本扩展

2.4 消息系统
  • 完整的发布/订阅模式

  • 阻塞式列表队列

  • Stream数据类型支持

2.5 事务处理
  • MULTI/EXEC事务机制

  • WATCH乐观锁控制

  • 所有命令原子性执行

2.6 高可用架构
  • Redis Sentinel自动故障转移

  • Redis Cluster分布式部署

  • 支持水平扩展和数据分片

3. 典型应用场景

3.1 缓存系统
  • 热点数据缓存

  • 全页缓存(FPC)

  • 分布式会话存储

3.2 实时应用
  • 实时排行榜

  • 计数器系统

  • 秒杀系统实现

3.3 消息服务
  • 任务队列

  • 事件通知系统

  • 消息广播

3.4 空间计算
  • 地理位置查询

  • 附近的人功能

  • 地理围栏实现

3.5 大数据处理
  • 实时统计分析

  • 用户画像标签

  • 布隆过滤器实现

Redis以其卓越的性能、丰富的数据结构和灵活的部署方式,已成为现代分布式系统架构中的核心组件。

4.Redis 基础指令

连接redis

# 终端输入以下命令
redis-cli# 进入到交互模式后进行服务测试
ping

切换数据仓库:redis 默认存在十六个数据仓库,仓库编号从零计算

select 10

二、数据操作

1.数据类型

在正式操作 redis 之前,我们需要了解一下 redis 数据库中常用的数据类型:

1.字符串类型:string

2.哈希类型:hash

3.列表类型:list

4.集合类型:set

5.有序集合类型:zset 

数据类型适用场景不适用场景
String简单键值、计数器复杂对象存储
Hash对象属性存储需要单独过期时间的字段
List消息队列、最新列表随机访问场景
Set标签系统、好友关系需要排序的场景
Zset排行榜、优先级队列简单去重场景

2.字符串类型操作

如果设置的键不存在则为添加,如果设置的键已经存在则修改 

# set key value
set name tuling

设置键值及过期时间,以秒为单位

# setex key seconds value
setex name 3 小黑猪

设置多个键值

# mset key1 value1 key2 value2 ...
mset name 小孩 age 18 gender 女

根据键获取值,如果不存在则返回nil

# get key
get name

根据多个键获取多个值 

# mget key1 key2 key3 ...
mget name age gender

键指令

查询所有存在的键 

# keys pattern
keys *

 查询包含字母 n 的键

# keys <regex>
keys n*

判断键是否存在,如果存在返回1;否则返回0

# exists key
exists name
exists address

查看键对应的值的类型 

# type key
type age

删除键值对 

# del key1 key2 ...
del age gender

3.hash 类型

hash 用于存储对象,对象的结构为:属性、值(string)

设置单个属性

# hset key field value
hset user name tuling

设置多个属性

# hmset key field1 value1 field2 value2 ...
# 属性有两个:name、age
hmset py_stu name tuling age 10

获取指定键的所有字段 

# hkeys key
hkeys py_stu

获取一个字段对应的值

# hget key field
hget py_stu name

获取多个字段对应的值 

# hmget key field1 field2 ...
hmget py_stu name age

获取指定键的所有字段对应的值 

# hvals key
hvals py_stu

删除字段:字段对应的值会被一起删除 

# hdel key field1 field2 ...
hdel py_stu age# 如果想要删除整个hash数据则使用del
del py_stu

4.list类型

从列表左侧插入数据

# lpush key value1 value2 ...
lpush name_1 a b c

从列表右侧插入数据

# rpush key value1 value2 ...
rpush name_2 a b c

数据获取:获取列表数据的方向只能从左往右

# lrange key start stop# 获取列表name_1、name_2中的所有元素
lrange name_1 0 -1
lrange name_2 0 -1# start、stop为元素的索引
# 1.索引从左侧开始,第一个元素为0
# 2.索引可以是负数,表示从尾部开始计数,如-1表示最后一个元素

删除指定元素

# lrem key count value# 根据索引count删除对应的值
# count > 0:从左往右删除
# count < 0:从右往左删除
# count = 0:删除所有# 创建测试列表并左插入三组a、b
lpush test_list a b a b a b 
# 查看列表数据
lrange test_list 0 -1
# 从test_list列表中的右侧开始删除2个b字母
lrem test_list -2 b
# 查看删除效果
lrange test_list 0 -1

5.set 类型

集合类型是无序的,并且集合中的元素类型为 string。在集合中的元素具有唯一性,不能重复,并且集合类型没有修改操作。

添加元素

# sadd key member1 member2 ...
sadd user_name_1 zhangsan lisi wangwu

获取元素

# smembers key# 获取集合中的所有元素
smembers user_name_1

删除元素

# srem key# 删除指定键user_name_1中的元素:wangwu
srem user_name_1 wangwu

6.zset类型

zset 类型是一个有序集合,元素为 string 类型。和无序集合一样,元素具有唯一性,不能重复,并没有修改操作。在有序集合中的每个元素都会关联一个 double 类型的 score,表示权重,通过权重将元素从小到大排序。

添加元素

# zadd key socre1 member1 socre2 member2 ...# 向键user_name_2集合中添加元素:lisi、wangwu、zhaoliu、zhangsan 权重分别为 4 5 6 3
zadd user_name_2 4 lisi 5 wangwu 6 zhaoliu 3 zhangsan 

获取数据 

# zrange key start stop# start、stop为元素的索引
# 1.索引从左侧开始,第一个元素索引为0
# 2.索引可以是负数,表示从尾部开始计数,如-1表示最后一个元素# 获取键user_name_2集合中的所有元素
zrange user_name_2 0 -1

删除数据

# zrem key member1 member2 ...# 删除user_name_2集合中的元素: zhangsan
zrem user_name_2 zhangsan

三、第三方客户端-redis-py

1.概述

redis-py 是 redis 数据库的一个 python 客户端库,允许你从 python 应用程序中连接到 redis 服务器并与之交互。这个库提供了一个简单易用的接口来执行 redis 命令,管理数据、处理订阅和发布消息等。redis-py 支持 Redis 的高级功能,如管道(pipelining)、发布订阅(pub/sub)系统、事务和自动重连。

2.准备工作

使用前需要先下载安装:pip install redis

from redis import Redis"""
host:redis服务端ip
port:redis服务端端口
db:仓库号
"""
redis_obj=Redis(host='localhost',port=6379,db=0)

创建代码目录文件夹,在文件夹中创建redis_string.py文件 

from redis import Redisif __name__=='__main__':try:# host port db 等参数是可选项redis_obj=Redis()except Exception as e:print(e)

3.添加数据

如果添加成功返回True,否则返回False

from redis import Redisif __name__=='__main__':try:# host port db 等参数是可选项redis_obj=Redis()# 添加数据result=redis_obj.set('name','小孩')# 如果添加成功则返回Trueprint(result)except Exception as e:print(e)

4.获取数据

如果键存在返回对应的值,否则返回None

from redis import Redisif __name__=='__main__':try:# host port db 等参数是可选项redis_obj=Redis()# 添加数据result=redis_obj.set('name','小孩')# 获取数据result1=redis_obj.get('name')print(result1)except Exception as e:print(e)

5.数据修改

 如果键存在则进行修改,否则创建新数据

from redis import Redisif __name__=='__main__':try:# host port db 等参数是可选项redis_obj=Redis()# 添加数据result=redis_obj.set('name','小孩')# 获取数据result1=redis_obj.get('name')# 数据修改redis_obj.set('name','小黑猪')result2 = redis_obj.get('name')print(result2)except Exception as e:print(e)

6.数据删除

使用 delete 方法删除键值对,如果删除成功则返回受影响的键的数量,否则返回0

from redis import Redisif __name__=='__main__':try:# host port db 等参数是可选项redis_obj=Redis()result = redis_obj.delete('name')print(result)except Exception as e:print(e)

7.获取键

from redis import Redisif __name__=='__main__':try:redis_obj = Redis()result = redis_obj.keys()print(result)except Exception as e:print(e)

相关文章:

数据库——redis

一、Redis 介绍 1. 概述 Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的、高性能的内存键值数据库系统&#xff0c;具有以下核心特点&#xff1a; 内存存储架构&#xff1a;数据主要存储在内存中&#xff0c;提供微秒级的读写响应 多数据结构支持&…...

Java后端检查空条件查询

通过抛出运行异常&#xff1a;throw new RuntimeException("请输入查询条件&#xff01;");BranchWarehouseServiceImpl.java // 查询试剂交易&#xff08;入库/出库&#xff09;记录Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…...

WEB3全栈开发——面试专业技能点P4数据库

一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库&#xff0c;基于 mysql 库改进而来&#xff0c;具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点&#xff1a; 支持 Promise / async-await&#xf…...

PH热榜 | 2025-06-08

1. Thiings 标语&#xff1a;一套超过1900个免费AI生成的3D图标集合 介绍&#xff1a;Thiings是一个不断扩展的免费AI生成3D图标库&#xff0c;目前已有超过1900个图标。你可以按照主题浏览&#xff0c;生成自己的图标&#xff0c;或者下载整个图标集。所有图标都可以在个人或…...

C++--string的模拟实现

一,引言 string的模拟实现是只对string对象中给的主要功能经行模拟实现&#xff0c;其目的是加强对string的底层了解&#xff0c;以便于在以后的学习或者工作中更加熟练的使用string。本文中的代码仅供参考并不唯一。 二,默认成员函数 string主要有三个成员变量&#xff0c;…...

JS红宝书笔记 - 3.3 变量

要定义变量&#xff0c;可以使用var操作符&#xff0c;后跟变量名 ES实现变量初始化&#xff0c;因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符&#xff0c;可以创建一个全局变量 如果需要定义…...

2025年低延迟业务DDoS防护全攻略:高可用架构与实战方案

一、延迟敏感行业面临的DDoS攻击新挑战 2025年&#xff0c;金融交易、实时竞技游戏、工业物联网等低延迟业务成为DDoS攻击的首要目标。攻击呈现三大特征&#xff1a; AI驱动的自适应攻击&#xff1a;攻击流量模拟真实用户行为&#xff0c;差异率低至0.5%&#xff0c;传统规则引…...

聚六亚甲基单胍盐酸盐市场深度解析:现状、挑战与机遇

根据 QYResearch 发布的市场报告显示&#xff0c;全球市场规模预计在 2031 年达到 9848 万美元&#xff0c;2025 - 2031 年期间年复合增长率&#xff08;CAGR&#xff09;为 3.7%。在竞争格局上&#xff0c;市场集中度较高&#xff0c;2024 年全球前十强厂商占据约 74.0% 的市场…...

【iOS】 Block再学习

iOS Block再学习 文章目录 iOS Block再学习前言Block的三种类型__ NSGlobalBlock____ NSMallocBlock____ NSStackBlock__小结 Block底层分析Block的结构捕获自由变量捕获全局(静态)变量捕获静态变量__block修饰符forwarding指针 Block的copy时机block作为函数返回值将block赋给…...

Mysql故障排插与环境优化

前置知识点 最上层是一些客户端和连接服务&#xff0c;包含本 sock 通信和大多数jiyukehuduan/服务端工具实现的TCP/IP通信。主要完成一些简介处理、授权认证、及相关的安全方案等。在该层上引入了线程池的概念&#xff0c;为通过安全认证接入的客户端提供线程。同样在该层上可…...

文件上传漏洞防御全攻略

要全面防范文件上传漏洞&#xff0c;需构建多层防御体系&#xff0c;结合技术验证、存储隔离与权限控制&#xff1a; &#x1f512; 一、基础防护层 前端校验&#xff08;仅辅助&#xff09; 通过JavaScript限制文件后缀名&#xff08;白名单&#xff09;和大小&#xff0c;提…...

STM32标准库-ADC数模转换器

文章目录 一、ADC1.1简介1. 2逐次逼近型ADC1.3ADC框图1.4ADC基本结构1.4.1 信号 “上车点”&#xff1a;输入模块&#xff08;GPIO、温度、V_REFINT&#xff09;1.4.2 信号 “调度站”&#xff1a;多路开关1.4.3 信号 “加工厂”&#xff1a;ADC 转换器&#xff08;规则组 注入…...

webpack面试题

面试题&#xff1a;webpack介绍和简单使用 一、webpack&#xff08;模块化打包工具&#xff09;1. webpack是把项目当作一个整体&#xff0c;通过给定的一个主文件&#xff0c;webpack将从这个主文件开始找到你项目当中的所有依赖文件&#xff0c;使用loaders来处理它们&#x…...

node.js的初步学习

那什么是node.js呢&#xff1f; 和JavaScript又是什么关系呢&#xff1f; node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说&#xff0c; 需要在node.js的环境上进行当JavaScript作为前端开发语言来说&#xff0c;需要在浏览器的环境上进行 Node.js 可…...

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践&#xff0c;很多人以为AI已经强大到不需要程序员了&#xff0c;其实不是&#xff0c;AI更加需要程序员&#xff0c;普通人…...

【若依】框架项目部署笔记

参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作&#xff1a; 压缩包下载&#xff1a;http://download.redis.io/releases 1. 上传压缩包&#xff0c;并进入压缩包所在目录&#xff0c;解压到目标…...

深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙

WebGL&#xff1a;在浏览器中解锁3D世界的魔法钥匙 引言&#xff1a;网页的边界正在消失 在数字化浪潮的推动下&#xff0c;网页早已不再是静态信息的展示窗口。如今&#xff0c;我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室&#xff0c;甚至沉浸式的V…...

2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版

1.题目描述 2.思路 当前的元素可以重复使用。 &#xff08;1&#xff09;确定回溯算法函数的参数和返回值&#xff08;一般是void类型&#xff09; &#xff08;2&#xff09;因为是用递归实现的&#xff0c;所以我们要确定终止条件 &#xff08;3&#xff09;单层搜索逻辑 二…...

数据库正常,但后端收不到数据原因及解决

从代码和日志来看&#xff0c;后端SQL查询确实返回了数据&#xff0c;但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离&#xff0c;并且ai辅助开发的时候&#xff0c;很容易出现前后端变量名不一致情况&#xff0c;还不报错&#xff0c;只是单…...

Java数组Arrays操作全攻略

Arrays类的概述 Java中的Arrays类位于java.util包中&#xff0c;提供了一系列静态方法用于操作数组&#xff08;如排序、搜索、填充、比较等&#xff09;。这些方法适用于基本类型数组和对象数组。 常用成员方法及代码示例 排序&#xff08;sort&#xff09; 对数组进行升序…...

链式法则中 复合函数的推导路径 多变量“信息传递路径”

非常好&#xff0c;我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题&#xff0c;统一使用 二重复合函数&#xff1a; z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y))​ 来全面说明。我们会展示其全微分形式&#xff08;偏导…...

Python学习(8) ----- Python的类与对象

Python 中的类&#xff08;Class&#xff09;与对象&#xff08;Object&#xff09;是面向对象编程&#xff08;OOP&#xff09;的核心。我们可以通过“类是模板&#xff0c;对象是实例”来理解它们的关系。 &#x1f9f1; 一句话理解&#xff1a; 类就像“图纸”&#xff0c;对…...

ThreadLocal 源码

ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物&#xff0c;因为每个访问一个线程局部变量的线程&#xff08;通过其 get 或 set 方法&#xff09;都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段&#xff0c;这些类希望将…...

Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合

无论是python&#xff0c;或者java 的大型项目中&#xff0c;都会涉及到 自身平台微服务之间的相互调用&#xff0c;以及和第三发平台的 接口对接&#xff0c;那在python 中是怎么实现的呢&#xff1f; 在 Python Web 开发中&#xff0c;FastAPI 和 Django 是两个重要但定位不…...

rm视觉学习1-自瞄部分

首先先感谢中南大学的开源&#xff0c;提供了很全面的思路&#xff0c;减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接&#xff1a;https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架&#xff1a; 代码框架结构&#xff1a;readme有…...

高分辨率图像合成归一化流扩展

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 1 摘要 我们提出了STARFlow&#xff0c;一种基于归一化流的可扩展生成模型&#xff0c;它在高分辨率图像合成方面取得了强大的性能。STARFlow的主要构建块是Transformer自回归流&#xff08;TARFlow&am…...

负载均衡器》》LVS、Nginx、HAproxy 区别

虚拟主机 先4&#xff0c;后7...

命令行关闭Windows防火墙

命令行关闭Windows防火墙 引言一、防火墙:被低估的"智能安检员"二、优先尝试!90%问题无需关闭防火墙方案1:程序白名单(解决软件误拦截)方案2:开放特定端口(解决网游/开发端口不通)三、命令行极速关闭方案方法一:PowerShell(推荐Win10/11)​方法二:CMD命令…...

算法—栈系列

一&#xff1a;删除字符串中的所有相邻重复项 class Solution { public:string removeDuplicates(string s) {stack<char> st;for(int i 0; i < s.size(); i){char target s[i];if(!st.empty() && target st.top())st.pop();elsest.push(s[i]);}string ret…...

leetcode73-矩阵置零

leetcode 73 思路 记录 0 元素的位置&#xff1a;遍历整个矩阵&#xff0c;找出所有值为 0 的元素&#xff0c;并将它们的坐标记录在数组zeroPosition中置零操作&#xff1a;遍历记录的所有 0 元素位置&#xff0c;将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...