3.3日学习打卡----初学Redis(一)

news2024/12/24 10:24:01

3.3日学习打卡

目录:

  • 3.3日学习打卡
  • NoSQL
    • 为什么要用NoSQL
    • 什么是NoSQL?
    • NoSQL的四大分类
    • 关系型数据库和非关系型数据及其区别
    • NoSQL经典应用
  • Redis
    • Redis是什么?
    • Linux下安装Redis
    • Docker下安装Redis
    • 基本知识

NoSQL

在这里插入图片描述

为什么要用NoSQL

单机Mysql的美好年代
在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付。在那个时候,更多的都是静态网页,动态交互类型的网站不多。
在这里插入图片描述

遇到问题:
随着用户数的增长,Tomcat和数据库之间竞争资源,单机性能不足以支撑业务。

Tomcat与数据库分开部署

Tomcat和数据库分别独占服务器资源,显著提高两者各自性能。
在这里插入图片描述

新的问题:
随着用户数的增长,并发读写数据库成为瓶颈。

引入本地缓存和分布式缓存

通过缓存能把绝大多数请求在读写数据库前拦截掉,大大降低数据库压力。其中涉及的技术包括:使用memcached作为本地缓存,使用Redis作为分布式缓存。
在这里插入图片描述

注意:
缓存抗住了大部分的访问请求,随着用户数的增长,并发压力主要落在单机的Tomcat上,响应逐渐变慢。

引入反向代理实现负载均衡

在多台服务器上分别部署Tomcat,使用反向代理软件(Nginx)把请求均匀分发到每个Tomcat中。
在这里插入图片描述

新的挑战:
反向代理使应用服务器可支持的并发量大大增加,但并发量的增长也意味着更多请求穿透到数据库,单机的数据库最终成为瓶颈。

数据库读写分离

由于数据库的写入压力增加,Memcached只能缓解数据库的读取压力。读写集中在一个数据库上让数据库不堪重负,大部分网站开始使用主从复制技术来达到读写分离,以提高读写性能和读库的可扩展性。Mysql的master-slave模式成为这个时候的网站标配了
在这里插入图片描述

新的挑战:
业务逐渐变多,不同业务之间的访问量差距较大,不同业务直接竞争数据库,相互影响性能。

数据库按业务分库

把不同业务的数据保存到不同的数据库中,使业务之间的资源竞争降低,对于访问量大的业务,可以部署更多的服务器来支撑。
在这里插入图片描述
为什么用NoSQL

用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL数据库的发展也却能很好的处理这些大的数据。
在这里插入图片描述

什么是NoSQL?

在这里插入图片描述

NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付特别是超大规模和高并发类型纯动态网站已经显得力不从心,暴露了很多难以克服的问题。

结构化数据和非结构化数据
在这里插入图片描述

  • 结构化数据指的是由二维表结构来逻辑表达和实现的数据,严格遵循数据格式与长度规范,也称作为行数据。
  • 非结构化数据,指的是数据结构不规则或不完整,没有任何预定义的数据模型,不方便用二维逻辑表来表现的数据,例如办公文档(Word)、文本、图片、HTML、各类报表、视频音频等。

NoSQL的四大分类

KV型NoSql(代表----Redis)

KV型NoSql顾名思义就是以键值对形式存储的非关系型数据库,是最简单、最容易理解也是大家最熟悉的一种NoSql,因此比较快地带过。

特点:

  • 数据基于内存,读写效率高
  • KV型数据,时间复杂度为O(1),查询速度快

注意
KV型NoSql最大的优点就是高性能,利用Redis自带的BenchMark做基准测试,TPS可达到10万的级别,性能非常强劲。

列式NoSql(代表----HBase)
列式NoSql,大数据时代最具代表性的技术之一了,以HBase为代表。

关系行数据库数据在这里插入图片描述

注意
看到每行有name、phone、address三个字段,这是行式存储的方式,且可以观察id = 2的这条数据,即使phone字段没有,它也是占空间的。

列式数据库数据
在这里插入图片描述

注意
查询时只有指定的列会被读取,不会读取所有列
列数据被组织到一起,一次磁盘IO可以将一列数据一次性读取到内存中

文档型NoSql(代表----MongoDB)

什么是文档型NoSql呢,文档型NoSql指的是将半结构化数据存储为文档的一种NoSql,文档型NoSql通常以JSON或者XML格式存储数据。
在这里插入图片描述

注意
关系型数据库是按部就班地每个字段一列存,在MongDB里面就是一个JSON字符串存储。

搜索型NoSql(代表----ElasticSearch)
在这里插入图片描述

传统关系型数据库主要通过索引来达到快速查询的目的,但是在全文搜索的场景下,索引是无能为力的,like查询一来无法满足所有模糊匹配需求,二来使用限制太大且使用不当容易造成慢查询,搜索型NoSql的诞生正是为了解决关系型数据库全文搜索能力较弱的问题,ElasticSearch是搜索型NoSql的代表产品。
在这里插入图片描述

关系型数据库和非关系型数据及其区别

关系型数据库
在这里插入图片描述
关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织
优点

  • 易于维护:都是使用表结构,格式一致;
  • 使用方便:SQL语言通用,可用于复杂查询;
  • 复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。

缺点

  • 读写性能比较差,尤其是海量数据的高效率读写;
  • 固定的表结构,灵活度稍欠;

非关系型数据库
在这里插入图片描述
优点:

  • 格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
  • 速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;
  • 高扩展性;
  • 成本低:nosql数据库部署简单,基本都是开源软件。

缺点:

  • 不提供sql支持,学习和使用成本较高;

  • 无事务处理;

  • 数据结构相对复杂,复杂查询方面稍欠。

NoSQL经典应用

在这里插入图片描述

当下应用是SQL和NoSQL一起使用
在这里插入图片描述
淘宝商品信息如何存放
在这里插入图片描述
商品基本信息

名称、价格、出厂信息、生产厂商,商家信息等, 关系型数据库就可以解决。

注意
注意,淘宝内部用的Mysql是里面的大牛自己改造过的。

商品描述、详情、评论
在这里插入图片描述
多文件信息描述类,IO读写性能变差不能使用Mysql数据库,使用MongDB。

商品的图片
在这里插入图片描述
分布式文件系统:

  • 淘宝自己的TFS
  • Google的GFS
  • Hadoop的HDFS
  • 阿里云的OSS

商品热门的波段信息

内存数据库 Redis Tair Memache

遇到的问题
数据类型太多
数据源繁多
数据要改造

Redis

在这里插入图片描述

Redis是什么?

Redis是一个使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库。

特性:

  • 基于内存运行,性能高效
  • 支持分布式,理论上可以无限扩展
  • key-value存储系统
  • 开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化* 的日志型、Key-Value数据库,并提供多种语言的API

谁在用Redis

  • Github

  • 京东

  • 微博

  • 阿里巴巴

  • 百度

  • 美团

  • 搜狐

Linux下安装Redis

官网地址

Redis官方网址:https://redis.io/

下载Redis

可以直接使用我提供的 Redis

redis-6.2.4.tar.gz上传至CentOS并解压,解压后得到redis-6.2.4目录

解压命令

tar -zxvf redis-6.2.4.tar.gz

安装GCC

安装C语言编译环境

yum install -y gcc

通过使用gcc --version命令打印 GCC 版本,来验证 GCC 编译器是否被成功安装:

gcc --version

安装Redis
编译Redis
在redis-6.2.4目录下执行:

make

在这里插入图片描述
安装Redis

在redis-6.2.4目录下执行:

make install

在这里插入图片描述

安装目录: /usr/local/bin

在这里插入图片描述

注意
redis-benchmark:Redis自带的基准性能测试工具
redis-check-aof:对有问题的 AOF 文件进行修复,AOF和RDB文件后面会说明
redis-check-rdb:对有问题的 RDB文件进行修复
redis-sentinel:Redis集群使用
redis-cli:客户端
redis-server:服务器启动

服务启动

前台启动:/usr/local/bin下执行

./redis-server

后台启动

修改redis.conf文件

daemonize  yes   #由no改为yes

启动服务

./redis-server ../redis.conf

客户端启动
/usr/local/bin下执行

./redis-cli

ping命令可以检测服务器是否正常(服务器返回PONG)

127.0.0.1:6379>  ping
PONG

Docker下安装Redis

在这里插入图片描述
下载最新Redis镜像

docker pull redis

注意:
可以用docker pull redis命令下载最新版本的Redis镜像,也可 以用“docker pull redis:标签”命令下载指定版本的Redis。

启动Redis容器

docker run -itd --name myFirstRedis -p 6379:6379
redis:latest

观察Redis启动效果

docker logs myFirstRedis

注意
如果直接在Linux等环境上启动Redis服务器,就能直接看到启动后的效果。

查看Redis的版本

先确保myFirstRedis容器处于Up状态。进入容器的命令行交互窗口。

docker exec -it myFirstRedis /bin/bash
redis-server --version

Redis服务器和客户端

Redis是基于键值对存储的NoSQL数据库,其中的数据是存储在 Redis服务器里的。和传统的MySQL数据库服务器相似,一个Redis服务器可以同多个客户端创建连接。

docker exec -it myFirstRedis /bin/bash
redis-cli

基本知识

默认16数据库
Redis是一个字典结构的存储服务器,一个Redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中。

这与在一个关系数据库实例中可以创建多个数据库类似(如下图所示),所以可以将其中的每个字典都理解成一个独立的数据库。
在这里插入图片描述
Redis默认支持16个数据库,可以通过调整Redis的配置文件redis/redis.conf中的databases来修改这一个值,设置完毕后重启Redis便完成配置。
在这里插入图片描述
Redis 使用的到底是多线程还是单线程?
因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了。

IO多路复用技术
在这里插入图片描述
redis 采用网络IO多路复用技术来保证在多连接的时候, 系统的高吞吐量。

大白话解释

假设你是一个机场的空管, 你需要管理到你机场的所有的航线, 包括进港,出港, 有些航班需要放到停机坪等待,有些航班需要去登机口接乘客。

最简单的做法,就是你去招一大批空管员,然后每人盯一架飞机, 从进港,接客,排位,出港,航线监控,直至交接给下一个空港,全程监控。

遇到的问题
很快你就发现空管塔里面聚集起来一大票的空管员,交通稍微繁忙一点,新的空管员就已经挤不进来了。
空管员之间需要协调,屋子里面就1, 2个人的时候还好,几十号人以后 ,基本上就成菜市场了。
空管员经常需要更新一些公用的东西,比如起飞显示屏,比如下一个小时后的出港排期,最后你会很惊奇的发现,每个人的时间最后都花在了抢这些资源上。

怎么解决
这个东西叫flight progress strip. 每一个块代表一个航班,不同的槽代表不同的状态,然后一个空管员可以管理一组这样的块(一组航班),而他的工作,就是在航班信息有新的更新的时候,把对应的块放到不同的槽子里面。

结论
在这里插入图片描述

这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程。采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络IO的时间消耗),且Redis在内存中操作数据的速度非常快(内存内的操作不会成为这里的性能瓶颈),主要以上两点造就了Redis具有很高的吞吐量。

切换数据库
语法结构:

select number

示例

# 默认使用 0 号数据库
redis 127.0.0.1:6379> SET db_number 0 
OK
# 使用 1 号数据库
redis 127.0.0.1:6379> SELECT 1   
OK

清空当前库
Redis Flushdb 命令用于清空当前数据库中的所有 key。

语法结构

127.0.0.1:6379> FLUSHDB 

示例

127.0.0.1:6379> FLUSHDB 

通杀全部库
Redis Flushall 命令用于清空整个 Redis 服务器的数据(删除所有数据库的所有 key )。

语法结构

redis 127.0.0.1:6379> FLUSHALL 

示例

 # 清空所有数据库的所有 key
redis 127.0.0.1:6379>flushall   
OK

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力
在这里插入图片描述

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

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

相关文章

【排序】基于快速选择算法的快排实现

目录 一、常用排序算法比较 二、快速选择算法 快速选择 图解快速选择 三、代码实现 一、常用排序算法比较 排序 时间复杂度 空间复杂度 稳定性 插入排序 O(n) O(1) 稳定 希尔排序 O(nlogn)-O(n)取决于增量序列 O(1) 不稳定 选择排序 O(n) O(1) 不稳定 冒泡…

0.8秒一张图40hx矿卡stable diffusion webui 高质极速出图组合(24.3.3)

新消息是。经过三个月的等待,SD Webui (automatic1111)终于推出了新版本1.8.0,本次版本最大的更新,可能就是pytorch更新到2.1.2, 不过还是晚了pytorch 2.2.2版。 不过这版的一些更新,在forget分支上早就实现了,所以。…

Get Your Back Covered! Coverage, CodeCov和Tox

1. Coverage - 衡量测试的覆盖率 我们已经掌握了如何进行单元测试。接下来,一个很自然的问题浮现出来,我们如何知道单元测试的质量呢?这就提出了测试覆盖率的概念。覆盖率测量通常用于衡量测试的有效性。它可以显示您的代码的哪些部分已被测试过,哪些没有。 coverage.py …

市场复盘总结 20240301

仅用于记录当天的市场情况,用于统计交易策略的适用情况,以便程序回测 短线核心:不参与任何级别的调整,采用龙空龙模式 一支股票 10%的时候可以操作, 90%的时间适合空仓等待 二进三: 进级率中 40% 最常用的…

dubbo 与 zk 小结

zk官方注册中心(mulicast zk nacos redis) reference 远程调用 消费者 从zookeeper获取 访问url 注册中心挂了,服务正常访问: 消费者第一次调用将提供方缓存到本地,调用不再访问注册中心 提供者地址改变,…

金南瓜通讯--SECS/GEM程式配方管理recipe是什么

配方在SECS里面成为PPID,叫成recipe 配方有什么用? 设备在针对每款产品,都需要不同的加工工艺,这个加工工艺参数统称配方recipe SECS/GEM对配方描述是什么? process program --- process program is the pre-plann…

猴子吃桃问题(python版)

文章预览: 题目python解法一:运行结果 python解法二:运行结果 python解法三:运行结果 题目 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早…

04-prometheus服务的动态发现

一、概述 目前,我们每增加一个被监控的节点,就需要修改prometheus的配置文件,然后重新加载prometheus服务,这种方式比较繁琐,每次新增、删除被监控节点都需要重新操作一遍,不适合生产环境的大规模监控架构&…

回归预测 | Matlab实现RIME-BP霜冰算法优化BP神经网络多变量回归预测

回归预测 | Matlab实现RIME-BP霜冰算法优化BP神经网络多变量回归预测 目录 回归预测 | Matlab实现RIME-BP霜冰算法优化BP神经网络多变量回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现RIME-BP霜冰算法优化BP神经网络多变量回归预测(完整…

yolov5训练太慢的解决方案

问题原因 训练太慢大多是因为没有安装CUDA和pytorch,导致的只有cpu在跑,显卡没跑 这就是很典型的。 解决方案 第一步:安装CUDA 在本机上面安装CUDA,记住只有N卡可以安装,一开始的电脑是自带CUDA的。 如果不是自带的CUDA&…

MATLAB知识点:for循环的七道经典例题

​讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili 节选自​第4章:MATLAB程序流程控制 (…

贪心的一些题目

题目1&#xff1a;分班 5478. 分班 - AcWing题库 解题 #include<iostream> #include<algorithm> using namespace std; const int N100010; int n,k,l; int a[N]; int main() {scanf("%d%d%d",&n,&k,&l);int mn*k;for(int i1;i<m;i) sc…

opencv实现图像的融合

实现图像的融合并且输出一张jpg格式的照片。 先显示一个彩色图的照片 然后我以彩色方式读取1.png&#xff0c;以灰度图方式读取3.png这张图片&#xff0c;并且用两个窗口独立地去显示(我后来发现不能把灰度图和彩色图相融合) 然后实现两个融合 #include <opencv2/highgu…

使用Matplotlib绘制圆环图

圆环图是饼图的修改版&#xff0c;中间区域被切掉。圆环图更关注使用弧的面积来以最有效的方式表示信息&#xff0c;而不是饼图&#xff0c;饼图更关注比较切片之间的比例面积。圆环图在空间方面更有效&#xff0c;因为圆环图内部的空白空间可用于显示有关圆环图的一些附加信息…

黑科技工具盒源码 好用的手机工具盒iAPP源码

全新推出&#xff01;多功能工具箱&#xff1a;一款实用的手机工具集&#xff0c;提供丰富的免费小工具&#xff0c;操作简便。目前包含六项黑科技功能&#xff0c;分别为QQ云端、短信测压、Q绑查询、照妖镜、chatgpt、网页一键打包APP。工具箱体积小巧&#xff0c;不占内存&am…

自建Web视频会议,视频互动,SFU/MCU融合架构选型方案分析

网络越来越好&#xff0c;大家已经越来越多接受在家在线办公&#xff0c;在线工作越来越离不开视频会议&#xff0c;视频互动&#xff0c;当然云平台很多&#xff0c;但也用不同的需求&#xff0c;很多需要自建平台与自已的业务系统集成对接。因为大家业务系统多是b/s架构。一般…

Go-zero中分布式事务的实现(DTM分布式事务管理器,在一个APi中如何调用两个不同服务的rpc层,并保证两个不同服务之间的业务逻辑同时成功)

涉及到的相关技术 1.DTM分布式事务管理器,解决跨数据库、跨服务、跨语言栈更新数据的一致性问题。 2.SAGA事务模式,SAGA事务模式是DTM中常用的一种模式,简单易上手.(当然还有其它更多的事务模式,这里采用的SAGA只不过是其中一种较为简单的方法) 3.Go-zero框架,ETCD服务注册... …

绝地求生:【2024PGC之路——PUBG电竞积分分布】

亲爱的PUBG电竞爱好者&#xff0c; 你们好&#xff01; 2024年PUBG电竞即将开始&#xff0c;让我们一起深入了解下今年令人激动的PGS 和 PGC赛事积分分配情况。 PUBG GLOBAL SERIES&#xff08;PGS全球系列赛&#xff09;: 积分分布 根据我们之前概述的《PUBG 2024电竞计划》…

[项目设计] 从零实现的高并发内存池(一)

&#x1f308; 博客个人主页&#xff1a;Chris在Coding &#x1f3a5; 本文所属专栏&#xff1a;[高并发内存池] ❤️ 前置学习专栏&#xff1a;[Linux学习] ⏰ 我们仍在旅途 ​ 目录 前言 项目介绍 1.内存池 1.1 什么是内存池 池化技术 内存池 1.2 为什…

P9905 [COCI 2023/2024 #1] AN2DL 【矩阵区间最大值】

文章目录 题目大意1.输入格式2.输出格式3.数据范围与约定 思路维护每一行区间维护每一列区间维护区间最大值code↓ 完结撒花(&#xffe3;▽&#xffe3;) / 题目大意 给定 n , m , r , s n,m,r,s n,m,r,s 和一个 n m n\times m nm 的整数矩阵 A A A&#xff0c;求它每个 …