非关系型数据库Redis

文章目录

  • 一,关系型数据库和非关系型数据可区别
    • 1.关系型数据库
    • 2.非关系型数据库
    • 3.区别
      • 3.1存储方式
      • 3.2扩展方式
      • 3.2事务性的支持
  • 二,非关系型数据为什么产生
  • 三,Redis
    • 1.Redis是什么
    • 2.Redis优点
    • 3.Redis适用范围
    • 4. Redis 快的原因
      • 4.1 基于内存运行
      • 4.2 单线程模型
      • 4.3 I/O 多路复用机制
  • 四,Redis安装操作
    • 1.安装步骤(单线程单机安装)
      • 1.1关闭防火墙和增强功能
      • 1.2下载编译包
      • 1.3解压
      • 1.4make
      • 1.5Redis 服务配置文件
      • 1.6/etc/redis/6379.conf配置
    • 2.Redis命令操作
      • 2.1Redis 服务控制
      • 2.2Redis命令工具
      • 2.3 连接 Redis 数据库的命令行工具
      • 2.4redis-benchmark 测试工具
      • 2.5 Redis常用命令
        • (1)set,get
        • (2)keys
        • (3)exists
        • (4)del
        • (5)type
        • (6)rename
        • (7)renamex
        • (8)dbsize
        • (9)查看及设置密码
        • (10)多数据库间切换
        • (11)多数据库间移动数据
        • (12)清除数据库内数据
        • (13)卸载Redis

一,关系型数据库和非关系型数据可区别

1.关系型数据库

是一个结构化的数据库,创建在关系模型(二维表)基础上,一般面向于记录。标准数据查询语言(SQL语句)就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作。数据库使用时要先建立数据库,表结构,存储的数据,数据和表结构不一样就存不起来。

常见的数据库有:

Oracle、MySQL、SQL Server、Microsoft Access、DB2

2.非关系型数据库

不是使用数标准数据查询语言(SQL语句)的数据库都是非关系型。不用先建立库表和表结构可以存不同类型的数据,比如文字、图片、视频、音乐等,字段也可以数量不同

常见的数据库有:

Redis、MongDB(大数据用)、Hbase(大数据用)、CouhDB(云上的)

3.区别

3.1存储方式

  • 关系型数据库是表格形式的,数据存储在数据表的行和列中。数据表彼此关联协作存储,容易提取数据。
  • 非关系型数库据不适合使用传统的表结构(行和列),因为这些数据往往是不规则的、半结构化或非结构化的。它们的存储方式可以灵活处理复杂的数据模式,而不是强制要求数据按照固定的格式存储。数据及其特性是选择数据的存储和提取的方式 。

3.2扩展方式

  • 关系型数据库是纵向扩展,提高处理能力,使用速度更快速的电脑处理相同的数据集就更快。因为数据存储在关系表中, 克服这些瓶颈需要采取各种优化手段。关系型数据库有很大扩展空间,但肯定会达到纵向扩展的上限点,这需要通过高性能电脑来处理。
  • 非关系数据库是横向扩展的。因为非关系型数据存储是分布式的,非关系型数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载。

3.2事务性的支持

  • 如果数据操作需要非常精确的控制,比如确保一系列操作要么全部成功、要么全部失败(称为事务处理,原子性),或者需要对复杂的数据查询进行优化控制,传统的 关系型(SQL )数据库是性能和稳定性方面的最佳选择。关系(SQL) 数据库在处理事务时,可以精细地控制每个操作,并且如果出现问题,可以轻松回滚到之前的状态,确保数据的完整性和安全性。
  • 非关系型数据库也能支持事务操作,但非关系型数据库在稳定性方面比不上 关系型(SQL) 数据库,非关系型(NoSQL) 数据库的优点体现在扩展性和处理大规模数据上,在快速处理大量数据、支持高并发访问时表现得非常出色。

二,非关系型数据为什么产生

Web2.0 纯动态网站类型遇到的三个问题是非关系型数据库产生的原因

三个问题是:

High performance——对数据库高并发读写需求

Huge Storage——对海量数据高效存储与访问需求

High Scalability && High Availability——对数据库高可扩展性与高可用性需求


关系型数据库(如 MySQL) 更适合处理涉及表格数据、复杂查询和事务的操作。非关系型数据库(如 Redis) 更适合处理需要高效存储和快速读取的数据,特别是频繁访问的数据。将两个结合起来形成读写分离,将经常被访问的热点数据存储在非关系型数据库中(如 Redis),而关系型数据库则负责长期存储和复杂查询。这样可以提高系统的整体性能。当用户访问网页时,系统首先会去 Redis(缓存) 中查找数据,因为 Redis 存在内存中,读取速度非常快。如果数据不在 Redis 中,才会去 MySQL(关系型数据库) 中读取,并将数据保存到 Redis 中,以便下次快速访问。

三,Redis

1.Redis是什么

Redis 是一个开源的、使用 C 语言编写的 NoSQL 数据库,广泛应用于高性能的分布式系统中。它主要基于内存运行,支持持久化存储,并采用键值对(Key-Value)的存储形式。在分布式架构中,Redis 是不可缺少的重要组成部分,常用于缓存、消息队列和会话管理。

Redis 采用单进程模型,在同一台服务器上仅使用一个主进程来处理所有的客户端请求,因此处理速度依赖于主进程的执行效率。当多个客户端同时访问时,单进程 Redis 的并发处理能力会受到一定限制。如果对高并发有更高要求,可以在同一台服务器上开启多个 Redis 进程,提升处理能力。开启多个 Redis 进程会增加服务器的 CPU 负载,需要根据实际需求来平衡性能与资源消耗。

Redis 在分布式系统中,能够通过主从复制、集群模式等方式,提升数据处理能力和系统的可扩展性。在高并发和海量数据处理场景下,Redis 是非常重要的基础组件之一。

2.Redis优点

  • 具有极高的数据读写速度(数据读取速度高达十一万次/秒,数据写入速度高达八万一千次/秒。)
  • 支持丰富的数据类型(支持key-value、Strings、Lists、Hashes、Sets Sorted Sets 等数据类型操作)
  • 支持数据的持久化(把内存中的数据保存在磁盘中,重启的时候可以再一次加载使用。)
  • 原子性(一系列操作要么执行成功要么失败)
  • 支持数据备份

3.Redis适用范围

Redis 是一个基于内存运行的数据库,具有极高的读写速度,因此缓存是 Redis 最常见的应用场景之一。 Redis 的发布/订阅(Publish/Subscribe,简称 Pub/Sub)是一种消息通信模式,它允许消息发送者(发布者)将消息发送到多个接收者(订阅者),从而实现一对多的消息传递机制。Redis 通过这种方式,可以让不同的应用或服务之间进行高效的实时消息传递。 Redis还适用于获取最新N个数据的操作 ,** 排行榜类应用**,计数器应用存储关系实时分析系统日志记录

4. Redis 快的原因

4.1 基于内存运行

Redis 是一个内存数据库,所有数据都存储在内存中,而不是硬盘上。内存的读取速度比硬盘要快得多,这使得 Redis 的数据访问几乎是瞬时的。

4.2 单线程模型

Redis 采用单线程模型,这意味着它不用去处理多线程之间的复杂性,比如竞争条件或锁问题。单线程使得每个操作都能够直接、快速执行,没有阻塞或冲突的可能。(在 Redis 6.0 中新增加的多线程也只是针对处理网络请求过程采用了多线性,而数据的读写命令,仍然是单线程处理的。)

4.3 I/O 多路复用机制

Redis 使用了 I/O 多路复用技术,通过 selectpollepoll 等系统调用,让 Redis 能够同时处理多个客户端请求,大幅提升了并发性能。这使得 Redis 在高并发场景下能够保持快速响应。

四,Redis安装操作

Redis 中文网站https://www.tkcnn.com/redis/Getting-started.html
官网https://redis.io/docs/latest/get-started/
Redis下载网址http://download.redis.io/releases/

1.安装步骤(单线程单机安装)

1.1关闭防火墙和增强功能

systemctl stop firewalld
setenforce 0

1.2下载编译包

yum install -y gcc gcc-c++ make 

1.3解压

tar zxvf redis-5.0.7.tar.gz -C /opt

1.4make

Redis源码包中直接提供了 Makefile 文件,所以在解压完软件包后,不用执行 ./configure 命令进行配置,可以直接执行 make 与 make install 命令进行安装。

cd /opt/redis-5.0.7/
make -j 4 && make PREFIX=/usr/local/redis install

虚拟机给的核数多加上-j 4可以快点

1.5Redis 服务配置文件

使用软件包提供的 install_server.sh 脚本文件设置 Redis 服务所需要的相关配置文件

cd /opt/redis-5.0.7/utils/
./install_server.sh

Selected config:
Port           : 6379						                    #默认侦听端口为6379
Config file    : /etc/redis/6379.conf				        #配置文件路径
Log file       : /var/log/redis_6379.log		        #日志文件路径
Data dir       : /var/lib/redis/6379				        #数据文件路径
Executable     : /usr/local/redis/bin/redis-server	#可执行文件路径
Cli Executable : /usr/local/bin/redis-cli			      #客户端命令工具

1.6/etc/redis/6379.conf配置

vim /etc/redis/6379.conf
bind 127.0.0.1 192.168.88.60    #70行,添加 监听的主机地址
port 6379									      #93行,Redis默认的监听端口
daemonize yes								    #137行,启用守护进程
pidfile /var/run/redis_6379.pid	#159行,指定 PID 文件
loglevel notice								  #167行,日志级别
logfile /var/log/redis_6379.log	#172行,指定日志文件

用netstat -antulp|grep redis 可以查看 与 Redis 相关的网络连接信息 ,确定是否安装完成

2.Redis命令操作

2.1Redis 服务控制

/etc/init.d/redis_6379 stop				#停止
/etc/init.d/redis_6379 start			#启动
/etc/init.d/redis_6379 restart		#重启
/etc/init.d/redis_6379 status			#状态

2.2Redis命令工具

edis-server:用于启动 Redis 的工具
redis-benchmark:用于检测 Redis 在本机的运行效率
redis-check-aof:修复 AOF 持久化文件
redis-check-rdb:修复 RDB 持久化文件
redis-cli:Redis 命令行工具

2.3 连接 Redis 数据库的命令行工具

redis-cli -h host -p port -a password

选项

-h :指定远程主机

-p :指定 Redis 服务的端口号

-a :指定密码,未设置数据库密码可以省略-a 选项

redis-cli -h 192.168.xxx.xxx -p 6379
若不添加任何选项表示,则使用 127.0.0.1:6379 连接本机上的 Redis 数据库

2.4redis-benchmark 测试工具

redis-benchmark 是官方自带的 Redis 性能测试工具,可以有效的测试 Redis 服务的性能。

格式

redis-benchmark [选项] [选项值]

选项

-h :指定服务器主机名。

-p :指定服务器端口。

-s :指定服务器 socket

-c :指定并发连接数。 

-n :指定请求数。

-d :以字节的形式指定 SET/GET 值的数据大小。

-k :1=keep alive 0=reconnect 。

-r :SET/GET/INCR 使用随机 key, SADD 使用随机值。

-P :通过管道传输请求。

-q :强制退出 redis。仅显示 query/sec 值。

–csv :以 CSV 格式输出。

-l :生成循环,永久执行测试。

-t :仅运行以逗号分隔的测试命令列表。

-I :Idle 模式。仅打开 N 个 idle 连接并等待。

(1)向ip地址为192.168.端口6379的Redis服务器发一千个并发连接请求和十万个测试性能请求

redis-benchmark -h 192.168.88.60 -p 6379 -c 1000 -n 100000

(2)测试存取一千个字节的数据包

redis-benchmark -h 192.168.88.60 -p 6379 -q -d 1000

(3)测试本机的Redis服务set和lpush的性能

redis-benchmark -t set,lpush -n 100000 -q

2.5 Redis常用命令

(1)set,get

set:存放数据,命令格式为 set key value

get:获取数据,命令格式为 get key格式

set kk xixi
get kk 

(2)keys

取符合规则的键值列表,通常情况可以结合*、?等选项来使用

127.0.0.1:6379> KEYS *		#查看当前数据库中所有键127.0.0.1:6379> KEYS v*	  #查看当前数据库中以 v 开头的数据127.0.0.1:6379> KEYS v?		#查看当前数据库中以 v 开头后面包含任意一位的数据127.0.0.1:6379> KEYS v??  #查看当前数据库中以 v 开头 v 开头后面包含任意两位的数据

(3)exists

判断键值是否存在

exists y44

存在提示1,不存在提示0

(4)del

删除需要删除的key

del y44

(5)type

查看key对应的value值的类型

type x1

(6)rename

对key重命名

使用rename命令进行重命名时,无论目标key是否存在都进行重命名,且源key的值会覆盖目标key的值。

格式

rename 源key 目标key
rename x1 x2

(7)renamex

对已有的key 进行重命名,并检测新名是否存在,如果目标 key 存在则不进行重命名。(不覆盖)

renamenx y3 y33

(8)dbsize

查看当前数据库中 key 的数量

(9)查看及设置密码

1.使用config set requirepass yourpassword命令设置密码

config set requirepass 123456
auth 123456

2.使用config get requirepass命令查看密码(一旦设置密码,必须先验证通过密码,否则所有操作不可用)

config get requirepass

如果密码忘了只能删除 rm -rf /var/run/redis-6379.pid然后重启redis

(10)多数据库间切换

Redis 支持多数据库,Redis 默认情况下包含 16 个数据库,数据库名称是用数字 0-15 来依次命名的。

多数据库相互独立,互不干扰。

select 1

(11)多数据库间移动数据

move命令

set k1 100: #在 Redis 数据库 0 中,创建了一个键 k1,其值为 100。
get k1:     #从数据库 0 获取键 k1 的值,返回 "100"。
select 1     #切换到 Redis 数据库 1。Redis 默认有 16 个数据库(从 0 到 15)
get k1:     #在数据库 1 中获取键 k1 的值,返回 nil,因为 k1 仅存在于数据库 0 中,数据库 1 没有该键。
select 0:   #切换回数据库 0
get k1:     #查看数据库 0 中的键 k1,看是否存在,值为 "100"。
move k1 1:  #将数据库 0 中的键 k1 移动到数据库 1 中。移动操作会将 k1 从数据库 0 中删除,并在数据库 1 中创建 k1,保持其值为 100
select 1:   #切换回数据库 1。
get k1:     #获取数据库 1 中键 k1 的值,现在可以看到 k1 的值为 "100",因为它被从数据库 0 移动到了数据库 1。
select 0:   #切换回数据库 0。
get k1:     #获取数据库 0 中的键 k1,此时返回 nil,k1 已经被移动到了数据库 1,数据库 0 中不再有这个键

(12)清除数据库内数据

FLUSHDB :清空当前数据库数据

FLUSHALL :清空所有数据库的数据,需要谨慎使用

(13)卸载Redis
redis-cli shutdown
或有密码的情况
redis-cli -a 密码 shutdown
rm -f /usr/local/bin/redis-server
rm -f /usr/local/bin/redis-cli
rm -rf /etc/redis
rm -f /usr/local/etc/redis.conf
rm -rf /var/lib/redis
rm -rf /var/log/redis
rm -f /etc/init.d/redis_6379
rm -f /etc/systemd/system/redis.service
cd /path/to/redis/source   #如果不存在目录就不用操作
make distclean
which redis-server         #确认有没有卸载
which redis-cli

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

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

相关文章

直播标准权威发布,阿里云RTS获首批卓越级评估认证

近期举办的2024“可信云大会”上,中国信通院正式发布了2024年上半年音视频领域最新评估结果。阿里云超低延时直播,以首批卓越级,通过中国信通院超低延时直播性能及服务质量分级测试。 标准发布,权威量化直播体验质量 从直播元年发…

神经网络通俗理解学习笔记(0) numpy、matplotlib

Numpy numpynumpy 基本介绍Ndarray对象及其创建Numpy数组的基础索引numpy数组的合并与拆分(重要)numpy数组的矩阵运算Numpy数组的统计运算numpy中的arg运算numpy中的神奇索引和比较 Matplotlib numpy numpy 基本介绍 numpy 大多数机器学习库都用了这个…

【Echarts】使用多横坐标轴展示近十五天天气预报

现在手机都有天气app,使用echarts展示十五天天气预报的需要你遇到过这样离大谱的需求吗&#xff1f;如果没有或许你能从中找到些许思路。 效果 看效果是不是有点那么个意思,开局一张图,代码全靠ctrl c。不多说上代码。 vue模板引擎代码 <template><div ref"xA…

从头开始学MyBatis—02基于xml和注解分别实现的增删改查

首先介绍此次使用的数据库结构&#xff0c;然后引出注意事项。 通过基于xml和基于注解的方式分别实现了增删改查&#xff0c;还有获取参数值、返回值的不同类型对比&#xff0c;帮助大家一次性掌握两种代码编写能力。 目录 数据库 数据库表 实体类 对应的实体类如下&#x…

【LeetCode每日一题】——912.排序数组

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 优先队列 二【题目难度】 中等 三【题目编号】 912.排序数组 四【题目描述】 给你一个整数…

H5 three.js 实现六年级观察物体

o(&#xffe3;▽&#xffe3;)ブ 我又带着新的demo来啦~ 预览 功能点 立方体的阴影 立方体的添加 位置记录 最大限制 三视图展示 立方体的移除 答题模式 随机出题 题库出题 源码 注释算是比较全了&#xff0c;可能部分会有点绕&#xff0c;还能够再优化一下~ <!DOCTYPE …

【第35章】Spring Cloud之Seata-Server快速入门

文章目录 前言一、准备1. 架构图2. 工作机制3. Seata术语4. 事务模式4.1 Seata AT 模式(依赖数据库)4.2 Seata TCC 模式(不依赖数据库)4.3 Seata Saga 模式(支持长事务)4.4 Seata XA 模式(支持XA 协议) 二、安装1. 下载2. 解压3. 重要属性4. 修改配置4.1 配置中心4.2 注册中心4…

C语言 13 指针

指针可以说是整个 C 语言中最难以理解的部分了。 什么是指针 还记得在前面谈到的通过函数交换两个变量的值吗&#xff1f; #include <stdio.h>void swap(int, int);int main() {int a 10, b 20;swap(a, b);printf("a %d, b %d", a, b); }void swap(int …

循环神经网络RNN+长短期记忆网络LSTM 学习记录

循环神经网络&#xff08;RNN) RNN的的基础单元是一个循环单元&#xff0c;前部序列的信息经处理后&#xff0c;作为输入信息传递到后部序列 x为输入向量&#xff0c;y为输出向量&#xff0c;a为上一隐藏层的a与x通过激活函数得到的值&#xff0c;简言之&#xff0c;每一层神…

华为 HCIP-Datacom H12-821 题库 (23)

&#x1f423;博客最下方微信公众号回复题库,领取题库和教学资源 &#x1f424;诚挚欢迎IT交流有兴趣的公众号回复交流群 &#x1f998;公众号会持续更新网络小知识&#x1f63c; 1.以下关于 VRRP 基本概念的描述&#xff0c;错误的是哪些选项&#xff1f; A、一个虚拟路由器…

S32K3 工具篇6:如何将RTD EB工程导入到S32DS

S32K3 工具篇6&#xff1a;如何将RTD EB工程导入到S32DS 1. MCAL_Plugins->Link Source Resource Filters2. Includes3. Preprocessor4. Linker5. optimization6. main.c 这个主题实际上&#xff0c;之前已经有多人写过&#xff0c;并且写的很好&#xff0c;只是实际操作中&…

qt-creator-10.0.2之后版本的jom.exe编译速度慢下来了

1、Qt的IDE一直在升级&#xff0c;qt-creator的新版本下载地址 https://download.qt.io/official_releases/qtcreator/ 2、本人一直用的是qt-creator-10.0.2版本&#xff0c;官网历史仓库可以下载安装包qt-creator-opensource-windows-x86_64-10.0.2.exe https://download.qt…

URP 线性空间 ui资源制作规范

前言&#xff1a; 关于颜色空间的介绍&#xff0c;可参阅 unity 文档 Color space URP实现了基于物理的渲染&#xff0c;为了保证光照计算的准确&#xff0c;需要使用线性空间&#xff1b; 使用线性空间会带来一个问题&#xff0c;ui资源在unity中进行透明度混合时&#xff…

COMP 6714-Info Retrieval and Web Search笔记week1

哭了哭了&#xff0c;这周唯一能听懂的就这门 目录 IR&#xff08;Information Retrieval)是什么&#xff1f;IR的基本假设Unstructured (text) vs. structuredDocuments vs. Database Records比较文本&#xff08;Comparing Text&#xff09;IR的范围(Dimensions of IR)IR的任…

YoloV10改进策略:上采样改进|动态上采样|轻量高效,即插即用(适用于分类、分割、检测等多种场景)

摘要 本文使用动态上采样改进YoloV10,动态上采样是今天最新的上采样改进方法,具有轻量高效的特点,经过验证,在多个场景上均有大幅度的涨点,而且改进方法简单,即插即用! 论文:《DySample:Learning to Upsample by Learning to Sample》 论文:https://arxiv.org/pdf/…

fmql之ubuntu移植

官方资料&#xff1a;ubuntu18的压缩包 目的&#xff1a;放到SD卡中启动ubuntu&#xff08;官方是放在emmc中&#xff09; 教程&#xff1a;99_FMQL45_大黄蜂开发板跑ubuntu18.04.docx 所需文件 其中&#xff0c;format_emmc_ext4.txt对emmc的分区是512M&#xff08;放上述文…

C++ | Leetcode C++题解之第397题整数替换

题目&#xff1a; 题解&#xff1a; class Solution { public:int integerReplacement(int n) {int ans 0;while (n ! 1) {if (n % 2 0) {ans;n / 2;}else if (n % 4 1) {ans 2;n / 2;}else {if (n 3) {ans 2;n 1;}else {ans 2;n n / 2 1;}}}return ans;} };

如何查看串口被哪个程序占用?截止目前最方便的方法

痛点&#xff1a;串口因为某种原因被占用&#xff0c;如何找到罪魁祸首&#xff1f; 做开发的小伙伴们&#xff0c;经常会遇到这样的问题&#xff1a;串口因为某种原因被占用&#xff0c;导致无法通讯&#xff0c;但是又找不到被哪个程序占用。只有重启电脑&#xff0c;才能解…

CSS“多列布局”(补充)——WEB开发系列35

多列布局是一种非常常见的布局方式&#xff0c;适用于内容丰富的页面&#xff0c;如新闻网站、杂志或博客。 一、CSS多列布局概述 CSS多列布局允许我们将内容分成多个垂直列&#xff0c;使页面布局更加灵活和多样化。多列布局的主要属性包括 ​​column-count​​、​​column…

「数组」堆排序 / 大根堆优化(C++)

目录 概述 核心概念&#xff1a;堆 堆结构 数组存堆 思路 算法过程 up() down() Code 优化方案 大根堆优化 Code(pro) 复杂度 总结 概述 在「数组」快速排序 / 随机值优化|小区间插入优化&#xff08;C&#xff09;中&#xff0c;我们介绍了三种基本排序中的冒泡…