【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.mzph.cn/diannao/3260.shtml

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

相关文章

下级平台级联EasyCVR视频汇聚安防监控平台后,设备显示层级并存在重复的原因排查和解决

视频汇聚平台/视频监控系统/国标GB28181协议EasyCVR安防平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力,平台支持7*24小时实时高清视频监控,能同时…

C语言进阶|单链表的实现

✈链表的概念和结构 概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表 中的指针链接次序实现的。 链表的结构跟火车车厢相似,淡季时车次的车厢会相应减少,旺季时车次的车厢会额外增加几节。…

BSV区块链协会上线首个版本的ARC交易处理器

​​发表时间:2024年3月28日 BSV区块链协会近期上线了首个版本的ARC交易处理器。ARC是一项区块链交易处理服务,能在通过P2P网络广播交易之前验证并存储相关的交易。一旦新区块被挖出,一条与该交易相关的Merkle路径将被发回给交易发起者作为确…

长效静态代理IP如何改变你的SEO和网络营销策略?

长效静态代理IP为SEO和网络营销专家提供了一个强大的工具,通过这种技术,可以突破传统的限制,以全新的视角和方法优化其在线策略。这不仅增强了企业的市场竞争力,也为实现更高效、更精准的营销目标提供了可能。 一、长效静态代理IP…

Vue面试经验

Vue编译时声明周期的执行顺序 Vue中父子组件渲染顺序(同步引入子组件:import Son from ‘/components/son’ ) 父子组件编译时的生命周期执行顺序 这里修改data数据时也修改了dom,如过知识通过按钮对数据进行操作,那…

kafka大数据采集技术实验(未完待续)

Kafka环境搭建 下载地址:https://link.zhihu.com/?targethttps%3A//kafka.apache.org/downloads解压启动zookeeper bin/zookeeper-server-start.sh config/zookeeper.properties需要注意的是 : " c o n f i g / z o o k e e p e r . p r o p e r t i e s &q…

解密Java线程池源码

一、线程池中的保活和回收源码分析 1、线程池中线程的创建时机 1、核心线程创建时机 在研究线程池的源码前首先想一个问题 public class Main {public static void main(String[] args) {ThreadPoolExecutor executor new ThreadPoolExecutor(10, 20, 0l, TimeUnit.MILLIS…

从Linux角度具体理解程序翻译过程-----预处理、编译、汇编、链接

目录 前言: 翻译过程 1.预处理 2.编译 3.汇编 4.链接 Linux下对其理解: 1.预处理 拓展: Linux下文件信息: 文件类型: 硬链接数: 文件拥有者: 文件所属组: other&#x…

区块链安全应用-------压力测试

基于已有的链进行测试(build_chain默认建的链 四个节 点): 第一步:搭链 1. 安装依赖 在ubuntu操作系统中,操作步骤如下: sudo apt install -y openssl curl 2. 创建操作目录, 下载安装脚本 ## 创建操作…

3个比较不错的Linux云音乐应用程序整理

在现代音乐流媒体时代,基于云的音乐应用程序因其便利性和可访问性而变得非常流行。Linux 用户尤其寻求可靠且功能丰富的音乐播放器来无缝地享受他们喜爱的音乐。 在这里,我们探讨了三个最好的基于云的音乐应用程序,每个应用程序都提供专为 L…

Java Web 网页设计(1)

不要让追求之舟停泊在幻想的港湾 而应扬起奋斗的风帆 驶向现实生活的大海 网页设计 1.首先 添加框架支持 找到目录右键添加 找到Web Application选中 点击OK 然后 编辑设置 找到Tomcat--local 选中 点击OK 名称可以自己设置 找到对应文件夹路径 把Tomcat添加到项目里面 因为…

【Hadoop】-HDFS的Shell操作[3]

目录 前言 一、HDFS集群启停命令 1.一键启停脚本可用 2.独立进程启停可用 二、文件系统操作命令 1、创建文件夹 2、查看指定目录下内容 3、上传文件到HDFS指定目录下 4、查看HDFS文件内容 5、下载HDFS文件 6、拷贝HDFS文件 7、追加数据到HDFS文件中 8、HDFS数据移…

哪吒汽车把最后的翻身筹码,全压在了这辆新车上

正如比亚迪王传福所说,新能源车市场已进入惨烈淘汰赛环节。 近几年国内新能源车销量增长势头迅猛,仅过去的 2023 年产销便分别达 958.7 万辆和 949.5 万辆,同比增长 35.8% 和 37.9%。 销量高速增长背后自然也带来了越来越激烈的竞争。 过去…

Footprint Analytics 与 GalaChain 达成战略合作

​ Footprint Analytics 宣布与 GalaChain 达成战略合作。GalaChain 是 Gala 旗下的 Layer 1 区块链。此次合作标志着双方在游戏(包括 Gala Games) 、娱乐和金融等多个行业的区块链生态系统革新方面迈出了重要的一步。 GalaChain 致力于满足企业级项目的广泛需求&…

算法-栈操作

1047. 删除字符串中的所有相邻重复项 - 力扣(LeetCode) class Solution { public:string removeDuplicates(string s) {string stack;for(char& ch:s){if(stack.size()>0&&chstack.back()){stack.pop_back();}else{stack.push_back(ch);}…

AI大模型实现软件智能化落地实践

1、什么是大模型 大型语言模型(Large Language Model,LLM;Large Language Models,LLMs)。 大语言模型是一种深度学习模型,特别是属于自然语言处理(NLP)的领域,一般是指包含数干亿&…

Pandas 模块-操纵数据(11)-二元运算--超级add、sub、mul、div、mod、pow等等

目录 1. DataFrame.add 1.1 DataFrame.add 语法结构 1.2 DataFrame.add 参数说明 1.3 DataFrame.add 用法示例 1.3.1 正常的使用 1.3.2 需要注意类型相符合 2. DataFrame.sub 2.1 DataFrame.sub 语法结构 2.2 DataFrame.sub 参数说明 2.3 DataFrame.sub 用法示例 3.…

传媒论坛编辑部传媒论坛杂志社传媒论坛杂志2024年第7期目录

专题│场景传播研究 场景传播:一场遮盖自我与寻找自我的博弈 胡沈明; 3 基于CiteSpace的中国场景传播研究热点分析 管倩;粟银慧; 4-610《传媒论坛》投稿:cnqikantg126.com 数字世界的美与危:场景传播的失范与应对之举 王依晗;章洁…

分布式-知识体系

分布式系统 本质就是一堆机器的协同,要做的就是用各种手段来让机器的运行达到预期 分布式业务场景 分布式四纵四横说 基于 MSA(微服务架构)的分布式知识体系 相关概念 – 【摘自网络原文】 节点与网络 节点 传统的节点也就是一台单体的物…

MySQL数据类型:字符串类型详解

MySQL数据类型:字符串类型详解 在MySQL数据库中,字符串数据类型用于存储各种文本信息。这些数据类型主要包括CHAR、VARCHAR、TEXT和BLOB等。 CHAR与VARCHAR CHAR CHAR类型用于存储固定长度的字符串。它的长度在创建表时就已确定,长度范围…