非关系型数据库Redis

news2024/12/26 12:56:20

文章目录

  • 一,关系型数据库和非关系型数据可区别
    • 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.coloradmin.cn/o/2137068.html

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

相关文章

1-4微信小程序基础

模板配置 🌮🌮目标 1.能够使用WXML模板语法渲染页面结构2.能够使用WXSS样式渲染标签样式3.能够使用app.json对小程序进行全局配置4.能够使用page.json对小程序页面进行个性化配置5.如何发起网络数据请求 数据绑定的基本原则 在data中定义数据在WXML中…

(论文解读)Visual-Language Prompt Tuning with Knowledge-guided Context Optimization

Comment: accepted by CVPR2023 基于知识引导上下文优化的视觉语言提示学习 摘要 提示调优是利用任务相关的可学习标记将预训练的视觉语言模型(VLM)适应下游任务的有效方法。基于CoOp的代表性的工作将可学习的文本token与类别token相结合,…

Linux环境使用Git同步教程

📖 前言:由于CentOS 7已于2024年06月30日停止维护,为了避免操作系统停止维护带来的影响,我们将把系统更换为Ubuntu并迁移数据,在此之前简要的学习Git的上传下载操作。 目录 🕒 1. 连接🕘 1.1 配…

Effective C++笔记之二十二:C++临时变量的析构

先来看段代码 #include <iostream> #include <string>std::string myBlog() {return "https://blog.csdn.net/caoshangpa"; }int main() {const char *p myBlog().c_str();std::cout << p << std::endl;return 0; } 预期输出&#xff1a;…

Netty笔记06-组件ByteBuf

文章目录 概述ByteBuf 的特点ByteBuf的组成ByteBuf 的生命周期 ByteBuf 相关api1. ByteBuf 的创建2. 直接内存 vs 堆内存3. 池化 vs 非池化4. ByteBuf写入代码示例 5. ByteBuffer扩容6. ByteBuf 读取7. retain() & release()TailContext 释放未处理消息逻辑HeadContext 8. …

【新片场-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

面试爱考 | 设计模式

一、概述二、创建型 1. 单例&#xff08;Singleton&#xff09; IntentClass DiagramImplementationExamplesJDK 2. 简单工厂&#xff08;Simple Factory&#xff09; IntentClass DiagramImplementation 3. 工厂方法&#xff08;Factory Method&#xff09; IntentClass Diagr…

饿了么基于Flink+Paimon+StarRocks的实时湖仓探索

摘要&#xff1a;本文整理自饿了么大数据架构师、Apache Flink Contributor 王沛斌老师在8月3日 Streaming Lakehouse Meetup Online&#xff08;Paimon x StarRocks&#xff0c;共话实时湖仓架构&#xff09;上的分享。主要分为以下三个内容&#xff1a; 饿了么实时数仓演进之…

GHOST重装后DEF盘数据救援指南

一、现象解析&#xff1a;GHOST重装后的DEF盘失踪之谜 在计算机维护的日常中&#xff0c;GHOST重装因其快速便捷的特点&#xff0c;成为众多用户解决系统问题的首选方法。然而&#xff0c;这一操作虽能迅速恢复系统至初始状态&#xff0c;却也暗藏风险&#xff0c;尤其是当不慎…

火语言RPA流程组件介绍--单选/复选框

&#x1f6a9;【组件功能】&#xff1a;勾选页面单选/复选框元素 配置预览 配置说明 丨目标元素 支持T或# 默认FLOW输入项 通过自动捕获工具捕获(选择元素工具使用方法)或手动填写网页元素的css,xpath&#xff0c;指定对应网页元素作为操作目标 丨操作 对目标元素进行的勾…

分布式中间件-redis相关概念介绍

文章目录 什么是redis?示意图Redis的主要特点Redis的主要用途Redis的工作原理Redis的持久化与备份 redis 6.x新增特性多线程数据加载客户端缓存新的 RESP 3 协议支持ACL&#xff08;Access Control List&#xff09;功能新增数据类型性能改进配置文件的改进其他改进 redis数据…

MySQL:表中的数据类型

数值类型 int类型 int类型包含以下五种&#xff1a; 类型大小tinyint1 bytesmallint2 bytemediumint3 byteint4 bytebigint8 byte 表t1的num列的类型就是tinyint&#xff0c;我们尝试对其插入数据&#xff0c;来测试其范围。tinynt占1 byte&#xff0c;那么就可以表示256个数…

opengl学习6

理解glVertexAttribPointer()函数 OpenGL glVertexAttribPointer&#xff08;&#xff09;函数解析-CSDN博客 难理解的是最后一个参数。 这个参数指明了&#xff0c;顶点属性的数据从哪里获取。 # 如果是(void*) 0&#xff0c;则表示数据从已绑定的VBO中获取&#xff0c;从…

Flutter Web首次加载时添加动画

前言 现在web上线后首次加载会很慢&#xff0c;要5秒以上&#xff0c;并且在加载的过程中界面是白屏。因此想在白屏的时候放一个加载动画 实现步骤 1.添加以下<style>标签内容到<head>标签中 <style>.loading {display: flex;justify-content: center;ali…

使用Ubuntu耳机输出正弦波信号

最近有一个项目想使用喇叭发出一个标准的正弦波测试信号&#xff0c;故记录下操作过程 sudo apt install libasound2-dev 否则有可能会报错&#xff1a; alsaaudio.c:28:10: fatal error: alsa/asoundlib.h: No such file or directory 安装pyalsaaudio&#xff1a; pip …

《 C++ 修炼全景指南:六 》深入探索 C++ 标准库中的 stack 与 queue 容器适配器

1、引言 1.1、容器适配器的概念与应用 容器适配器&#xff08;Container Adapters&#xff09;是 C 标准库提供的一种特殊容器&#xff0c;它不是一种独立的容器&#xff0c;而是对其他标准容器的封装&#xff0c;用来实现特定的数据结构如栈&#xff08;stack&#xff09;和…

【成品论文】2024年华为杯研赛D题成品论文获取入口

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击文末的卡片&#xff0c;那是获取资料的入口! 现分享2023年华为杯研赛D题成品论文&#xff08;部分&#xff09;&#xff0c;供大家学习&#xff1a; 题 目&#xff1a; ____区域双碳目标与路径规划研究 …

MySQL之安装与基础知识

目录 一&#xff1a;在centos7上安装MySQL数据库 1.卸载默认存在的环境 2.配置mysql的yum源 3. 安装MySQL 4.登录mysql 5.设置MySQL的配置文件 二&#xff1a;MySQL基础知识 1.什么是数据库 2.主流数据库 3.服务器&#xff0c;数据库&#xff0c;表关系及使用案例 4…

function uuid_generate_v4()不存在

说明&#xff1a;记录一次使用postgresql函数错误&#xff0c;如下&#xff1a; 项目中的一个SQL用到了uuid_generate_v4()函数生成uuid作为记录的主键&#xff0c;结果报上面这个错误&#xff1b; 分析&排查 首先&#xff0c;我连接上了数据库&#xff0c;在数据库里敲下…