Redis概述(一)

Nosql概述

单机MySql时代
在这里插入图片描述
90年代,访问量不会太大,单个数据库够用!

更多是Html静态网页,服务器没有太大压力

但是:这种情况下,网站的瓶颈是什么?

  • 数据量如果太大,单个数据库无法满足
  • 数据库的索引(B+Tree)一个机器内存也放不下
  • 访问量(读写混合)一个服务器承受不了

只要出现以上情况之一,网站系统就需要升级!

2、Memcached(缓存)+ MySQL + 垂直拆分(读写分离)

网站的80%都是在读,如果每次读取操作都去查询数据库的话,访问量大会对底层数据造成很大的压力,所以可以使用缓存来减轻,并提升效率。

发展过程:优化数据库结构和索引–>文件缓存(IO)–>Memcached(缓存)

在这里插入图片描述

3、分库分表 + 水平拆分 + MySQL集群

随着技术和业务的发展,技术要求也越来越高

本质:数据库(读、写)

早些年:MylSAM:表锁,十分影响效率,高并发当中由于会出现十分严重的锁问题

转换成innodb:行锁,有效解决MylSAM的锁问题

------->使用分库分表来解决写的压力

------->MySQL集群的出现,很好满足了当时年代的所有需求
在这里插入图片描述

4、当今状况

随着数据量的快速增加,MySQL等关系型数据库已经不够用了!

MySQL使用来存储一些比较大的文件,博客,图片!数据库表很大,就会影响效率!

这时候就需要有一种数据库专门来处理这种大数据,减轻MySQL等关系型数据库的压力!

目前一个基本的互联网项目的构成

在这里插入图片描述

为什么要使用NoSQL?

  • 由于个人信息,社交网络所等等产生的数据呈爆发式增长!关系型数据库无法满足存储需求
    • 这时候使用NoSQL数据库,就能很好处理以上的情况!

什么是NoSQL?

NoSQL

NoSQL = Not Only SQL(不仅仅是SQL)

关系型数据库:表格(行和列)

泛指非关系型数据库,随着web2.0的诞生,传统的关系型数据库很难满足web2.0时代的数据量需求,尤其是面对超大规模的高并发社区!暴露出很多难以克服的问题——这时候NoSQL在当今大数据环境下发展的十分迅速,Redis就是其中之一。

  • 因为其中很多数据类型:个人信息,社交网络,地理位置。这些数据类型的存储都不需要一个固定的格式!不需要多余的操作就可以横向扩展的!——Map<String,Object>就是使用键值对控制的

NoSQL的特点

  • 方便扩展(数据之间没有关系,很好扩展)

  • 大数据量高性能(Redis一次写8万次,读取11万次,NoSQL的缓存记录级,是一种细粒度的缓存,性能高)

  • 数据类型的多样性的(不需要实现设计数据库,随取随用!如果是数据量很大,关系型数据库就很难设计)

  • 传统RDBMS和NoSQL

    传统的RDBMS
    - 结构化组织
    - SQL
    - 数据和关系都存在单独的表中
    - 数据操作,数据定义语言
    - 严格的一致性
    - 基础事务
    - ....
    
    NoSQL
    - 不仅仅是数据
    - 没有固定的查询语言
    - 键值对存储,列存储,文档存储,图形数据库(社交关系)
    - 最终一致性
    - CAP定理和BASE --异地多活
    - 高性能,高可用,高可扩
    ...
    

了解:3V+3高

大数据时代的3V:主要是对问题的描述

  • 海量Volume
  • 多样Variety
  • 实时Velocity

大数据时代的3高:对程序的要求

  • 高并发
  • 高可扩(随时水平拆分,机器不够用,可以随时增加机器解决)
  • 高性能

公司中真正的实践:NoSQL + RDBMS结合使用

NoSQL的四大分类

KV键值对

  • 新浪:Redis
  • 美团:Redis + Tair
  • 阿里、百度:Redis + memcached

文档型数据库(bson格式和json格式一样)

  • MongoDB
    • MongoDB是一个基于分布式文件存储的数据库,C++编写,主要用来处理大量的文档!
    • MongoDB是一个介于关系型数据库和非关系型数据库中中间的产品,MongoDB是非关系型数据库中功能最丰富,最像关系型数据库!
  • ConthDB

列存储数据库

  • HBase
  • 分布式文件系统

图关系数据库

  • 不是存放图形的数据库,放的是对象之间的关系:比如:朋友圈社交网络,广告推荐
  • Noe4j,infoGrid

四者之间关系的对比

在这里插入图片描述

Redis入门

概述

Redis是什么?

  • Redis(Remote Dictionary Server ),即远程字典服务;

  • 个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API,也称之为结构化数据库;

在这里插入图片描述

  • redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis能干什么?

  • 内存存储、持久化、内存中是断电即失的,为了保证数据的安全性,持久化是十分重要的
  • 效率高,用于高速缓存
  • 发布订阅系统
  • 地图信息分析
  • 计时器、计数器(浏览量)

特性:

  • 多样的数据类型

  • 持久化

  • 集群

  • 事务

官方网站

  • 英文:https://redis.io/
  • 中文:http://www.redis.cn/

Redis安装

Windows环境

  • 下载安装包
    在这里插入图片描述
  • 解压后得到一个文件夹

在这里插入图片描述

  • 文件内容
    在这里插入图片描述
  • 启动服务端

在这里插入图片描述

  • 启动客户端,连接服务端

在这里插入图片描述
但是Redis官方推荐使用Linux环境进行使用

Linux环境

  • 下载安装包:redis-6.2.6.tar.gz

    在这里插入图片描述

  • Redis的安装包:程序都放置在/opt这个目录下

[root@xiaoxiaobin mdb]# mv redis-6.2.6.tar.gz /opt
[root@xiaoxiaobin opt]# ls
containerd  redis-6.2.6.tar.gz
  • Redis安装包解压缩:
[root@xiaoxiaobin opt]# tar -zxvf redis-6.2.6.tar.gz 

在这里插入图片描述

  • Redis的默认安装路径:/usr/local/bin

在这里插入图片描述

  • 基本的环境安装:
#yun -y install gcc     在线安装gcc,这里需要注意的是,Redis6.0版本以上需要gcc5.3版本及以上

#make 		#环境的安装(如果报错Error,需要查看gcc是否是5.3及以上版本)

#make install	#环境安装的确认
  • 如果不是5.3及以上版本,则需要升级gcc 9.3
#第一步
yum -y install centos-release-scl
#第二步
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
#第三步
scl enable devtoolset-9 bash

#查看gcc版本
gcc -v

在这里插入图片描述
需要注意的是,使用以上指令升级gcc只是暂时的,exit之后或者退出shell之后就会回到之前的版本;

  • 如果需要永久升级,则需要改配置文件:
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
  • 将redis的配置文件redis.conf复制一份到usr/local/bin/文件名下,以后就使用当前目录下的配置文件进行启动和修改。

在这里插入图片描述

  • redis默认不是后台启动的,所以需要将配置文件修改成后台启动

在这里插入图片描述

  • 启动redis服务
[root@xiaoxiaobin bin]# redis-server bconfig/redis.conf  #后面指的是以哪个配置文件启动redis服务
  • 启动redis-cli客户端连接服务端
[root@xiaoxiaobin bin]# redis-cli -p 6379	#因为默认是本地连接,所以-h(host)不需要
  • 查看redis进程
[root@xiaoxiaobin /]# ps -ef|grep redis

在这里插入图片描述

  • 如何关闭redis服务?
127.0.0.1:6379> shutdown
not connected> exit

在这里插入图片描述

  • 关闭后再次查看redis服务进程:
    在这里插入图片描述

性能测试

redis-benchmark:官方自带的性能测试工具

  • 参数说明:

在这里插入图片描述
实例说明

#测试:本地地址,端口6379,100个用户并发,每个用户10万个请求
[root@xiaoxiaobin bin]# redis-benchmark -p 6379 -h localhost -c 100 -n 100000

测试数据说明:

在这里插入图片描述

基础知识

redis默认有16个数据库:查看配置文件
在这里插入图片描述

  • 默认使用的第0个

  • 数据库之间可以使用select命令来进行切换

    127.0.0.1:6379> select 2  #切换到第2个数据库
    OK
    127.0.0.1:6379[2]> 
    
    
  • 可以使用DBSIZE来查看当前数据库的大小

    127.0.0.1:6379[2]> dbsize   #查看当前数据库的大小
    (integer) 1
    127.0.0.1:6379[2]> 
    
  • 通过keys *查看当前数据库所有的key

    127.0.0.1:6379> keys *
    1) "key:__rand_int__"
    2) "counter:__rand_int__"
    3) "myhash"
    4) "mylist"
    5) "name"
    127.0.0.1:6379> 
    
  • 通过flushdb命令可以清空当前数据库里面的所有数据

    127.0.0.1:6379> FLUSHDB 	#将第0个数据库清空
    OK
    127.0.0.1:6379> keys *
    (empty array)
    127.0.0.1:6379> 
    
    
  • 通过flushall命令可以清空所有数据库里面的所有数据

    127.0.0.1:6379> select 2
    OK
    127.0.0.1:6379[2]> keys *
    1) "name"
    127.0.0.1:6379[2]> select 0
    OK
    127.0.0.1:6379> FLUSHALL	#在第0个数据库当中使用flushall指令,将第2个数据库中的值也清空了
    OK
    127.0.0.1:6379> select 2
    OK
    127.0.0.1:6379[2]> keys *
    (empty array)
    127.0.0.1:6379[2]> 
    
    
  • 默认端口号为什么是6379

    因为redis作者的偶像的英文名字对应键盘上数字是6379

  • redis是单线程的

    • Redis是很快的
    • 因为Redis是基于内存操作的,CPU就不会是Redis的性能瓶颈。Redis的瓶颈是由机器的内存和网络带宽决定的,所以可以使用单线程去实现。
    • Redis是基于C语言编写的,官方提供的数据为10万+的QPS,不比Memecache差
  • Redis为什么单线程还这么快?

    • 误区1:高性能的服务器不一定是多线程的
    • 误区2:多线程(CPU会上下文切换)不一定比单线程效率高
    • CPU>内存>硬盘的速度
    • Redis是将所有的数据都存放在内存当中的,所以使用单线程去操作效率是最高的,多线程的话会使得CPU上下文的进行切换,这也会消耗系统是性能;对于内存系统来说,没有上下文切换效率就是最高的,多次读写都是在同一个CPU上,对于内存系统来说这就是最佳的方案
Redis是一个开源的、高性能的键值存储数据库系统,主要用于缓存数据和实现分布式数据结构,如发布订阅模式、列表、集合和有序集合等。它特别适合于需要快速读写操作的场景,例如Web应用中的会话管理、排行榜等。 **环境搭建步骤:** 1. **下载安装包**: 根据你的操作系统(Windows, Linux或Mac),访问Redis官网(https://redis.io/download)下载适合的版本。推荐选择稳定版,如果是开发测试,也可以尝试最新的开发分支。 2. **解压并配置**: 解压缩下载的文件,然后进入目录,找到`redis.conf`文件。这是一个配置文件,你可以修改其中的设置来适应你的需求,比如端口、最大内存、密码保护等。 3. **启动服务**: 运行`redis-server`命令(在Linux/Mac上可能是`redis-server redis.conf`),按照提示启动服务。首次运行可能会自动创建默认的数据目录。 4. **验证安装**: 打开一个新的终端窗口,使用`redis-cli`工具连接到服务器,输入`INFO`命令查看服务器状态,确保安装成功。 5. **安全考虑**: 如果在生产环境中,强烈建议启用密码认证,可以通过编辑`redis.conf`设置`requirepass`选项来添加密码。 **相关问题--:** 1. Redis的主要用途是什么? 2. 如何通过命令行管理Redis? 3. 如何在配置文件中设置密码保护? 4. 开发环境中如何优雅地停止和重启Redis服务?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值