非关系型数据库Redis

news/2024/9/18 14:18:44/ 标签: nosql, 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			      #客户端命令工具

redis6379conf_148">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 数据库

redisbenchmark__221">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.ppmy.cn/news/1525805.html

相关文章

【RabbitMQ 项目】项目概述

项目概述 一.角色划分二.服务器模块概述1.本地模块2.网络模块3.服务器模块 三.模块详细划分1.服务端2.客户端 一.角色划分 该项目的模型是一个跨主机的生产消费模型,有三种角色:生产者,消费者,中间人。对应就要实现三个大模块&…

golang学习笔记16——golang部署与运维全攻略

推荐学习文档 golang应用级os框架,欢迎star基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总golang学习笔记01——基本数据类型golang学习笔记02——gin框架及基本原理golang学习笔记03——gin框架的核心数据结构golang学…

简单数据库sqlite

目录 数据库 简介 1、分类: 大型 中型 小型 2、名词: 3、嵌入式数据库: 4、sqlite3的安装: LTS long term support 5.1、sqlite3的使用: 0、启动sqlite3 1、系统维护命令:> .help 5.2、标准SQL…

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

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

CSP-J 算法基础 图论

文章目录 前言图的简介1. **图的定义**2. **图的类型**3. **图的表示方法**a. **邻接矩阵(Adjacency Matrix)**b. **邻接表(Adjacency List)** 4. **图的基本操作**5. **图的遍历**6. **图的应用**7. **图的算法** 出度与入度1. *…

5--SpringBoot、Mybatis

目录 Mybatis Mybatis入门操作步骤 1.准备工作 创建springboot工程 创建数据库表和实体类 连接数据库 创建接口XxxMapper 2.数据库连接池 Lombok 使用 Mybatis 准备工作 删除 日志输入 参数占位符 新增 更新 查询 驼峰命名 条件查询 XML 创建XML文件 编…

【LeetCode每日一题】——LCR 078.合并 K 个升序链表

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目注意】六【题目示例】七【题目提示】八【解题思路】九【时间频度】十【代码实现】十一【提交结果】 一【题目类别】 优先队列 二【题目难度】 困难 三【题目编号】 LCR 078.合并 K 个升序链表 …

LeetCode题练习与总结:基本计算器 Ⅱ--227

一、题目描述 给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。 整数除法仅保留整数部分。 你可以假设给定的表达式总是有效的。所有中间结果将在 [-2^31, 2^31 - 1] 的范围内。 注意:不允许使用任何将字符串作为数学表达式计算…

深度挖掘| 如何高效实现Cloudera 安装之基础环境搭建

Cloudera Manager是CDH市场领先的管理平台。它以其强大的数据管理和分析能力,帮助企业能够轻松驾驭海量数据,实现数据的实时分析与洞察。 作为业界第一的端到端 Apache Hadoop 的管理应用,Cloudera Manager对CDH的每个部件都提供了细粒度的可…

软件测试工程师面试整理-编程与自动化

在软件测试领域,编程与自动化是提升测试效率、覆盖率和可靠性的关键因素。掌握编程技术和自动化测试框架,能够帮助测试人员有效地执行大量重复性测试任务,并迅速反馈软件的质量状况。以下是编程与自动化在测试中的主要应用及相关技术介绍: 1. 编程语言与自动化 ● 常用编程…

k8s dashboard token 生成/获取

创建示例用户 在本指南中,我们将了解如何使用 Kubernetes 的服务帐户机制创建新用户、授予该用户管理员权限并使用与该用户绑定的承载令牌登录仪表板。 对于以下每个和的代码片段ServiceAccount,ClusterRoleBinding您都应该将它们复制到新的清单文件(如)…

Java应用压测工具JMeter

目录 1、下载JMeter 2、配置环境变量 3、配置语音 4、使用 1、下载JMeter Apache JMeter - Apache JMeter™ 千万别下载这个,会报错、 千万别下载这个,会报错、 千万别下载这个,会报错 下载这个,失败多下载几次 2、配置环…

http的请求方式

HTTP协议支持多种请求方法,每种方法都有其特定的用途和场景。以下是HTTP中最常用的几种请求方法及其用途: ‌‌GET‌:用于请求服务器发送资源,通常用于请求数据。GET请求常用于获取信息,如查询操作,其参数附…

明天考教资之作文素材

草木不经霜雪,则生意不顾;吾人不经忧患,则德惠不成。人生的大海波澜壮阔,纵然狂风骤雨卷起千堆雪,海也只当吹皱了春水,永远吹不走的,是那颗永恒的直面磨难的心。 追风赶月莫停留,平芜…

ISP住宅网络的特点是什么

在互联网服务领域,ISP(互联网服务提供商)住宅网络是连接家庭用户与互联网世界的重要桥梁。随着技术的发展和用户需求的增长,ISP住宅网络已经成为现代生活中不可或缺的一部分。本文将探讨ISP住宅网络的特点、它所带来的优势以及在不…

【CSS|第1期】网页设计的演变:从表格布局到Grid布局

日期:2024年9月9日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉在这里插入代码片得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对…

分治算法之归并排序详细解读(附带Java代码解读)

分治算法中的归并排序(Merge Sort) **归并排序(Merge Sort)是一种基于分治法(Divide and Conquer)**的排序算法。其核心思想是将数组递归地分成若干个子数组,分别对每个子数组进行排序&#xf…

【计算机网络 - 基础问题】每日 3 题(四)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏&…

25届计算机专业选题推荐-基于python的线上拍卖会管理系统【python-爬虫-大数据定制】

💖🔥作者主页:毕设木哥 精彩专栏推荐订阅:在 下方专栏👇🏻👇🏻👇🏻👇🏻 实战项目 文章目录 实战项目 一、基于python的线上拍卖会管理…

老古董Lisp实用主义入门教程(8):挠痒痒先生建网站记

是时候来个真正的应用 几位奇形怪状, 百无聊赖的先生, 用Common Lisp 搞东搞西一阵子, 总觉得没有干什么正经事. 一般而言, 学习编程语言总是应该先搞点计算, 让CPU燥起来. 但是Lisp搞计算总感觉有点不太对劲, 虽然颠倒先生已经尝试把数学公式改成中序以增强动力, 但是不行. 隔…