【Redis】背景知识

一、Redis的特性

       Redis是一种基于键值对(key-value)的NoSQL数据库,与很多键值对数据库不同的是,Redis中的值可以是由string(字符串),hash(哈希),list(列表),set(集合),zset(有序集合),Bitmaps(位图)等多种数据结构和算法组成,因此Redis可以满足很多的应用场景,而且因为Redis会将所有数据都存放在内存中,所以他的读写性能非常惊人。不仅如此,Redis还可以将内存的数据利用快照和日志的形式保存到硬盘中,这样在发生类似断电或者机器故障的时候,内存中的数据不会“丢失”。除了上述功能以外,Redis还提供了键过期、发布订阅、事务、流水线、Lua脚本等附加功能。总之,如果在合适的场景使用好Redis,就会像一把利剑。

       Redis是一个在内存中存储数据的中间件,用于作为数据库,用于作为数据缓存,在分布式系统中能够大展拳脚。 

1.1 速度快

正常情况下,Redis执行命令的速度非常快,为什么速度快呢??

  • Redis的所有数据都是存放在内存中的
  • Redis是用C语言实现的,一般来说,C语言实现的程序距离操作系统更近,执行速度相对会更快。(个人不认为,因为MySQL也是用C语言开发的)
  • Redis使用单线程,预防了多线程可能产生的竞争问题。(Redis在6.0版本中引入了多线程机制,但是主要也是在处理网络和IO,不涉及到数据命令,即命令的执行仍然采用了单线程模式)
  • Redis的核心功能都是比较简单的逻辑,核心功能都是比较简单的操作内存的数据结构
  • 从网络角度上,Redis使用了IO多路复用的方式(epoll)

多线程并不是在所有情况下都是快的!!!!!

       多线程提高效率的前提是:CPU密集型的任务,使用多个线程可以充分的利用CPU多核资源,但是Redis的核心任务主要是操作内存的数据结构——不会吃很多CPU

1.2 基于键值对的数据结构服务器

       几乎所有的编程语言都提供了类似字典的功能,例如C++中的map,Java中的map,Python的dict等,类似于这种组织数据的方式叫做基于键值对的方式,与很多的键值对数据库不同的是,Redis中的值不仅可以是字符串,而且还可以是具体的数据结构,这样不仅能便于在许多应用场景的开发,同时也能提供开发效率。

1.3 丰富的功能

除了5种数据结构,Redis还提供了许多额外的功能:

  • 提供了键过期功能,可以用来使用缓存
  • 提供了发布订阅功能,可以用来实现消息系统
  • 支持Lua脚本功能,可以利用Lua创造出新的Redis命令
  • 提供了简单的事务功能,能在一定程序上保证事务特性
  • 提供了流水线功能,这样客户端能将一批命令一次性传到Redis,减少了网络的开销

1.4 客户端语言多

       Redis提供了简单的TCP通信协议,很多编程语言可以很方便地接入到Redis,并且由于Redis受到了社区和各大公司的广泛认可,所以支持Redis的客户端语言也非常多,几乎涵盖了主流的编程语言,例如C/C++,Java等。

1.5 持久化

       通常来说,将数据放在内存中是不安全的,一旦发生断电或者机器故障,重要的数据可能就会丢失,因此Redis提供了两种持久化方式:RDB和AOF,即可以使用两种策略将内存的数据保存到硬盘中,这样就保证了数据的可持久性。

1.6 主从复制

       Redis提供了复制功能,实现了多个相同数据的Redis副本,复制功能是分布式Redis的基础。

1.7 高可用和分布式

       Redis提供了高可用实现的Redis哨兵,能够保证Redis节点的故障发现和故障自动转移,也实现了Redis集群,是真正的分布式实现,提供了高可用,读写和容量的扩展性。

二、Redis的使用场景

2.1 Redis可以做什么

缓存

       缓存机制几乎在所有大型网站中都有使用,合理地使用缓存不仅可以加速数据的访问速度,而且能够有效地降低后端数据源的压力。Redis提供了键值过期时间设置,并且也提供了灵活控制最大内存和内存溢出后的淘汰策略。

session storage 

       cookie(只是在浏览器这边存储了一个用户的身份标识sessionid)=>实现用户身份信息的保存,需要session配合(session是存放在服务器上的)

如何解决上述问题?

  1. 想办法让负载均衡器把同一个用户的请求始终打到同一台机器上(不能轮询,而是需要通过userid之类的方式来分配机器)
  2. 把会话数据单独拎出来,放到一组独立的机器上存储(Redis) 

数据库存储

       将Redis当做了数据库,大多数情况下,考虑到数据存储优先考虑的是“大”,但是仍然有一些场景考虑的是“快”。例如:搜索引擎对性能的要求非常高,其中没有使用到MySQL这样的数据库,把所有需要检索的数据存放在内存中,使用类似于Redis这样的内存数据库来完成的。

消息队列系统

       消息队列系统可以说是一个大型网站的必备基础组件,因为其具有业务解耦、非实时业务削峰等特性。Redis提供了发布订阅功能和阻塞队列的功能,虽然和专业的消息队列比还不够足够强大,但是对于一般的消息队列功能基本可以满足。

2.2 Redis不可以做什么

       站在数据规模的角度看,数据可以分为大规模数据和小规模数据,我们知道Redis的数据是存放在内存中的,虽然现在内存已经足够便宜了,但是如果数据量非常大,使用Redis来进行存储的话,基本是一个无底洞,经济成本相当高。

       站在数据冷热的角度,数据分为热数据和冷数据,热数据通常是指需要频繁操作的数据,反之为冷数据。如果将冷数据放在Redis上,基本上是对于内存的一种浪费,但是对于一些热数据可以放在Redis中加速读写,也可以减轻后端存储的负载,可以说是事半功倍。

三、Redis的安装(Ubuntu)

       安装Redis5 系列,在Linux中进行安装,Redis官方是不支持Windows版本的,微软维护了一个Windows版本的Redis分支。

在Ubuntu中的安装步骤如下:

  1. 先切换到root用户,su命令切换到root
  2. 使用apt命令来搜索redis相关的软件包,apt search redis
  3. 使用apt命令安装redis,apt install redis
  4. 需要手动修改配置文件(redis.conf),将ip进行更改
  5. 重新启动服务器,service redis-server restart
  6. 使用redis自带的客户端来连接服务器,redis-cli
  7. 使用ctrl + d 退出客户端

什么是配置文件?

       很多软件都是有配置文件的,一个大的软件里面包含了很多的功能,有很多可以定制化的操作,就可以通过配置文件选择开启/关闭/设定某些功能~

四、Redis客户端介绍

Redis是一个客户端-服务器结构的程序!!!(MySQL也是)

Redis的客户端也有很多种形态:

  1. 自带了命令行客户端:redis-cli
  2. 图形化界面的客户端:桌面程序,web程序(像这样的图形化程序,依赖windows系统,而未来会有诸多限制,你的windows上的图形化界面客户端能不能连上你们的服务器里的redis,是一个未知数)
  3. 基于Redis的api自行开发客户端:非常类似于mysql的C语言和JDBC

我们在来回顾一下Redis的快:

       我们谈到的redis的快是相对于MySQL这样的关系型数据库的,但是如果是直接和内存中的操作变量相比,就没有优势了,甚至更慢了!!!

  • 使用hash map是直接操作内存,使用redis是先通过网络,在操作内存

我们需要对症下药(具体问题具体分析):

  • 上述场景中,是否需要使用redis,需要结合实际的需求来确定!!!
  • 引入Redis的缺点:会更慢,但是有了Redis之后,我们可以将其扩展为分布式,也可以将数据单独存储,后续服务器重启,不会影响到数据内容。

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

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

相关文章

Redis的used_memory_peak_perc和used_memory_dataset_perc超过90%会怎么样

当Redis的used_memory_peak_perc(当前内存占历史峰值的百分比)和used_memory_dataset_perc(数据集内存占比)均超过90%时,可能引发以下问题及风险: 一、used_memory_peak_perc > 90% 的影响 内存交换风险…

嵌入式---灰度传感器

灰度传感器概览 一、定义与核心功能 1. 定义 灰度传感器是一种基于 光反射原理 的光电传感器,通过检测物体表面对入射光(多为红外光或可见光)的反射强度,将光信号转换为电信号,从而判断目标物体的 灰度值&#xff0…

0303hooks-react-仿低代码平台项目

文章目录 1. 副作用2.其他内置hooks2.1 useEffect2.2 useRef2.3useMemo2.4 useCallback 3.自定义hooks4. 第三方hooks5. hooks使用原则6. hooks闭包陷阱7. 总结结语 1. 副作用 当组件渲染完成时,加载一个Ajax网络请求当某个state更新时,加载一个Ajax网络…

Zephyr、FreeRTOS、RT-Thread 定时器区别分析

一、核心特性对比 特性ZephyrFreeRTOSRT-Thread定时器类型系统定时器(k_timer)、硬件定时器软件定时器(基于系统tick)软件定时器、硬件定时器定时模式单次、周期性单次、自动重载(周期性)单次、周期、自定…

手撕unique_ptr 和 shareed_ptr

文章目录 unique_ptrshared_ptr unique_ptr template<class T> class Unique_ptr { private:T* ptrNULL; public://1、删除默认的拷贝构造函数Unique_ptr(Unique_ptr& u) delete;//2、删除默认的复制构造Unique_ptr& operator(Unique_ptr& u) delete; …

对比 HashMap 和 ConcurrentHashMap 扩容逻辑的差异

HashMap 和 ConcurrentHashMap 在 扩容逻辑 上有明显的差异&#xff0c;尤其是在并发环境下的处理策略&#xff0c;这是它们核心区别之一。 &#x1f9f1; 一、总体对比表&#xff08;JDK 8 为例&#xff09; 特性HashMapConcurrentHashMap线程安全❌ 否✅ 是是否支持并发扩容…

Linux 的准备工作

1.root用户登录 首先讲一下root账户怎么登陆 直接 ssh root 公ip地址就可以了 比如我的是腾讯云的 这个就是公ip 下面所有普通用户的操作都是在root账户下进行的 2.普通用户创建 创建用户指令 adduser 用户名 比如说这个指令 我创建了一个ly_centos的普通用户 3.普通用…

自动变为 VIP 文章

今天突然发现自己写的大部分文章都被自动设为了VIP文章。 我这才想起来以前好像填过一个什么表&#xff0c;说要允许CS-DN把自己写的文章自动设为VIP文章。 我也忘了为啥要允许CSDN动我写的文章了&#xff0c;把几乎所有文章都给设为VIP显然是不合适的&#xff0c;毕竟文章是给…

Vue3+Vite+TypeScript+Element Plus开发-08.登录设计

系列文档目录 Vue3ViteTypeScript安装 Element Plus安装与配置 主页设计与router配置 静态菜单设计 Pinia引入 Header响应式菜单缩展 Mockjs引用与Axios封装 登录设计 登录成功跳转主页 多用户动态加载菜单 文章目录 目录 系列文档目录 文章目录 前言 一、登录mo…

全新二手罗德SMCV100B信号发生器SMBV100A

全新二手罗德SMCV100B信号发生器SMBV100A SMCV100B信号发生器SMBV100A主要特点 适用于广播电视、导航、蜂窝和无线应用的多标准平台 全软件选件定义的矢量信号发生器&#xff0c;具备 5″ 触摸屏 全新的射频信号生成概念&#xff0c;频率范围介于 4 kHz 至 7.125 GHz 输出功率…

spring mvc @ResponseBody 注解转换为 JSON 的原理与实现详解

ResponseBody 注解转换为 JSON 的原理与实现详解 1. 核心作用 ResponseBody 是 Spring MVC 的一个注解&#xff0c;用于将方法返回的对象直接序列化为 HTTP 响应体&#xff08;如 JSON 或 XML&#xff09;&#xff0c;而不是通过视图解析器渲染为视图&#xff08;如 HTML&…

OpenCV——图像融合

OpenCV——图像融合 一、引言1.1 图像融合分类 二、C代码实现三、效果展示3.1 标准球3.2 铝制底座 一、引言 在许多计算机视觉应用中(例如机器人运动和医学成像)&#xff0c;需要将来自多幅图像的相关信息集成到一幅图像中。这种图像融合将提供更高的可靠性、准确性和数据质量…

机器学习之PCA主成分分析详解

文章目录 引言一、PCA的概念二、PCA的基本数学原理2.1 内积与投影2.2 基2.3 基变换2.4 关键问题及优化目标2.5 方差2.6 协方差2.7 协方差矩阵2.8 协方差矩阵对角化 三、PCA执行步骤总结四、PCA参数解释五、代码实现六、PCA的优缺点七、总结 引言 在机器学习领域&#xff0c;我…

springboot自动配置原理例子讲解

Spring Boot 的自动配置是其核心特性之一&#xff0c;它帮助开发者**"开箱即用"**地使用各种第三方库或 Spring 组件&#xff0c;而无需手动配置 Bean。这一切的背后&#xff0c;都依赖于 Spring Boot 的自动配置机制。 我们分两部分来说&#xff1a; Spring Boot 自…

一款基于 .NET 8 + Vue 开源的、企业级中后台权限管理系统

前言 今天大姚给大家分享一款基于 .NET 8 Vue 开源、前后端分离的企业级中后台权限管理系统&#xff0c;助力快速完成常规业务需求开发&#xff1a;ApeVolo.Admin。 项目介绍 ApeVolo.Admin 一款基于.NET 8、SqlSugar、Vue、Elment UI、RBAC、前后端分离、开源&#xff08;…

vue3腾讯云直播 前端推流

1、在index.html文件中引入&#xff08;在body体中&#xff09; <script src"https://video.sdk.qcloudecdn.com/web/TXLivePusher-2.1.1.min.js" charset"utf-8"></script> 2、vue文件中&#xff0c;添加video推流&#xff08;我用的推流地…

蓝叠模拟器过检测全攻略

BlueStacks蓝叠MagiskLsposed安装和过应用检测教程 蓝叠MagiskLsposed安装和过应用检测教程 引言 蓝叠模拟器凭借其出色的性能和兼容性&#xff0c;在电脑上运行安卓应用和游戏方面备受青睐。然而&#xff0c;众多应用和游戏为确保公平性与安全性&#xff0c;加入了模拟器检测…

Flutter Invalid constant value.

0x00 问题 参数传入变量&#xff0c;报错&#xff01; 代码 const Padding(padding: EdgeInsets.all(20),child: GradientProgressIndicator(value: _progress), ),_progress 参数报错&#xff1a;Invalid constant value. 0x01 原因 这种情况&#xff0c;多发生于&#xff…

搜广推校招面经七十一

滴滴算法工程师面经 一、矩阵分解的原理与优化意义 矩阵分解在推荐系统中是一个非常核心的方法&#xff0c;尤其是在 协同过滤(Collaborative Filtering) 中。我们可以通过用户对物品的评分行为来推测用户的喜好&#xff0c;从而推荐他们可能喜欢的内容。 1.1. 直观理解&…

实习技能记录【2】-----LVGL[基本概念]

LVGL主要概念 1. Screen (屏幕): 概念: 屏幕是 LVGL 应用程序中的顶层容器。它是用户界面的根对象&#xff0c;所有的可见 UI 元素最终都会添加到某个屏幕上&#xff08;通常是活动屏幕&#xff09;。 功能: 作为其他 UI 元素的父对象。 可以拥有自己的背景颜色、背景图片等样…