【 0 】REDIS下载地址
https://suyin-tools.cn/Tools/PC/办公软件/Redis Desktop Manager)
【 1 】什么是redis
Redis(Remote Dictionary Server)是一个开源的内存数据库,遵守 BSD 协议,它提供了一个高性能的键值(key-value)存储系统,常用于缓存、消息队列、会话存储等应用场景。
【 2 】数据库
数据库(Database)是长期存储在计算机内的、有组织的、可共享的大量数据的集合。这些数据按照特定的数据模型组织、描述和存储,并且具有较小的冗余度、较高的数据独立性和易扩展性。数据库系统可以方便地进行数据的插入、查询、更新和删除等操作。
【 3 】关系型数据库(RDBMS)
关系型数据库管理系统(RDBMS, Relational Database Management System)是基于关系模型的数据库系统。关系模型的核心是二维表(关系),由行和列组成,每个表有一个唯一的主键(Primary Key)。RDBMS 使用 SQL(Structured Query Language,结构化查询语言)作为查询语言。
常见的关系型数据库有:
- PostgreSQL
- MySQL
- SQL Server
- Oracle(国家之前主推的关系型数据库)
- SQLite
- DB2
- Teradata
这些数据库系统通常提供事务管理、并发控制、数据完整性检查等功能,并且支持 ACID 属性(原子性、一致性、隔离性、持久性)。
【 3 】非关系型数据库(NoSQL)
非关系型数据库(NoSQL)泛指非关系型的、分布式的、不保证遵循 ACID 原则的数据库系统。NoSQL 数据库的设计目标是解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
NoSQL 数据库可以分为以下几种类型:
键值对存储数据库使用简单的键值对来存储数据,其中键是唯一的,每个键对应一个值。这些数据库通常提供快速读取操作。
列存储数据库将数据按列存储而不是按行存储。这种设计使得查询某些列的数据时更加高效,因为只需要读取这些列的数据,而不是整行的数据。
文档存储数据库以文档(如 JSON 对象)的形式存储数据。每个文档都是一个独立的数据项,包含一组键值对。文档可以包含嵌套文档和数组,使得数据模型更加灵活。
图存储数据库使用图结构来存储数据,图中的节点表示实体,边表示实体之间的关系。这种数据模型非常适合表示社交网络、推荐系统等复杂关系型数据。
时间序列存储数据库用于存储随时间变化的数据,如监控数据、日志数据等。这些数据库通常提供高效的数据插入和查询操作,并支持复杂的时间序列数据分析功能。
搜索引擎虽然不严格属于 NoSQL 数据库的范畴,但它们通常与 NoSQL 数据库一起使用,以提供高效的全文搜索功能。这些系统支持复杂的查询语法和搜索算法,使得在大量文本数据中查找信息变得简单而高效。
【 4 】Redis
- 必须要注意的就是这个一定要选上。这个必须要。这个就是可以自动添加到环境变量上。
# redis:
1 开源使用c编写的cs架构软件
-c:客户端:命令创建,桌面软件resp,Navicat,Python代码,Go,Java,Node
-s:服务端:一台服务器,一直运行,监听 6379端口
2 key-value形式存储
3 vaule有5种数据类型
-字符串
-列表
-hash
-集合
-有序集合
4 纯内存存储:速度非常快--》适合用于高并发场景
5 可以持久化:永久保存
6 数据操作-》单进程,单线程架构--》没有锁
7 使用了IO多路复用的模型:并发量高
# redis版本 最新:7.x win上 5.x
-https://redis.io/downloads/
-Redis Stack downloads:编译过后的软件,不提供win版本
-redis:源码,需要编译
-不支持:微软,基于源码修改--》能在win上编译
# win安装redis win版本下载地址
# 最新5.x版本 https://github.com/tporadowski/redis/releases/
# 最新3.x版本 https://github.com/microsoftarchive/redis/releases
下载完一路下一步即可,具体可参照:
https://www.cnblogs.com/liuqingzheng/p/9831331.html
# 一路下一步,安装成功
1 D:\Program Files\Redis 有两个可执行文件
redis-cli---》mysql 客户端
redis-server--》mysqld 服务端
2 自动在服务中,做一个redis服务,以后通过服务启动和停止
# redis客户端
-1 cmd命令中的reids-cli
-redis-cli # 默认链本地的6379
-redis-cli -h 地址 -p 端口
-2 软件:rdm,resp:老版本免费,新版本收费
-输入地址和端口,连接即可
-3 软件:navicat:收费
-输入地址和端口,连接即可
# redis服务启动和停止
-1 使用服务--》点击启动,停止即可
-net start redis
-net stop redis
-2 使用命令:(启动server)
-redis-server 配置文件启动
-redis-server ./redis.windows-service.conf
-ctrl c
-3 关闭:在客户端
shutdown :友好关闭
1. 开源使用 C 编写的 CS 架构软件
Redis 是一个开源的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中介。Redis 是用 C 语言编写的,支持客户端-服务器(CS)架构。客户端可以通过各种编程语言的库或命令行工具与 Redis 服务器进行交互。
- C: Redis 的主要代码是用 C 语言编写的,这确保了其高性能和跨平台兼容性。
- CS 架构: Redis 采用客户端-服务器架构,客户端向服务器发送命令并接收响应。
2. Key-Value 形式存储
Redis 是一个基于键值对的存储系统,其中键(Key)是字符串,值(Value)可以是多种数据类型。
3. Value 有 5 种数据类型
- 字符串(String): 最基本的数据类型,可以被存储为二进制安全的字符串。
- 列表(List): 一个简单的字符串列表,按照插入顺序排序。你可以从列表的两端推入或者弹出元素。
- 哈希(Hash): 类似于一个哈希表(或映射、字典),用于存储键值对。
- 集合(Set): 是字符串类型的无序集合。集合成员是唯一的,没有重复数据。
- 有序集合(Sorted Set): 类似于集合,但每个元素都会关联一个双精度浮点数分数。Redis 正是通过分数来为集合中的成员进行从小到大的排序。成员是唯一的,但分数(score)可以重复。
4. 纯内存存储:速度非常快
Redis 的所有数据都存储在内存中,这使得读写操作非常快。因此,Redis 非常适合作为缓存系统或需要快速响应的应用程序的存储后端。
5. 可以持久化:永久保存
尽管 Redis 是一个内存数据库,但它也提供了持久化功能,可以将数据保存到磁盘上,以便在系统重启后恢复数据。Redis 支持两种持久化方式:RDB(快照)和 AOF(追加文件)。
6. 数据操作 - 单进程,单线程架构
Redis 的数据操作是单进程、单线程的,但这并不意味着 Redis 不能处理高并发。Redis 使用了 I/O 多路复用技术(如 epoll/kqueue),能够同时处理多个客户端的请求,而不会为每个客户端创建一个新的线程或进程。这使得 Redis 能够高效地使用系统资源,并提供出色的性能。
7. 使用了 I/O 多路复用的模型:并发量高
Redis 的高并发性能主要归功于其使用的 I/O 多路复用模型。这种模型允许 Redis 在一个线程中同时监听多个套接字(socket),并在其中一个套接字准备好进行读/写操作时立即进行处理。这极大地提高了 Redis 的并发处理能力和响应速度。
【 5 】Redis 的优缺点
优点:
- 高性能
- Redis 将数据存储在内存中,因此读写速度非常快。
- 它使用单线程模型避免了多线程的复杂性,通过 I/O 多路复用技术实现高并发。
- 丰富的数据类型
- Redis 支持字符串、列表、哈希、集合、有序集合等多种数据类型,满足不同应用场景的需求。
- 持久化
- Redis 提供了 RDB(快照)和 AOF(追加文件)两种持久化方式,确保数据在服务器重启后不会丢失。
- 发布/订阅模式
- Redis 支持发布/订阅模式,可以用于实现消息队列或实时通知系统。
- 简单
- Redis 的数据结构简单,易于理解和使用。
- 它提供了丰富的命令集,可以通过简单的命令进行数据的操作。
- 可扩展性
- Redis 支持主从复制和集群模式,可以实现数据的水平扩展和读写分离。
- 事务支持
- Redis 支持简单的事务操作,确保数据的一致性。
- 内存管理
- Redis 提供了丰富的内存管理命令和策略,如 LRU(最近最少使用)淘汰策略,可以帮助用户更好地管理内存资源。
缺点:
- 内存限制
- 由于 Redis 将数据存储在内存中,因此其大小受限于可用内存的大小。当数据量过大时,可能需要考虑使用其他存储方案或进行数据的归档。
- 持久化开销
- 虽然 Redis 提供了持久化功能,但写入磁盘的操作可能会带来一定的性能开销。特别是在高并发场景下,频繁的磁盘 I/O 操作可能会影响 Redis 的性能。
- 主从复制延迟
- 在主从复制模式下,从节点需要定期从主节点同步数据。当网络延迟较大或数据量较大时,可能会导致从节点的数据延迟。
- 事务功能较弱
- Redis 的事务功能相对较弱,不支持回滚操作。如果事务中的某个命令执行失败,整个事务将被中断,但已执行的命令不会被撤销。
- 客户端依赖
- Redis 本身不提供认证和授权功能,需要依赖客户端来实现。如果客户端没有正确实现认证和授权机制,可能会导致安全风险。
- 不适合复杂查询
- 虽然 Redis 支持多种数据结构,但其查询功能相对较弱。对于复杂的查询需求,可能需要将数据导出到其他数据库(如 MySQL)中进行处理。
- 单线程模型
- 虽然 Redis 的单线程模型在大多数情况下都能提供出色的性能,但在某些场景下(如 CPU 密集型操作),可能会成为性能瓶颈。此外,单线程模型也意味着 Redis 无法充分利用多核 CPU 的优势。
【 6 】Redis 的应用场景
Redis是一个开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息代理。以下是Redis的一些主要应用场景:
-
缓存:
- Redis最常见的应用场景是作为缓存层,位于Web服务器和数据库之间。它可以缓存热门商品的静态信息、用户数据等,以减少对数据库的访问,从而加速Web应用的响应速度。
- 在业务开发中,经常会有一些全局配置,且配置更改的频率很低。这些配置也可以被加载到Redis内存中,加快查询速度。
-
会话存储:
- Redis还可以用于存储会话(Session)数据,实现无状态服务器之间的用户状态共享。当用户登录Web应用时,会话数据被存储在Redis中,并生成唯一的会话ID返回给客户端的Cookie。之后,当用户再次发送请求时,会将这个会话ID包含在请求中,服务器通过Redis中的会话数据来进一步处理请求。
-
排行榜/计数器:
- Redis的原子操作特性使其非常适合用于实现排行榜和计数器功能。例如,可以使用Redis的
INCR
命令来递增计数器的值,或者使用有序集合(Sorted Set)来实现排行榜。
- Redis的原子操作特性使其非常适合用于实现排行榜和计数器功能。例如,可以使用Redis的
-
分布式锁:
- Redis可以作为分布式锁的实现方式之一。通过使用Redis的SETNX(set if not exist)命令和过期时间设置,可以实现一个简单的分布式锁。这种锁可以用于保护分布式系统中的共享资源,防止多个进程或线程同时访问和修改。
-
消息队列:
- Redis的列表(List)数据类型可以实现一个简单的消息队列。生产者可以将消息推送到队列中,消费者可以从队列中拉取消息并进行处理。虽然Redis本身不是一个专业的消息队列系统,但在一些简单的场景下可以作为消息队列的替代品。
-
实时系统:
- Redis的低延迟和高并发特性使其非常适合用于实时系统。例如,可以使用Redis来实现实时数据分析、实时推荐等功能。
-
数据过期和淘汰:
- Redis支持数据的过期和淘汰策略,可以根据数据的访问频率、最近访问时间等因素来自动删除过期的数据。这种特性可以用于实现缓存淘汰、限流等功能。
-
地理位置信息:
- Redis的GeoHash功能可以存储地理位置信息,并支持基于地理位置的查询。这种特性可以用于实现附近的地点搜索、位置推荐等功能。
-
大数据处理:
- Redis虽然主要用于内存存储,但它也可以与大数据处理框架(如Spark、Flink等)结合使用,用于处理大规模数据集。例如,可以使用Redis作为数据源或中间结果存储系统,实现数据的高速读写和缓存。
-
单点登录:
- Redis可以存储单点登录的用户信息,如用户ID、用户名、密码等敏感信息。由于Redis的内存存储特性,这些信息的读取速度非常快,可以显著提高单点登录系统的性能。
以上只是Redis的一些常见应用场景,实际上Redis的应用场景非常广泛,可以根据具体需求进行灵活使用。
【 7 】具体的使用方法
语法
Redis 客户端的基本语法为:
$ redis-cli
实例
以下实例讲解了如何启动 redis 客户端:
启动 redis 服务器,打开终端并输入命令 redis-cli,该命令会连接本地的 redis 服务。
$ redis-cli
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> PING
PONG
在以上实例中我们连接到本地的 redis 服务并执行 PING 命令,该命令用于检测 redis 服务是否启动。
在远程服务上执行命令
如果需要在远程 redis 服务上执行命令,同样我们使用的也是 redis-cli 命令。
语法
$ redis-cli -h host -p port -a password
实例
以下实例演示了如何连接到主机为 127.0.0.1,端口为 6379 ,密码为 mypass 的 redis 服务上。
$redis-cli -h 127.0.0.1 -p 6379 -a "mypass"
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> PING
PONG