• 【Redis】1、NoSQL之Redis的配置及优化


    关系数据库与非关系数据库

    关系型数据库

            关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。
            SQL 语句(标准数据查询语言)就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作。
            主流的关系型数据库包括 Oracle、MySQL、SQL Server、Microsoft Access、DB2、PostgreSQL 等。
            以上数据库在使用的时候必须先建库、建表设计表结构,然后存储数据的时候按表结构去存,如果数据与表结构不匹配就会存储失败。

    非关系型数据库

            NoSQL(NoSQL = Not Only SQL ),意思是“不仅仅是 SQL”,是非关系型数据库的总称。
    除了主流的关系型数据库外的数据库,都认为是非关系型。
    主流的 NoSQL 数据库有 Redis、MongBD、Hbase、Memcached、ElasticSearch、TSDB 等。
            不需要预先建库、建表定义数据存储表结构,每条记录可以有不同的数据类型和字段个数(比如微信群聊里的文字、图片、视频、音乐等)。

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

    1.数据存储方式不同

            关系型和非关系型数据库的主要差异是数据存储的方式。关系型数据天然就是表格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。
            与其相反,非关系型数据不适合存储在数据表的行和列中,而是大块组合在一起。非关系型数据通常存储在数据集中,就像文档、键值对或者图结构。你的数据及其特性是选择数据存储和提取方式的首要影响因素。

    2.扩展方式不同

            SQL和NoSQL数据库最大的差别可能是在扩展方式上,要支持日益增长的需求当然要扩展。
            要支持更多并发量,SQL数据库是纵向扩展,也就是说提高处理能力,使用速度更快速的计算机,这样处理相同的数据集就更快了。因为数据存储在关系表中,操作的性能瓶颈可能涉及很多个表,这都需要通过提高计算机性能来克服。虽然SQL数据库有很大扩展空间,但最终肯定会达到纵向扩展的上限。
            而NoSQL数据库是横向扩展的。因为非关系型数据存储天然就是分布式的,NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载。

    3.对事务性的支持不同

            如果数据操作需要高事务性或者复杂数据查询需要控制执行计划,那么传统的SQL数据库从性能和稳定性方面考虑是你的最佳选择。SQL数据库支持对事务原子性细粒度控制,并且易于回滚事务。
            虽然NoSQL数据库也可以使用事务操作,但稳定性方面没法和关系型数据库比较,所以它们真正闪亮的价值是在操作的扩展性和大数据量处理方面。

    非关系型数据库产生背景

    可用于应对 Web2.0 纯动态网站类型的三高问题(高并发、高性能、高可用)。
    (1)High performance——对数据库高并发读写需求
    (2)Huge Storage——对海量数据高效存储与访问需求
    (3)High Scalability && High Availability——对数据库高可扩展性与高可用性需求

            关系型数据库和非关系型数据库都有各自的特点与应用场景,两者的紧密结合将会给Web2.0的数据库发展带来新的思路。让关系型数据库关注在关系上和对数据的一致性保障,非关系型数据库关注在存储和高效率上。例如,在读写分离的MySQL数据库环境中,可以把经常访问的数据存储在非关系型数据库中,提升访问速度。

    总结

    1. 1.非关系型数据库
    2. 数据保存在缓存中,利于提高读取速度/查询数据
    3. 架构中位置灵活
    4. 分布式、扩展性高
    5. 2.关系型数据库
    6. 安全性高(持久化)
    7. 事务处理能力强
    8. 任务控制能力强
    9. 做日志备份、恢复和容灾的能力更强一些
    1. 1.关系型数据库:
    2. 实例-->数据库-->表(table)-->记录行(row)、数据字段(column)
    3. 2.非关系型数据库:
    4. 实例-->数据库-->集合(collection)-->键值对(key-value)
    5. 非关系型数据库不需要手动建数据库和集合(表)。

    Redis简介

            Redis(远程字典服务器) 是一个开源的、使用 C 语言编写的 NoSQL 数据库。
            Redis 基于内存运行并支持持久化,采用key-value(键值对)的存储形式,是目前分布式架构中不可或缺的一环。

            Redis服务器程序是单进程模型,也就是在一台服务器上可以同时启动多个Redis进程,Redis的实际处理速度则是完全依靠于主进程的执行效率。若在服务器上只运行一个Redis进程,当多个客户端同时访问时,服务器的处理能力是会有一定程度的下降;若在同一台服务器上开启多个Redis进程,Redis在提高并发处理能力的同时会给服务器的CPU造成很大压力。即:在实际生产环境中,需要根据实际的需求来决定开启多少个Redis进程。若对高并发要求更高一些,可能会考虑在同一台服务器上开启多个进程。若CPU资源比较紧张,采用单进程即可。

    Redis 具有以下几个优点:

    (1)具有极高的数据读写速度:数据读取的速度最高可达到 110000 次/s,数据写入速度最高可达到 81000 次/s。
    (2)支持丰富的数据类型:支持 key-value、Strings、Lists、Hashes、Sets 及 Sorted Sets 等数据类型操作。
    (3)支持数据的持久化:可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
    (4)原子性:Redis 所有操作都是原子性的。
    (5)支持数据备份:即 master-salve 模式的数据备份。

    Redis缺点

    缓存和数据库双写一致性问题

    缓存雪崩问题

    缓存击穿问题

    缓存的并发竞争问题

    Redis使用场景

            Redis作为基于内存运行的数据库,是一个高性能的缓存,一般应用在Session缓存、队列、排行榜、计数器、最近最热文章、最近最热评论、发布订阅等。
            Redis 适用于数据实时性要求高、数据存储有过期和淘汰特征的、不需要持久化或者只需要保证弱一致性、逻辑简单的场景。

    我们通常会将部分数据放入缓存中,来提高访问速度,然后数据库承担存储的工作。

    redis

    高热数据:

    命中机制:有多条数据被频繁访问

    淘汰机制:内存负载高于限制,优先选择淘汰(删除)一些数据

     Redis安装部署

    环境准备

    1. #关闭防火墙和安全等级
    2. systemctl stop firewalld
    3. systemctl disable firewalld
    4. setenforce 0

    修改内核参数

    1. vim /etc/sysctl.conf
    2. #在页尾添加下面内容
    3. vm.overcommit_memory = 1
    4. net.core.somaxconn = 2048
    5. sysctl -p
    6. ##vm.overcommit_memory = 1
    7. 内存分配策略;可选值:012
    8. 0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
    9. 1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
    10. 2, 表示内核允许分配超过所有物理内存和交换空间总和的内存
    11. ##net.core.somaxconn
    12. 是Linux中的一个kernel参数,表示socket监听(listen)的backlog上限

     安装redis

    1. #安装配置环境
    2. yum -y install gcc gcc-c++ make
    3. #添加
    4. tar -zxvf /opt/redis-7.0.9.tar.gz -C /opt/
    5. cd /opt/redis-7.0.9
    6. make
    7. make PREFIX=/usr/local/redis install
    8. #由于Redis源码包中直接提供了 Makefile 文件,所以在解压完软件包后,不用先执行 ./configure 进行配置,可直接执行 make 与 make install 命令进行安装。

    创建redis工作目录

    1. mkdir /usr/local/redis/{conf,log,data}
    2. cp /opt/redis-7.0.9/redis.conf /usr/local/redis/conf/
    3. useradd -M -s /sbin/nologin redis
    4. chown -R redis.redis /usr/local/redis/
    5. ##
    6. -s表示指定用户所用的shell,此处为/sbin/nologin,表示不登录。
    7. -M表示不创建用户主目录。
    8. -g表示指定用户的组名为mysql。
    9. 最后的mysql表示用户名

    环境变量

    1. vim /etc/profile
    2. #增加一行
    3. PATH=$PATH:/usr/local/redis/bin
    4. #刷新配置文件
    5. source /etc/profile

    修改配置文件

    1. vim /usr/local/redis/conf/redis.conf
    2. #69行,添加 监听的主机地址
    3. bind 127.0.0.1 192.168.220.121
    4. #88行,将本机访问保护模式设置no。如果开启了,那么在没有设定bind ip且没有设密码的情况下,Redis只允许接受本机的响应
    5. protected-mode no
    6. #92行,Redis默认的监听6379端口
    7. port 6379
    8. #136行,设置为守护进程,后台启动
    9. daemonize yes
    10. #158行,指定 PID 文件
    11. pidfile /usr/local/redis/log/redis_6379.pid
    12. #171行,指定日志文件
    13. logfile "/usr/local/redis/log/redis_6379.log"
    14. #263行,指定持久化文件所在目录
    15. dir /usr/local/redis/data
    16. #507行,增加一行,设置redis密码
    17. requirepass abc123

    定义systemd服务管理脚本

    1. vim /usr/lib/systemd/system/redis-server.service
    2. [Unit]
    3. Description=Redis Server
    4. After=network.target
    5. [Service]
    6. User=redis
    7. Group=redis
    8. Type=forking
    9. TimeoutSec=0
    10. PIDFile=/usr/local/redis/log/redis_6379.pid
    11. ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
    12. ExecReload=/bin/kill -s HUP $MAINPID
    13. ExecStop=/bin/kill -s QUIT $MAINPID
    14. PrivateTmp=true
    15. [Install]
    16. WantedBy=multi-user.target

    启动服务

    1. systemctl start redis-server
    2. /opt/redis-5.0.7/src/redis-server
    3. systemctl enable redis-server
    4. netstat -lntp | grep 6379

     Redis 命令工具

    1. redis-server Redis服务器启动命令
    2. redis-benchmark 性能测试工具,用于检测 Redis 在本机的运行效率
    3. redis-check-aof 修复有问题的 AOF 持久化文件
    4. redis-check-rdb 修复有问题的 RDB 持久化文件
    5. redis-cli Redis客户端命令行工具
    6. redis-sentinel Redis哨兵集群使用

    redis-cli 命令行工具

    1. 语法:redis-cli -h host -p port [-a password]
    2. -h :指定远程主机
    3. -p :指定 Redis 服务的端口号
    4. -a :指定密码,未设置数据库密码可以省略-a 选项
    5. 若不添加任何选项表示,则使用 127.0.0.1:6379 连接本机上的 Redis 数据库
    6. redis-cli -h 192.168.220.101 -p 6379 -a '123456'

    Redis 数据库常用命令

    set、get
    1. set:存放数据,命令格式为 set key value
    2. get:获取数据,命令格式为 get key
    3. set 键名 值 #创建键值对
    4. get 键名 #获取键对应的值;
    keys
    1. keys #查询键
    2. keys *
    3. keys v*
    4. keys v?
    5. *表示查看当前数据库中所有键;
    6. v*表示查看当前数据库中以v开头的数据;
    7. v?表示查看当前数据库中v后只有一个字符的数据
    exists、del、type
    1. #exists 命令可以判断键值是否存在
    2. exists 键名 #查看键值是否存在;返回1表示存在,返回0表示不存在
    3. #del 命令可以删除当前数据库的指定 key
    4. del 键名 #删除键
    5. #type 命令可以获取 key 对应的 value 值类型
    6. type 键名 #查看键对应的值的数据类型
    expire、ttl
    1. expire 键名 秒数 #设置key过期时间
    2. ttl 键名 #查看key还有多少秒过期;
    3. #返回值为剩余秒数,返回-1表示永不过期,返回-2则表示已过期
    rename、renamenx、dbsize
    1. #重命名前可以使用exists命令,查看一下key是否存在
    2. #对已有的key重命名,并覆盖到目标key上
    3. rename 源key 目标key
    4. #对已有的key重命名,并覆盖到目标key上;
    5. #如果目标key已存在则不进行重命名
    6. renamenx 源key 目标key
    7. #dbsize 命令的作用是查看当前数据库中 key 的数目
    8. dbsize #查看当前数据库中key的数量
    设置密码
    1. #​​​​​​​使用config set requirepass yourpassword命令设置密码
    2. 192.168.220.101:6379> config set requirepass abc123
    3. #使用config get requirepass命令查看密码
    4. #(一旦设置密码,必须先验证通过密码,否则所有操作不可用)
    5. 192.168.220.101:6379> auth abc123
    6. OK
    7. 192.168.220.101:6379> config get requirepass
    8. 1) "requirepass"
    9. 2) "abc123"

    Redis 多数据库常用命令

            Redis 是非关系数据库,支持多数据库,Redis 默认情况下包含 16 个数据库,数据库名称是用数字 0-15 来依次命名的。
    多数据库间相互独立,互不干扰。

    select、move、flushdb、flushall
    1. #多数据库间切换
    2. select 序号
    3. select 15 #切换到15库;库的范围为0~15
    4. #多数据库间移动数据
    5. move 键名 序号 #将当前库中的键值对迁移到指定的库中
    6. #清除数据库内的数据
    7. flushdb #清空当前数据库的数据
    8. flushall #清空所有数据库的数据

     ######

  • 相关阅读:
    uniapp中返回结果是promise的处理方式
    iNFTnews | 元宇宙购物体验将成为吸引消费者的一大利器
    如何设置负载均衡EasySLB后端服务器网关
    【NET 7.0、OpenGL ES】使用Silk.NET渲染MMD,并实时进行物理模拟。
    为什么我抓不到baidu的数据包
    基于RuoYi-Flowable-Plus的若依ruoyi-nbcio支持多实例自定义条件的流程流转
    微信支付后页面跳转
    面试理论篇二
    jmeter ant 执行过程详解
    【单片机基础】按键状态机实现短按、长按、双击、三击和N击
  • 原文地址:https://blog.csdn.net/Mo_nor/article/details/132698857