数据库——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(Remote Dictionary Server)是一个开源的、高性能的内存键值数据库系统,具有以下核心特点: 内存存储架构:数据主要存储在内存中,提供微秒级的读写响应 多数据结构支持&…...

Java后端检查空条件查询
通过抛出运行异常:throw new RuntimeException("请输入查询条件!");BranchWarehouseServiceImpl.java // 查询试剂交易(入库/出库)记录Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…...
WEB3全栈开发——面试专业技能点P4数据库
一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库,基于 mysql 库改进而来,具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点: 支持 Promise / async-await…...

PH热榜 | 2025-06-08
1. Thiings 标语:一套超过1900个免费AI生成的3D图标集合 介绍:Thiings是一个不断扩展的免费AI生成3D图标库,目前已有超过1900个图标。你可以按照主题浏览,生成自己的图标,或者下载整个图标集。所有图标都可以在个人或…...

C++--string的模拟实现
一,引言 string的模拟实现是只对string对象中给的主要功能经行模拟实现,其目的是加强对string的底层了解,以便于在以后的学习或者工作中更加熟练的使用string。本文中的代码仅供参考并不唯一。 二,默认成员函数 string主要有三个成员变量,…...
JS红宝书笔记 - 3.3 变量
要定义变量,可以使用var操作符,后跟变量名 ES实现变量初始化,因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符,可以创建一个全局变量 如果需要定义…...
2025年低延迟业务DDoS防护全攻略:高可用架构与实战方案
一、延迟敏感行业面临的DDoS攻击新挑战 2025年,金融交易、实时竞技游戏、工业物联网等低延迟业务成为DDoS攻击的首要目标。攻击呈现三大特征: AI驱动的自适应攻击:攻击流量模拟真实用户行为,差异率低至0.5%,传统规则引…...

聚六亚甲基单胍盐酸盐市场深度解析:现状、挑战与机遇
根据 QYResearch 发布的市场报告显示,全球市场规模预计在 2031 年达到 9848 万美元,2025 - 2031 年期间年复合增长率(CAGR)为 3.7%。在竞争格局上,市场集中度较高,2024 年全球前十强厂商占据约 74.0% 的市场…...

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

Mysql故障排插与环境优化
前置知识点 最上层是一些客户端和连接服务,包含本 sock 通信和大多数jiyukehuduan/服务端工具实现的TCP/IP通信。主要完成一些简介处理、授权认证、及相关的安全方案等。在该层上引入了线程池的概念,为通过安全认证接入的客户端提供线程。同样在该层上可…...
文件上传漏洞防御全攻略
要全面防范文件上传漏洞,需构建多层防御体系,结合技术验证、存储隔离与权限控制: 🔒 一、基础防护层 前端校验(仅辅助) 通过JavaScript限制文件后缀名(白名单)和大小,提…...

STM32标准库-ADC数模转换器
文章目录 一、ADC1.1简介1. 2逐次逼近型ADC1.3ADC框图1.4ADC基本结构1.4.1 信号 “上车点”:输入模块(GPIO、温度、V_REFINT)1.4.2 信号 “调度站”:多路开关1.4.3 信号 “加工厂”:ADC 转换器(规则组 注入…...
webpack面试题
面试题:webpack介绍和简单使用 一、webpack(模块化打包工具)1. webpack是把项目当作一个整体,通过给定的一个主文件,webpack将从这个主文件开始找到你项目当中的所有依赖文件,使用loaders来处理它们&#x…...
node.js的初步学习
那什么是node.js呢? 和JavaScript又是什么关系呢? node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说, 需要在node.js的环境上进行当JavaScript作为前端开发语言来说,需要在浏览器的环境上进行 Node.js 可…...

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

【若依】框架项目部署笔记
参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作: 压缩包下载:http://download.redis.io/releases 1. 上传压缩包,并进入压缩包所在目录,解压到目标…...
深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙
WebGL:在浏览器中解锁3D世界的魔法钥匙 引言:网页的边界正在消失 在数字化浪潮的推动下,网页早已不再是静态信息的展示窗口。如今,我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室,甚至沉浸式的V…...

2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版
1.题目描述 2.思路 当前的元素可以重复使用。 (1)确定回溯算法函数的参数和返回值(一般是void类型) (2)因为是用递归实现的,所以我们要确定终止条件 (3)单层搜索逻辑 二…...
数据库正常,但后端收不到数据原因及解决
从代码和日志来看,后端SQL查询确实返回了数据,但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离,并且ai辅助开发的时候,很容易出现前后端变量名不一致情况,还不报错,只是单…...

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

链式法则中 复合函数的推导路径 多变量“信息传递路径”
非常好,我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题,统一使用 二重复合函数: z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y)) 来全面说明。我们会展示其全微分形式(偏导…...
Python学习(8) ----- Python的类与对象
Python 中的类(Class)与对象(Object)是面向对象编程(OOP)的核心。我们可以通过“类是模板,对象是实例”来理解它们的关系。 🧱 一句话理解: 类就像“图纸”,对…...
ThreadLocal 源码
ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物,因为每个访问一个线程局部变量的线程(通过其 get 或 set 方法)都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段,这些类希望将…...
Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合
无论是python,或者java 的大型项目中,都会涉及到 自身平台微服务之间的相互调用,以及和第三发平台的 接口对接,那在python 中是怎么实现的呢? 在 Python Web 开发中,FastAPI 和 Django 是两个重要但定位不…...

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

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

负载均衡器》》LVS、Nginx、HAproxy 区别
虚拟主机 先4,后7...
命令行关闭Windows防火墙
命令行关闭Windows防火墙 引言一、防火墙:被低估的"智能安检员"二、优先尝试!90%问题无需关闭防火墙方案1:程序白名单(解决软件误拦截)方案2:开放特定端口(解决网游/开发端口不通)三、命令行极速关闭方案方法一:PowerShell(推荐Win10/11)方法二:CMD命令…...

算法—栈系列
一:删除字符串中的所有相邻重复项 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 元素的位置:遍历整个矩阵,找出所有值为 0 的元素,并将它们的坐标记录在数组zeroPosition中置零操作:遍历记录的所有 0 元素位置,将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...