【学习笔记】数据库 Redis(键值对存储)

news2024/10/23 9:31:24

1.什么是Redis?

Redis(Remote Dictionary Server)是一个开源的、高性能的键值对(Key-Value)存储系统,它也可以作为数据库、缓存和消息代理。

  1. 类型丰富

    • Redis支持多种类型的数据结构,如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等。这些数据结构使得Redis能够用于各种场景,如计数器、队列、排行榜等。
    • 除了基本的数据类型,Redis还支持位图(bitmaps)和HyperLogLogs等高级数据结构,用于实现更复杂的功能,如频率统计、实时分析等。
  2. 高性能

    • Redis将所有数据存储在内存中,这使得读写速度非常快,每秒可以处理超过10万次读写操作。
    • Redis采用了单线程模型和I/O多路复用技术,减少了线程切换和锁开销,提高了性能。
    • Redis提供了多种优化机制,如管道(pipelining)和脚本化(scripting),进一步提高了命令的执行效率。
  3. 持久化

    • Redis支持两种持久化方式:RDB(Redis Database)和AOF(Append Only File)。RDB是一种快照持久化方法,将内存中的数据以二进制文件的形式保存到磁盘;AOF则记录了所有的写操作命令,以文本文件的形式存储。
    • RDB适合于大规模的数据恢复,而AOF则提供了更高级的持久化机制,如自动修复和合并操作。
  4. 支持事务

    • Redis的事务是一组命令的集合,它是原子性的,即要么所有命令都执行,要么都不执行。这保证了数据的一致性。
    • Redis通过MULTI、EXEC、DISCARD和WATCH等命令来实现事务管理。它们允许用户开始一个新的事务、执行事务、丢弃事务或监视一个或多个键的值。
  5. 发布订阅功能

    • Redis提供了一个简单的发布订阅(pub/sub)系统,允许客户端发送和接收消息。
    • 发布者可以使用PUBLISH命令向特定的频道发送消息,而订阅者可以使用SUBSCRIBE命令监听一个或多个频道,并使用PUBLISH命令接收消息。
    • 这可以用于实现实时聊天、实时通知等功能。
  6. 主从复制

    • Redis支持主从复制功能,可以实现数据的备份和负载均衡。
    • 一个Redis服务器可以有多个从服务器,它们可以接受主服务器的数据更新并同步到本地。
    • 主从复制可以用于扩展读取能力,同时也提供了一种简单的故障转移机制。
  7. 集群

    • Redis Cluster是Redis的分布式解决方案,通过分片(sharding)技术将数据分布在多个节点上。
    • Redis Cluster提供了自动分片、高可用性和高可扩展性等功能。它还支持在多个节点之间自动平衡数据和负载。
    • 这可以用于构建大规模的Redis应用,提供更高的性能和可靠性。
  8. 应用场景广泛

    • 由于其丰富的数据类型和高性能特点,Redis被广泛应用于各种场景,如缓存、会话管理、任务队列、实时分析、游戏数据存储等。
    • 许多大型互联网公司和金融公司都使用Redis来提高应用的性能和响应速度。

2.Redis和Mysql的区别和联系;

Redis和MySQL是两种不同类型的数据存储系统,它们在功能、性能和应用场景上有明显的区别。

  1. 数据存储方式

    • MySQL是一个关系型数据库管理系统,它将数据存储在磁盘上的文件中,以表格的形式组织数据,每个表格由行和列组成。
    • Redis则是一个基于内存的键值对存储系统,它将数据直接存储在内存中,并提供多种数据结构的存储,如字符串、哈希、列表、集合和有序集合等。
  2. 数据处理方式

    • MySQL使用结构化查询语言(SQL)进行数据的查询、更新、插入和删除操作,支持复杂的查询和事务处理。
    • Redis则通过命令来执行数据的操作,虽然它也支持某种形式的查询语言(如Redis Query Language,简称RQL),但其功能相对简单,主要面向数据的基本操作。
  3. 性能特点

    • 由于Redis基于内存运行,其读写速度非常快,可以达到每秒数十万次的读写操作,适合对性能要求极高的场景。
    • MySQL的性能虽然也很高,但由于数据存储在磁盘上,其读写速度受到磁盘I/O性能的限制,相对于Redis来说会慢一些。
  4. 持久化机制

    • Redis虽然基于内存,但提供了RDB(快照)和AOF(追加日志文件)两种持久化机制,可以将内存中的数据定期保存到磁盘上,以保证数据的持久性。
    • MySQL则通过将数据直接存储在磁盘上来保证数据的持久性,同时提供了事务支持和自动恢复机制,确保数据的完整性和一致性。
  5. 应用场景

    • Redis常用于缓存、会话管理、实时分析、消息队列等需要快速读写和实时处理的场景。
    • MySQL则适用于需要复杂查询、事务处理、数据分析等场景,广泛用作Web应用和互联网服务的后端数据库。
  6. 关系

    • 在实际的应用中,Redis和MySQL可以相互补充,结合使用。例如,可以使用Redis作为前端的缓存层,处理高频次的读写请求,而MySQL则作为后端的存储层,存储完整的数据并处理复杂的查询。
    • 通过合理的架构设计,可以充分发挥两者的优势,提升系统的整体性能和可扩展性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2221488.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL-事物隔离级别

1. MySQL事物的四种隔离级别 1.1 读未提交(READ UNCOMMITTED) READ UNCOMMITED提供了事物之间最小限度的隔离,除了幻读和不可重复读取的操作外,处于这个隔离级别的事务可以读到其它事务还未提交的数据。 1.2 读已提交&#xf…

利用 Direct3D 绘制几何体—7.编译着色器

在 Direct3D 中,着色器程序必须先被编译为一种可移植的字节码。接下来,图形驱动程序将获取这些字节码,并将其重新编译为针对当前系统 GPU 所优化的本地指令 [ATI1]。我们可以在运行期间用下列函数对着色器进行编译。 HRESULT D3DCompileFrom…

创建型模式-----(单例模式)

目录 基本概念 饿汉式: 懒汉式: 上锁双判空版本 std::call_once版本: C11标准后局部静态变量版本: 项目中单例模板的应用 基本概念 单例模式:在程序运行期间只有一份,与程序生存周期一样,…

对比学习论文随笔 1:正负样本对(Contrastive Learning 基础论文篇)

为了阅读的流畅,当前针对相同的代理任务按时间顺序进行梳理,涉及仅使用正负样本思想且优化目标一致的「基础」论文(2018-2020),编码器均采用 ResNet。 文章目录 前言对比学习和代理任务(Pretext task&#…

浪潮云启操作系统(InLinux)bcache缓存实践:理解OpenStack环境下虚拟机卷、Ceph OSD、bcache设备之间的映射关系

前言 在OpenStack平台上,采用bcache加速ceph分布式存储的方案被广泛用于企业和云环境。一方面,Ceph作为分布式存储系统,与虚拟机存储卷紧密结合,可以提供高可用和高性能的存储服务。另一方面,bcache作为混合存储方案&…

Java笔试06

在Java中,异常可以分为两大类:编译时异常(编译时检查异常)和运行时异常(非编译时检查异常)。 编译时异常(Checked Exceptions)是指在编译时期必须被捕获或声明抛出的异常。这些异常…

字节流写入文件

一、创建输出流对象表示的文件三种方式 方法一: FileOutputStream fos new FileOutputStream("fos.txt",true);//最简便方法二: FileOutputStream fos new FileOutputStream(new File("fos.txt"));方法三; File f ne…

Python | Leetcode Python题解之第502题IPO

题目: 题解: class Solution:def findMaximizedCapital(self, k: int, w: int, profits: List[int], capital: List[int]) -> int:if w > max(capital):return w sum(nlargest(k, profits))n len(profits)curr 0arr [(capital[i], profits[i]…

HTML作业

作业 复现下面的图片 复现结果 代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><form action"#"method"get"enctype"text/plain"><…

Java程序设计:spring boot(7)——数据访问操作

目录 1 查询操作 1.1 接口方法定义 1.2 映射文件配置 1.3 UserService 1.4 UserController 2 添加操作 2.1 接口方式定义 2.2 映射文件配置 2.3 添加 commons-lang3 依赖 2.4 AssertUtil ⼯具类 2.5 ParamsException ⾃定义异常 2.6 UserService 2.7 ResultInfo …

UDP传输协议Linux C语言实战

文章目录 1.UDP简介1.1特点1.2 UDP协议头部格式1.2.1 **UDP头部**&#xff1a;1.2.2 **头部意义**&#xff1a;1.2.3 **头部参数**&#xff1a; 1.3 UDP数据长度控制1.4 UDP协议建立框架 2. 函数介绍2.1 sendto函数2.2 recvform函数2.3 其他函数 3.实例3.1 通用结构体、IPV4结构…

算法的学习笔记—(牛客JZ50)

&#x1f600;前言 在处理字符串时&#xff0c;寻找第一个只出现一次的字符是一项常见的任务。本文将探讨几种有效的解法&#xff0c;包括使用 HashMap 和位集&#xff08;BitSet&#xff09;。 &#x1f3e0;个人主页&#xff1a;尘觉主页 文章目录 &#x1f970;第一个只出现…

软件分享丨豆包电脑端 AI 助手

豆包电脑端 AI 助手是由字节跳动推出&#xff0c;旨在为用户提供高效便捷的工作和学习体验。它能在工作、学习等场景中发挥重要作用&#xff0c;为用户提供智能辅助&#xff0c;下面简单介绍它的特点&#xff1a; 高效搜索&#xff1a;像优化后的百度&#xff0c;直接提问就能…

【本科毕业设计】基于单片机的智能家居防火防盗报警系统

基于单片机的智能家居防火防盗报警系统 相关资料链接下载摘要Abstract第1章 绪论1.1课题的背景1.2 研究的目的和意义 第2章 系统总体方案设计2.1 设计要求2.2 方案选择和论证2.2.1 单片机的选择2.2.2 显示方案的选择 第3章 系统硬件设计3.1 整体方案设计3.1.1 系统概述3.1.2 系…

C#通过异或(^)运算符制作二进制加密(C#实现加密)

快速了解异或运算符&#xff1a; 异或运算符在C#中用 “^” 来表示 口诀&#xff1a;相同取0&#xff0c;相异取1 简单加密解密winform示例&#xff1a; /// <summary>/// 异或运算符加密实现/// </summary>/// <param name"p_int_Num">初始值<…

生成式 AI 与向量搜索如何扩大零售运营:巨大潜力尚待挖掘

在竞争日益激烈的零售领域&#xff0c;行业领导者始终在探索革新客户体验和优化运营的新途径&#xff0c;而生成式 AI 和向量搜索在这方面将大有可为。从个性化营销到高效库存管理&#xff0c;二者在零售领域的诸多应用场景中都展现出变革性潜力&#xff0c;已成为保持行业领先…

云电脑的真实使用体验

最近这几年&#xff0c;关于云电脑的宣传越来越多。 小枣君之前曾经给大家介绍过云电脑&#xff08;链接&#xff09;。简单来说&#xff0c;它属于云计算的一个应用。通过在云端虚拟出一些虚拟电脑&#xff0c;然后让用户可以远程使用&#xff08;仍然需要借助本地电脑&#x…

使用爬虫爬取Python中文开发者社区基础教程的数据

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

CANoe_C#调用CDD和CAPL调用CDD方法对比

引言 在汽车电子系统的开发和测试中,CANoe作为一款强大的网络仿真工具,广泛应用于各种通信协议的模拟和验证。为了实现复杂的测试场景,开发者可以使用不同的编程语言和方法来调用CANoe的功能。其中,C#和CAPL(CANoe Programming Language)是两种常用的编程方式。本文将对…

Golang | Leetcode Golang题解之第498题对角线遍历

题目&#xff1a; 题解&#xff1a; func findDiagonalOrder(mat [][]int) []int {m, n : len(mat), len(mat[0])ans : make([]int, 0, m*n)for i : 0; i < mn-1; i {if i%2 1 {x : max(i-n1, 0)y : min(i, n-1)for x < m && y > 0 {ans append(ans, mat[x…