目录
1、关系型数据库与非关系型数据库、
1.1、了解关系数据库与非关系型数据库
1.1.1、关系型数据库
1.1.2、非关系型数据库
1.2、非关系型数据库
1.2.1、概念
1.2.2、产生背景
1.2.3、非关系型数据库的主要特点
1.3、关系型数据库和非关系型数据库区别:
2、redis
2.1、概述:
2.2、Redis的主要特点包括:
2.3、Redis具有优点:
2.4、Redis为什么这么快:
2.5、redis部署
2.5.1、关闭防火墙
2.5.2、解压安装包
2.5.3修改配置 /etc/redis/6379.conf 参数
2.5.4、-redis-benchmark 测试工具
2.5.4.1、基本的测试语法:
2.6、.Redis 数据库常用命令
2.6.1创建与获取
2.6.2、keys 命令可以取符合规则的键值列表,通常情况可以结合*、?等选项来使用。
2.6.2.1、查看数据所有键
2.6.2.2、查看当前数据库中以k 开头的数据
2.6.2.3、查看当前数据库中以 z开头后面包含任意一位的数据
2.6.2.4、查看当前数据库中以k开头 k开头后面包含任意两位的数据
2.6.3、exists 命令可以判断键值是否存在
2.6.4、del 命令可以删除当前数据库的指定 key。
2.6.5、type 命令可以获取 key 对应的 value 值类型。
2.6.6、rename 命令是对已有 key 进行重命名。(覆盖)
2.6.7、dbsize 命令的作用是查看当前数据库中 key 的数目
2.6.7.1、使用config set requirepass yourpassword命令设置密码
2.6.8、Redis 多数据库常用命令
2.6.8.1、多数据库间切换
2.6.8.2、多数据库间移动数据
1、关系型数据库与非关系型数据库、
1.1、了解关系数据库与非关系型数据库
1.1.1、关系型数据库
一个结构化的数据库,创建在关系模型基础上
一般面向于记录
包括Oracle、MySQL、SQL Server、 Microsoft Access(postgresot)、DB2等
1.1.2、非关系型数据库
除了主流的关系型数据库外的数据库,都认为是非关系型
包括Redis、MongBD、Hbase、 CouhDB等
淘汰机制:内存负载高于限制,优先选择淘汰(删除)一些数据
命中机制:高并发环境下,数据访问频繁
1.2、非关系型数据库
1.2.1、概念
非关系型数据库(NoSQL)是一种用于存储和检索大量数据的数据库系统,与传统的关系型数据库(RDBMS)相对。它们被设计用于解决关系型数据库无法有效处理的大规模数据和高并发访问的问题
1.2.2、产生背景
High performance——对数据库高并发读写需求
Huge Storage——对海量数据高效存储与访问需求
High Scalability && High Availability——对数据库高可扩展性与高可用性需求
1.2.3、非关系型数据库的主要特点
1. 非结构化数据模型:
与传统关系型数据库使用表格和行的结构不同,非关系型数据库使用各种数据模型来存储数据,如键值对、文档、图形和列族等。这种灵活性使得它们能够存储半结构化和非结构化数据,适应不同类型的数据存储需求。
2. 高度可伸缩性:
非关系型数据库通常采用分布式架构,可以轻松地水平扩展以处理大规模数据和高并发访问。通过添加更多的节点,数据库能够处理更大的负载,实现线性可伸缩性。
3. 高性能和低延迟:
由于非关系型数据库通常采用简单的数据模型,避免了复杂的关系查询和连接操作,因此能够提供更快的读写速度和较低的延迟。这对于需要处理大量请求和快速响应的应用程序非常重要。
4. 弱一致性:
非关系型数据库通常追求最终一致性而不是强一致性。这意味着在数据更新后,系统可能会存在一段时间的不一致状态。然而,这种权衡可以提高数据库的可用性和性能,并允许更大的分布式灵活性。
5. 多样化的数据模型:
非关系型数据库提供了多种数据模型,如键值对、文档、图形和列族等。这使得开发人员可以根据应用程序的具体需求选择最适合的数据模型,提高数据存储和检索的效率。
需要注意的是,尽管非关系型数据库在某些方面具有优势,但也存在一些限制。例如,它们不支持复杂的关系查询和事务处理,并且可能缺乏成熟的工具和生态系统。因此,在选择使用非关系型数据库时,需要权衡好其特点与应用需求之间的匹配程度。
1.3、关系型数据库和非关系型数据库区别:
1、数据存储方式不同
关系型和非关系型数据库的主要差异是数据存储的方式。关系型数据天然就是表格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。 与其相反,非关系型数据不适合存储在数据表的行和列中,而是大块组合在一起。非关系型数据通常存储在数据集中,就像文档、键值对或者图结构。你的数据及其特性是选择数据存储和提取方式的首要影响因素。
2、扩展方式不同
SQL和NoSQL数据库最大的差别可能是在扩展方式上,要支持日益增长的需求当然要扩展。 要支持更多并发量,SQL数据库是纵向扩展,也就是说提高处理能力,使用速度更快速的计算机,这样处理相同的数据集就更快了。因为数据存储在关系表中,操作的性能瓶颈可能涉及很多克服。虽然SQL数据库有很大扩展空间,但最终肯定会达到纵向扩展的上限个表,这都需要通过提高计算机性能来。
而NoSQL数据库是横向扩展的。因为非关系型数据存储天然就是分布式的,NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载。
关系:纵向 比如说硬件中添加内存
非关:横向 天然分布式
3、对事务性的支持不同
如果数据操作需要高事务性或者复杂数据查询需要控制执行计划,那么传统的SQL数据库从性能和稳定性方面考虑是你的最佳选择。SQL数据库支持对事务原子性细粒度控制,并且易于回滚事务。 虽然NoSQL数据库也可以使用事务操作,但稳定性方面没法和关系型数据库比较,所以它们真正闪亮的价值是在操作的扩展性和大数据量处理方面。
2、redis
2.1、概述:
Redis (远程字典服务器) 是一个开源的、使用 C 语言编写的 NOSOL 数据库。 基于内存运行并支持持久化,采用key-value (键值对)的存储形式,是目前分布式架构中不可或缺的,服务器程序是单进程模型,也就是在一台服务器可以同时启动多个Redis进程,Bedis的实际外理速度
Redis(Remote Dictionary Server)是一个开源的高性能键值存储系统,属于非关系型数据库(NoSQL)。它以内存为主要数据存储方式,同时支持数据持久化到磁盘,并提供了丰富的数据结构和功能。
Redis最初由Salvatore Sanfilippo开发,旨在解决Web应用程序中常见的性能问题。它采用C语言编写,具有卓越的性能和低延迟。Redis支持多种数据结构,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)等。
2.2、Redis的主要特点包括:
1. 高性能:
Redis将数据存储在内存中,因此可以提供极快的读写速度。它使用了高效的数据结构和异步I/O等技术,使其具有出色的性能和低延迟。
2. 数据持久化:
Redis支持将部分数据持久化到磁盘上,确保数据的持久性。它提供了两种数据持久化方式:快照(snapshotting)和日志追加(append-only file)。
3. 多样的数据结构:
Redis支持多种数据结构,如字符串、哈希表、列表、集合和有序集合等。这些数据结构的灵活性使得Redis适用于各种应用场景。
4. 支持丰富的功能:
除了基本的数据存储和检索功能,Redis还提供了事务处理、发布/订阅消息机制、分布式锁、BitMap位图操作、地理位置信息存储和计数器等丰富的功能。
5. 分布式支持:
Redis支持主从复制和集群模式,实现数据的高可用性和水平扩展。它可以通过复制和分片来处理大规模的数据和高并发负载。
Redis被广泛应用于缓存、会话管理、消息队列、实时计数器等各种场景。它简单易用、性能出色,成为许多企业和开发者首选的数据存储解决方案之一。
2.3、Redis具有优点:
(1)具有极高的数据读写速度:数据读取的速度最高可达到 110000 次/s,数据写入速度最高可达到 81000 次/s。
(2)支持丰富的数据类型:支持 key-value、Strings、Lists、Hashes、Sets 及 Sorted Sets 等数据类型操作。
(3)支持数据的持久化:可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
(4)原子性:Redis 所有操作都是原子性的。 (5)支持数据备份:即 master-salve 模式的数据备份。
Redis作为基于内存运行的数据库,缓存是其最常应用的场景之一。除此之外,Redis常见应用场景还包括获取最新N个数据的操作、排行榜类应用、计数器应用、存储关系、实时分析系统、日志记录。
1. 高性能:
Redis将数据存储在内存中,因此能够实现极快的读写速度。它使用了高效的数据结构和异步I/O技术,具备出色的性能和低延迟。
2. 数据结构丰富:
Redis支持多种数据结构,如字符串、哈希表、列表、集合和有序集合等。这些数据结构的灵活性使得开发人员可以根据具体需求选择合适的数据结构,提高数据存储和处理的效率。
3. 缓存功能:
由于Redis的高性能和灵活的数据结构,它非常适用于作为缓存系统使用。将频繁访问的数据存储在Redis中,可以显著提高应用程序的响应速度和吞吐量。
4. 持久化支持:
Redis支持将部分或全部数据持久化到磁盘上,确保数据的持久性。通过快照(snapshotting)和日志追加(append-only file)两种方式,可以根据需求进行选择。
5. 分布式支持:
Redis支持主从复制和集群模式,实现数据的高可用性和水平扩展。通过复制和分片,可以将负载分散到多个节点,提高系统的容错性和扩展性。
6. 简单易用:
Redis具有简单明了的命令行接口和丰富的客户端库,使用起来非常方便。它提供了易于理解和操作的API,使得开发人员能够快速上手并与现有应用程序无缝集成。
7. 应用场景广泛:
由于Redis的高性能、多样的数据结构和丰富的功能,它在许多应用场景中都能发挥重要作用。例如,会话管理、实时计数器、消息队列、排行榜、地理位置服务等。
需要注意的是,虽然Redis具有这些优点,但它也有一些局限性,例如存储容量受限于内存大小、不支持复杂查询等。因此,在选择使用Redis时,需要根据具体需求进行综合评估并结合其他数据库系统来满足应用程序的需求。
2.4、Redis为什么这么快:
1、Redis是一款纯内存结构,避免了磁盘I/o等耗时操作。
2、Redis命令处理的核心模块为单线程,减少了锁竞争,以及频繁创建线程和销毁线程的代价,减少了线程上下文切换的消耗。
3、采用了 I/O 多路复用机制,大大提升了并发效率。
1. 内存存储:
Redis将数据主要存储在内存中,而不是磁盘上。相比于传统数据库系统需要从磁盘读取数据的IO操作,内存访问速度更快,因此Redis能够实现极高的读写性能。
2. 简单的数据结构:
Redis采用简单、轻量级的数据结构,如字符串、哈希表、列表、集合和有序集合等。这些数据结构在内存中可以高效地存储和访问,使得Redis的操作非常快速。
3. 高效的数据操作:
Redis使用了高效的数据结构和算法,以及优化的底层实现。例如,它使用哈希表来存储键值对,使得查找和更新操作的时间复杂度为O(1),保证了快速的数据访问。
4. 异步I/O模型:
Redis利用异步I/O模型,通过单线程处理多个客户端请求。这种非阻塞的方式使得Redis能够同时处理大量的并发请求,提高了系统的吞吐量。
5. 零拷贝技术:
Redis使用零拷贝技术在网络传输中减少数据的复制次数,避免了额外的CPU和内存开销,提高了网络传输的效率。
6. 缓存系统:
作为一种常见的缓存系统,Redis将热点数据存储在内存中,并提供了高效的缓存策略,如LRU(最近最少使用)、LFU(最不常用)等。这样可以减少对后端存储系统的访问,进一步提高性能。
需要注意的是,尽管Redis具有很高的性能,但也有一些限制因素,例如单线程处理请求可能会受到硬件资源的限制,同时内存容量也会限制可存储的数据量。因此,在实际应用中,需要根据具体的场景和需求来合理配置和使用Redis,以获得最佳的性能和吞吐量。
2.5、redis部署
2.5.1、关闭防火墙
2.5.2、解压安装包
需要手动修改为 /usr/local/redis/bin/redis-server ,注意要一次性正确输入
2.5.3修改配置 /etc/redis/6379.conf 参数
70行,添加 监听的主机地址
Redis默认的监听端口
启用守护进程
需要将服务启动
2.5.4、-redis-benchmark 测试工具
redis-benchmark 是官方自带的 Redis 性能测试工具,可以有效的测试 Redis 服务的性能。
2.5.4.1、基本的测试语法:
redis-benchmark [选项] [选项值]。
选项 | 说明 |
-h | 指定服务器主机名 |
-p | 指定服务器端口 |
-s | 指定服务器 socket |
-c | 指定并发连接数 |
-n | 指定请求数。 |
-d | 以字节的形式指定 SET/GET 值的数据大小 |
-k | 1=keep alive 0=reconnect |
-r | :SET/GET/INCR 使用随机 key, SADD 使用随机值 |
-P | 通过管道传输<numreq>请求 |
-q | 强制退出 redis。仅显示 query/sec 值 |
--csv | 以 CSV 格式输出 |
-l | 生成循环,永久执行测试 |
-t | 仅运行以逗号分隔的测试命令列表 |
-I | Idle 模式。仅打开 N 个 idle 连接并等待 |
向 IP 地址为 192.168.10.23、端口为 6379 的 Redis 服务器发送 100 个并发连接与 100000 个请求测试性能
redis-benchmark -h 192.168.10.23 -p 6379 -c 100 -n 100000
测试存取大小为 100 字节的数据包的性能
redis-benchmark -h 192.168.41.21 -p 6379 -q -d 100
测试本机上 Redis 服务在进行 set 与 lpush 操作时的性能
2.6、.Redis 数据库常用命令
2.6.1创建与获取
set:存放数据,命令格式为 set key value
get:获取数据,命令格式为 get key
2.6.2、keys 命令可以取符合规则的键值列表,通常情况可以结合*、?等选项来使用。
创建键值对
2.6.2.1、查看数据所有键
192.168.41.21:6379> keys * 查看当前数据库中所有键
2.6.2.2、查看当前数据库中以k 开头的数据
192.168.41.21:6379> keys k*
2.6.2.3、查看当前数据库中以 z开头后面包含任意一位的数据
192.168.41.21:6379> keys z?
2.6.2.4、查看当前数据库中以k开头 k开头后面包含任意两位的数据
192.168.41.21:6379> keys k??
2.6.3、exists 命令可以判断键值是否存在
1 表示 teacher 键是存在
0 表示 tea 键不存在
192.168.41.21:6379> exists k47
2.6.4、del 命令可以删除当前数据库的指定 key。
192.168.41.21:6379> del zo
2.6.5、type 命令可以获取 key 对应的 value 值类型。
192.168.41.21:6379> type k1
2.6.6、rename 命令是对已有 key 进行重命名。(覆盖)
命令格式:
rename 源key 目标key
使用rename命令进行重命名时,无论目标key是否存在都进行重命名,且源key的值会覆盖目标key的值。在实际使用过程中,建议先用 exists 命令查看目标 key 是否存在,然后再决定是否执行
rename 命令,以避免覆盖重要数据。
2.6.7、dbsize 命令的作用是查看当前数据库中 key 的数目
127.0.0.1:6379> dbsize
2.6.7.1、使用config set requirepass yourpassword命令设置密码
192.168.41.21:6379> config set requirepass abc123
使用config get requirepass命令查看密码(一旦设置密码,必须先验证通过密码,否则所有操作不可用)
2.6.8、Redis 多数据库常用命令
Redis 支持多数据库,Redis 默认情况下包含 16 个数据库,数据库名称是用数字 0-15 来依次命名的。
多数据库相互独立,互不干扰
2.6.8.1、多数据库间切换
命令格式:select 序号
192.168.41.21:6379> select 15
2.6.8.2、多数据库间移动数据
格式:move 键值 序号
192.168.41.21:6379> move k1 2 #将数据库 0 中 k1 移动到数据库 2中
(integer) 1
192.168.41.21:6379> select 2 切换至目标数据库 2
OK
192.168.41.21:6379[2]> keys *
1) "k1"