【redis】非关系型数据库——Redis介绍与安装(windows环境)

目录

  • 数据库架构的演化
    • 单体架构
    • 缓存(Memcached)+MySQL集群
    • 缓存(Memcached可以)+MySQL集群+垂直拆分(主从复制,读写分离)
    • 缓存(Redis)+MySQL集群+垂直拆分+分库分表
  • NoSQL
    • NoSQL产生的背景
    • 性能需求
    • MySQL的扩展性瓶颈方面
    • 什么是NoSQL
    • NoSQL的特点
    • 主流的NoSQL数据库类型
    • 阿里巴巴数据架构分析
      • 商品的基本信息存入关系型数据库:
      • 商品的描述、详情、评论(文字比较多):
      • 热点商品:
      • 商品的图片存储:
      • 商品的搜索商品:
  • Redis简介
    • 什么是Redis
    • Redis的优势(特性)
    • Redis的缺点
    • Redis的使用场景
    • Redis的五大数据类型
      • 三种特殊的数据类型
  • Redis安装(Windows环境)
    • 下载地址
    • 解压缩
    • redis设置
      • 设置密码
      • 后台启动
      • 设置允许远程连接
    • 启动redis服务端
      • 通过双击redis-server.exe文件启动
      • 通过cmd命令方式进行启动
    • 启动redis客户端
    • Redis的图形化管理工具
      • Redis Desktop Manager:
      • AnotherRedisDesktopManager
      • RedisPlus
      • Redis Insight
  • Redis的基础知识
    • Redis默认有16个数据库:
    • Redis的默认端口是 6379
    • Redis是单线程的()
    • Redis 为什么单线程还这么快

数据库架构的演化

单体架构

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

缓存(Memcached)+MySQL集群

  • 后来,随着网站浏览量的增多,几乎大部分使用MySQL架构的网站在数据库方面都开始出现了性能问题,Web程序不再仅仅专注在功能业务,同时也在追求性能。
  • 程序员们开始大量的使用缓存技术来缓解数据库的压力,优化数据库的结构和索引。在这个时候,Memcached就自然的成为一个非常时尚的技术产品
  • 利用MySQL集群的力量提升数据库的性能
    在这里插入图片描述

缓存(Memcached可以)+MySQL集群+垂直拆分(主从复制,读写分离)

  • 主从复制,读写分离产生的背景:由于数据库的写入压力增加,Memcached 只能缓解数据库的读取压力。读写集中在一个数据库上让数据库不堪重负,大部分网站开始使用主从复制技术来达到读写分离,以提高读写性能和读库的可扩展性。
  • MySQL的Master-Slave模式成为这个时候的网站标配了。
  • 主从库之间通过同步机制把主库的数据同步到从库,对于需要查询最新写入数据的场景,可以在缓存中多写一份,通过缓存获得最新数据
    在这里插入图片描述

缓存(Redis)+MySQL集群+垂直拆分+分库分表

  • 在高速缓存,MySQL的主从复制, 读写分离的基础之上,这时MySQL主库的写压力开始出现瓶颈,而数据量的持续猛增,由于MyISAM使用表锁,在高并发下会出现严重的锁问题,大量的高并发MySQL应用开始使用InnoDB引擎代替MyISAM。
  • 同时,开始流行使用分表分库来缓解写压力和数据增长的扩展问题。这个时候,分表分库成了一个热门技术,是面试的热门问题也是业界讨论的热门技术问题
    在这里插入图片描述

NoSQL

NoSQL产生的背景

  • 在Web应用发展的初期,关系型数据库受到了较为广泛的关注和应用,原因是因为那时候
    Web站点基本上访问和并发不高、交互也较少。
  • 随着互联网Web2.0网站的兴起,传统的关系数据库在应付Web2.0网站,特别是超大规模和高并发的Web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而瓶颈的源头一般是在磁盘的I/O上。而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。
  • NoSQL 数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题,包括超大规模数据的存储

性能需求

随着互联网技术的进一步发展,各种类型的应用层出不穷,这导致在当今云计算、大数据盛行的时代,对性能有了更多的需求,主要体现在以下四个方面

  1. 对数据库高并发读写的需求,低延迟的读写速度:应用快速地反应能极大地提升用户的满意度
  2. 支撑海量的数据和流量:对于搜索这样大型应用而言,需要利用PB级别的数据和能应对百万级的流量
  3. 大规模集群的管理:系统管理员希望分布式应用能更简单的部署和管理
  4. 庞大运营成本的考量:在硬件成本、软件成本和人力成本能够有大幅度地降低

MySQL的扩展性瓶颈方面

  • 2010–2020 十年之间,世界已经发生了翻天覆地的变化;(定位信息,音乐,视频,日志等,也是一种数据,用户生成的数据和用户操作日志等等爆发式增长)
  • MySQL 等关系型数据库就不够用了!数据量很多,变化很快~!
  • MySQL 如果存储一些比较大的文件,博客,图片!数据库表很大,效率就低了!如果有一种数据库来专门处理这种数据,MySQL压力就变得十分小,在海量数据的IO压力下,查询速度会非常缓慢

什么是NoSQL

  • 为了克服这一问题,NoSQL应运而生,它同时具备了高性能、可扩展性强、高可用等优点,受到广泛开发人员和数据库管理人员的青睐。
  • NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,泛指非关系型的数据库。

NoSQL的特点

  • 可扩展性强(数据之间没有关系,很好扩展!)
  • 大数据量,高性能(Redis 一秒写8万次,读取11万,NoSQL的缓存记录级,是一种细粒度的缓存,性能会比较高!)
  • 数据类型是多样型的!(不需要事先设计数据库!随取随用!如果是数据量十分大的表,很多人就无法设计了!)

主流的NoSQL数据库类型

类型名称产品典型案例适用场合
键值数据库(Key-Value)Berkeley DB
Redis
Memcached
Tair
新浪:Berkeley DB + Redis
美团:Redis + Tair
阿里:Memcached + Redis
储存用户信息,比如会话、配置文件、参数、购物车等等。这些信息一般都和ID(键)挂钩,这种情景下键值数据库是个很好的选择
面向文档数据库(Document- Oriented)MongoDB
CouchDB
京东商城、小红书、华为、中国平安、百度、360安全卫士游戏场景:使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新
物流场景:使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。
社交场景:使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能
物联网场景:使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析
视频直播:使用 MongoDB 存储用户信息、礼物信息等
列存储数据库Cassandra
HBase
分布式文件系统顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势
图关系数据库Neo4j
InfoGrid
微软、IBM、沃尔玛、思科惠普、埃森哲图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。
它不是放图形的、放的是关系。比如:朋友圈社交网络、广告推荐系统、社交网络、推荐系统。专注于构建关系图谱

阿里巴巴数据架构分析

商品的基本信息存入关系型数据库:

  • 商品的基本信息:名称、价格,出厂日期,生产厂商等
  • 关系型数据库:MySQL
  • 淘宝的去O化策略(也即拿掉Oracle),注意,淘宝内部用的Mysql是里面的大牛自己改造过的。
  • 为什么去IOE(在IT建设过程中,去除IBM小型机、Oracle数据库及EMC存储设备)简而意之,可不用穿脚链跳舞。

商品的描述、详情、评论(文字比较多):

  • 文档数据库MongDB。

热点商品:

  • Redis缓存中

商品的图片存储:

分布式文件系统 FastDFS

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

商品的搜索商品:

  • 搜索引擎 Solr或者Elasticsearch

结论:真正在公司中的实践:NoSQL + RDBMS 一起使用才是最强的

Redis简介

什么是Redis

  • Redis是由C语言开发的,开源免费的非关系型数据库、Key-Value数据库、内存数据库,支持持久化、事务和备份,集群(支持16个库)等高可用功能。并且性能极高(每秒十几万次的读/写操作),易扩展,丰富的数据类型,所有操作都是单线程,具备原子性。
  • 官网:https://redis.io/
  • https://redis.io/docs/about/

Redis的优势(特性)

  • 性能非常高,支持高并发读写:Redis读的速度是110000次/s,写的速度是81000次/s
  • 高可用性:用于独立和集群部署的自动故障转移复制。支持集群、分布式、主从同步
  • 可以存储丰富的数据类型:Redis支持String, List, Hash, Set ,Zset等数据类型操作。
  • 持久化存储:作为一个内存数据库,最担心的就是万一机器死机或宕机,数据就会丢失。Redis使用RDB和AOF做数据的持久化存储。主从数据同时,生成rdb文件,并利用缓冲区添加新的数据更新操作做对应的同步。
  • 原子性:Redis的所有操作都是原子性的,意思就是要么成功执行,要么失败完全不执行。
  • 丰富的特性:Redis还支持 publish/subscribe, 通知key过期等等特性。

Redis的缺点

  • 因为数据是保存在内存中的,所以会受到服务器内存大小的限制:虽然Redis本身有key过期策略,但是还是需要提前预估和节约内存。如果内存增长过快,需要定期删除数据
  • 无法利用多核服务器的CPU:Redis是单线程的,单台服务器无法充分利用多核服务器的CPU
  • 提前预估缓存和数据库双写一致性问题:数据库和缓存双写,就必然会存在数据不一致的问题
  • 提前预估缓存击穿和缓存雪崩问题:
    • 缓存穿透:当用户请求一个不存在的数据,请求会直接穿过Redis,请求到rdb中,Redis起不到缓存的作用,当请求很多时,数据库压力会变大
    • 缓存击穿:当Redis中key存在,但是已经过期,大量并发请求也会直接穿透内存,请求到rdb,并缓存到redis,并发量很大时,后端数据库,可能会被压垮
    • 缓存雪崩:当redis中大量key在同一时间段失效,或者服务重启,也会给后端数据库,带来很大压力

Redis的使用场景

  • 缓存热点数据:例如对象缓存、全页缓存、可以提升热点数据的访问速度
  • 分布式下共享数据:例如共享Session
  • 分布式锁:可以使用 Redis 自带的 SETNX 命令 实现分布式锁
  • 全局ID:分布式场景下ID的唯一性
  • 计算器/限速器:Redis中原子性的自增操作,可以统计类似用户点赞数、用户访问数等,限速器比较典型的使用场景是限制某个用户访问某个API的频率,常用的有抢购时,防止用户疯狂点击带来不必要的压力
  • 简单消息队列:除了Redis自身的发布/订阅模式,我们也可以利用List来实现一个队列机制,比如:到货通知、邮件发送之类的需求,不需要高可靠,但是会带来非常大的DB压力,完全可以用List来完成异步解耦。
  • 购物车、抽奖、点赞、签到、打卡、好友关系、用户关注、推荐模型、排行榜

Redis的五大数据类型

数据类型存储的值适用场合
string(字符串)Redis的String类型是二进制安全的字符串,String可以包含任何数据,如字符串、整数、浮点数、图像、序列化对象。一个键最多能存储512MB1. string通常用于保存单个字符串或JSON字符串数据
2. 因为String是二进制安全的,所以可以把保密要求高的图片文件内容作为字符串来存储
3. 计数器:常规Key-Value缓存应用,如微博数、粉丝数
list(列表)类似Java的LinkedList集合,它是一个字符串链表1.对数据大的集合数据删减: 列表显示、关注列表、粉丝列表、留言评价、分页、热点新闻等
2.任务队列: List通常用来实现一个消息队列,而且可以确保先后顺序
set(集合)Set 是 String 类型的无序集合。集合是通过哈希表实现的对两个集合间的数据进行交集、并集、差集运算
hash(哈希)包含键值对的无序散列类别hash特别适合用于存储对象
zset(有序集合)Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序常用于排行榜

在这里插入图片描述

三种特殊的数据类型

数据类型存储的值适用场合
Geospatial地理位置1.朋友的定位,附近的人,打车距离计算
2.Redis 的 Geo 在Redis3.2 版本就推出了! 这个功能可以推算地理位置的 信息,两地之间的距离,方圆几里的人
Hyperloglog是用来做基数统计的算法浏览用户数量,一天内同一个用户多次访问只能算一次
Bitmapbit位是二进制,所以只有两种状态,0和1。用户签到次数、或者登录次数等

Redis安装(Windows环境)

下载地址

https://github.com/tporadowski/redis/releases
在这里插入图片描述

解压缩

解压路径中没有空格,没有中文
在这里插入图片描述

redis设置

设置密码

requirepass 123456

需要注意的是,redis默认情况下是不需要输入密码的,可以在redis.windows.conf中进行设置。
在这里插入图片描述

后台启动

daemonize yes

在这里插入图片描述

设置允许远程连接

## bind字段默认为: bind 127.0.0.1 这样只能本机访问redis
## 若允许远程主机访问,可注释掉bind行   或者    将bind 127.0.0.1改为: bind 0.0.0.0

在这里插入图片描述

启动redis服务端

通过双击redis-server.exe文件启动

这种方式启动,默认情况下加载默认配置文件redis.windows.conf进行启动

通过cmd命令方式进行启动

在当前目录打开cmd控制台窗口,redis-server.exe redis.windows.conf。 这种方式启动可以自定义redis配置文件。
在这里插入图片描述

启动redis客户端

在当前目录打开cmd控制台窗口,redis-cli.exe
在这里插入图片描述

Redis的图形化管理工具

Redis Desktop Manager:

  • 使用率最广的可视化工具了。跨平台支持。以前是免费的,现在为收费工具
  • https://redisdesktop.com/

AnotherRedisDesktopManager

  • 免费,一款比较稳定简洁的Redis UI工具
  • https://github.com/qishibo/AnotherRedisDesktopManager

RedisPlus

  • 一款开源的免费桌面客户端软件
  • https://gitee.com/MaxBill/RedisPlus

Redis Insight

  • Redis labs出的一款监控分析级别的可视化工具。这款软件是web版的
  • https://redislabs.com/redisinsight/
    在这里插入图片描述

Redis的基础知识

Redis默认有16个数据库:

  • 序号从db0—db15,默认使用的是第0个
  • 可以使用 select 进行切换数据库:select 3

Redis的默认端口是 6379

  • 6379在是手机按键上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的名字

Redis是单线程的()

  • 误区1:高性能的服务器一定是多线程的?错错错
  • 误区2:多线程(CPU上下文会切换!)一定比单线程效率高?错错错

Redis 为什么单线程还这么快

  • Redis是基于内存操作,CPU不是Redis的性能瓶颈,Redis的瓶颈是机器的内存和网络带宽,既然可以使 用单线程来实现,所有就使用了单线程了
  • 对于内存系统来说,如果没有上下文切换效率就是最高的!多次读写都是在一个CPU上的,在内存情况下, 这个就是最佳的方案
  • Redis使用网络IO多路复用技术来保证在多连接的时候, 系统的高吞吐量

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

李彦宏:程序员将不复存在! 周鸿祎回怼!网友:先把百度程序员都开除了!

近日,百度创始人、董事长兼首席执行官李彦宏在央视《对话》•开年说的访谈中指出:“基本上说以后其实不会存在“程序员”这种职业了,因为只要会说话,人人都会具备程序员的能力”。 “未来的编程语言只会剩下两种,一种…

超潜力 JAM 链何以超越中继链,引领 Polkadot 2.0 新航向?

2024 年 4 月 18 日,Polkadot 创始人 Gavin Wood 在迪拜 Token 2049 活动上宣布了一项波卡生态的重大进展—— JAM 灰皮书发布!JAM 协议的诞生与发展开辟了波卡生态的另一种发展路径,它将替代当前中继链的技术角色,以模块化、简约…

Recommended Azure Monitors

General This document describes the recommended Azure monitors which can be implemented in Azure cloud application subscriptions. SMT incident priority mapping The priority “Blocker” is mostly used by Developers to prioritize their tasks and its not a…

场内股票期权和场外期权(附场内期权交易攻略)

期权是交易双方关于未来买卖权利达成的合约。 就股票期权来说,期权的买方(权利方)通过向卖方(义务方)支付一定的费用(即期权费或权利金),获得一种权利,即有权在约定的时间以约定的价格向期权卖方买入或卖出约定数量的标的股票或ETF。 买方(…

AI大模型探索之路-训练篇1:大语言模型微调基础认知

文章目录 前言一、微调技术概述二、微调的必要性三、大模型的微调方法四、微调过程中的技术细节五、微调后的模型评估与应用总结 前言 在人工智能的广阔研究领域内,大型预训练语言模型(Large Language Models, LLMs)已经成为推动技术革新的关…

ChatGPT全方位指导:学术论文写作从零开始,轻松搞定高质量论文!

目录 文末福利 一、论文选题的深度探讨 二、撰写摘要的艺术 三、关键词的精选 四、引言的构建 五、正文的结构设计 六、撰写结论的策略 七、致谢的编写 八、附录的有效利用 九、参考文献的整理 文末有福利哦 撰写一篇高质量的学术论文是一项既复杂又耗时的任务。这个…

13-Makefile_04

使用函数 在更复杂的工程中,头文件、源文件可能会放在二级目录,为了实现这种操作通常需要使用Makefile的函数。 函数格式及示例 在Makefile中调用函数的方法跟变量的使用类似,以“$()”或“${}”符号包含函数名和参数,具体语法…

微信搜一搜优化:今天你“搜一搜”了吗?

微信“搜一搜”功能的排名规则和机制是微信生态系统中非常重要的一部分,它决定了小程序、公众号、文章、直播等内容在搜索结果中的展示顺序。小柚给大家整理了一份对其排名规则和机制的详细解析: 首先,关键词匹配度是影响搜索结果排名的重要…

ARM DMIPS算力说明

ARM DMIPS算力说明 ARM算力参考官网地址 https://en.wikipedia.org/wiki/List_of_ARM_processors Product familyARM architectureProcessorFeatureCache (I / D), MMUTypical MIPS MHzReferenceARM1ARMv1ARM1First implementationNoneARM2ARMv2ARM2ARMv2 added the MUL (mu…

【北京迅为】《iTOP龙芯2K1000开发指南》-第四部分 ubuntu开发环境搭建

龙芯2K1000处理器集成2个64位GS264处理器核,主频1GHz,以及各种系统IO接口,集高性能与高配置于一身。支持4G模块、GPS模块、千兆以太网、16GB固态硬盘、双路UART、四路USB、WIFI蓝牙二合一模块、MiniPCIE等接口、双路CAN总线、RS485总线&#…

我是如何用扣子AI工作流筛选并分析自媒体情报信息的

从开始做自媒体以来,一直有个困惑许久的问题没有解决,那就是搜集我关注的相关领域的对标自媒体一手信息,包括文章、评论、点赞、转发等。一方面,是为了了解我关注的内容,另一方面,也是为了逼迫自己学习更多…

mysql中join内外连接查询例子

文章目录 join关键字概要举例using 与 on 区别 join关键字 在MySQL中,JOIN 是一种用于将两个或多个表中的行联合起来的操作。 连接(join)就是将一张表中的行按照某个条件(连接条件)与另一张表中的行连接起来形成一个新…

一个排查了一天的BUG,你在摸鱼吧!

站会 在一次日常站会上,组员们轮流分享昨天的工作进展。一个组员提到:“昨天我整天都在排查一个BUG,今天还得继续。” 出于好奇,我问:“是什么BUG让你排查了这么久还没解决呢?” 他解释说:“…

Compose和Android View相互使用

文章目录 Compose和Android View相互使用在Compose中使用View概述简单控件复杂控件嵌入XML布局 在View中使用Compose概述在Activity中使用Compose在Fragment中使用Compose布局使用多个ComposeView 在布局中使用Compose 组合使用 Compose和Android View相互使用 在Compose中使用…

智慧旅游引领旅游行业创新发展:借助智能科技的力量,推动旅游服务的个性化、精准化,提升游客的满意度和忠诚度

随着信息技术的迅猛发展和广泛应用,智慧旅游已成为旅游行业创新发展的重要引擎。智慧旅游借助智能科技的力量,推动旅游服务的个性化、精准化,不仅提升了游客的满意度和忠诚度,也为旅游行业的可持续发展注入了新的活力。本文将从智…

4月25日 C++day4

#include <iostream> using namespace std;class Person {const string name;int age;char sex; public:Person():name("lisi"){cout << "Person无参构造" << endl;}Person(string name,int age,char sex):name(name),age(age),sex(sex)…

【RAG 论文】Chain-of-Note:为 RAG 引入 CoT 让模型生成阅读笔记来提高面对噪音文档和未知场景的鲁棒性

论文&#xff1a;Chain-of-Note: Enhancing Robustness in Retrieval-Augmented Language Models ⭐⭐⭐ Tencent AI Lab, arXiv:2311.09210 文章目录 一、论文速读二、实现的细节2.1 Note Design2.2 Data Collection2.3 Model Training 三、实验结果3.1 QA Performance3.2 对 …

使用新版ESLint,搭配Prettier使用的配置方式

概述 ESLint重大更新(9.0.0版本)后,将不再支持非扁平化配置文件,并且移除了与Prettier冲突的规则,也就是说与Prettier搭配使用,不再需要使用插件“eslint-config-prettier”来处理冲突问题。 注:使用新版的前提条件是Node.js版本必须是18.18.0、20.9.0,或者是>=21.1…

014、Python+fastapi,第一个后台管理项目走向第14步:建立python+fastapi项目,创建common通用模块

一、说明 通用模块主要是完成文件的上传下载&#xff0c;抄吧&#xff0c;要不然怎么叫通用模块呢&#xff1f; 我把RuoYi-Vue3-FastAPI中的验证码模块放在这里了&#xff0c;我觉得验证也比较通用吧&#xff0c; 二、添加common通用模块 1、通用模块没有数据表&#xff0c…

涨跌失据了?现货白银市场的波动如何捕捉

现货白银市场近期出现了强劲的上涨&#xff0c;但近两个交易日&#xff0c;却出现了令人感觉诧异的大跌。很多刚入场打算买入做多的朋友&#xff0c;面对这两天这么强的跌势都感觉无所适从。到底现货白银市场的波动如何才能捕捉呢&#xff1f;下面我们就来讨论一下这个问题。 用…