自学内容网 自学内容网

redis

【 0 】REDIS下载地址

https://suyin-tools.cn/Tools/PC/办公软件/Redis Desktop Manager)

【 1 】什么是redis

​ Redis(Remote Dictionary Server)是一个开源的内存数据库,遵守 BSD 协议,它提供了一个高性能的键值(key-value)存储系统,常用于缓存、消息队列、会话存储等应用场景。

【 2 】数据库

​ 数据库(Database)是长期存储在计算机内的、有组织的、可共享的大量数据的集合。这些数据按照特定的数据模型组织、描述和存储,并且具有较小的冗余度、较高的数据独立性和易扩展性。数据库系统可以方便地进行数据的插入、查询、更新和删除等操作。

image-20240515191721507

【 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 数据库可以分为以下几种类型:

  • 键值对存储(Key-Value Stores)

    • Redis

    • Memcached

​ 键值对存储数据库使用简单的键值对来存储数据,其中键是唯一的,每个键对应一个值。这些数据库通常提供快速读取操作。

  • 列存储(Column Stores)

    • Cassandra

    • HBase

​ 列存储数据库将数据按列存储而不是按行存储。这种设计使得查询某些列的数据时更加高效,因为只需要读取这些列的数据,而不是整行的数据。

  • 文档存储(Document Stores)

    • MongoDB

    • CouchDB

​ 文档存储数据库以文档(如 JSON 对象)的形式存储数据。每个文档都是一个独立的数据项,包含一组键值对。文档可以包含嵌套文档和数组,使得数据模型更加灵活。

  • 图存储(Graph Stores)

    • Neo4j

    • OrientDB

​ 图存储数据库使用图结构来存储数据,图中的节点表示实体,边表示实体之间的关系。这种数据模型非常适合表示社交网络、推荐系统等复杂关系型数据。

  • 时间序列存储(Time Series Databases)

    • InfluxDB

    • Prometheus

​ 时间序列存储数据库用于存储随时间变化的数据,如监控数据、日志数据等。这些数据库通常提供高效的数据插入和查询操作,并支持复杂的时间序列数据分析功能。

  • 搜索引擎

    • Elasticsearch

    • Solr

​ 搜索引擎虽然不严格属于 NoSQL 数据库的范畴,但它们通常与 NoSQL 数据库一起使用,以提供高效的全文搜索功能。这些系统支持复杂的查询语法和搜索算法,使得在大量文本数据中查找信息变得简单而高效。

【 4 】Redis

  • 必须要注意的就是这个一定要选上。这个必须要。这个就是可以自动添加到环境变量上。

image-20240515193210613

# 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 的优缺点

image-20240515191524606

优点:

  1. 高性能
    • Redis 将数据存储在内存中,因此读写速度非常快。
    • 它使用单线程模型避免了多线程的复杂性,通过 I/O 多路复用技术实现高并发。
  2. 丰富的数据类型
    • Redis 支持字符串、列表、哈希、集合、有序集合等多种数据类型,满足不同应用场景的需求。
  3. 持久化
    • Redis 提供了 RDB(快照)和 AOF(追加文件)两种持久化方式,确保数据在服务器重启后不会丢失。
  4. 发布/订阅模式
    • Redis 支持发布/订阅模式,可以用于实现消息队列或实时通知系统。
  5. 简单
    • Redis 的数据结构简单,易于理解和使用。
    • 它提供了丰富的命令集,可以通过简单的命令进行数据的操作。
  6. 可扩展性
    • Redis 支持主从复制和集群模式,可以实现数据的水平扩展和读写分离。
  7. 事务支持
    • Redis 支持简单的事务操作,确保数据的一致性。
  8. 内存管理
    • Redis 提供了丰富的内存管理命令和策略,如 LRU(最近最少使用)淘汰策略,可以帮助用户更好地管理内存资源。

缺点:

  1. 内存限制
    • 由于 Redis 将数据存储在内存中,因此其大小受限于可用内存的大小。当数据量过大时,可能需要考虑使用其他存储方案或进行数据的归档。
  2. 持久化开销
    • 虽然 Redis 提供了持久化功能,但写入磁盘的操作可能会带来一定的性能开销。特别是在高并发场景下,频繁的磁盘 I/O 操作可能会影响 Redis 的性能。
  3. 主从复制延迟
    • 在主从复制模式下,从节点需要定期从主节点同步数据。当网络延迟较大或数据量较大时,可能会导致从节点的数据延迟。
  4. 事务功能较弱
    • Redis 的事务功能相对较弱,不支持回滚操作。如果事务中的某个命令执行失败,整个事务将被中断,但已执行的命令不会被撤销。
  5. 客户端依赖
    • Redis 本身不提供认证和授权功能,需要依赖客户端来实现。如果客户端没有正确实现认证和授权机制,可能会导致安全风险。
  6. 不适合复杂查询
    • 虽然 Redis 支持多种数据结构,但其查询功能相对较弱。对于复杂的查询需求,可能需要将数据导出到其他数据库(如 MySQL)中进行处理。
  7. 单线程模型
    • 虽然 Redis 的单线程模型在大多数情况下都能提供出色的性能,但在某些场景下(如 CPU 密集型操作),可能会成为性能瓶颈。此外,单线程模型也意味着 Redis 无法充分利用多核 CPU 的优势。

【 6 】Redis 的应用场景

image-20240515191605468

​ Redis是一个开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息代理。以下是Redis的一些主要应用场景:

  1. 缓存

    • Redis最常见的应用场景是作为缓存层,位于Web服务器和数据库之间。它可以缓存热门商品的静态信息、用户数据等,以减少对数据库的访问,从而加速Web应用的响应速度。
    • 在业务开发中,经常会有一些全局配置,且配置更改的频率很低。这些配置也可以被加载到Redis内存中,加快查询速度。
  2. 会话存储

    • Redis还可以用于存储会话(Session)数据,实现无状态服务器之间的用户状态共享。当用户登录Web应用时,会话数据被存储在Redis中,并生成唯一的会话ID返回给客户端的Cookie。之后,当用户再次发送请求时,会将这个会话ID包含在请求中,服务器通过Redis中的会话数据来进一步处理请求。
  3. 排行榜/计数器

    • Redis的原子操作特性使其非常适合用于实现排行榜和计数器功能。例如,可以使用Redis的INCR命令来递增计数器的值,或者使用有序集合(Sorted Set)来实现排行榜。
  4. 分布式锁

    • Redis可以作为分布式锁的实现方式之一。通过使用Redis的SETNX(set if not exist)命令和过期时间设置,可以实现一个简单的分布式锁。这种锁可以用于保护分布式系统中的共享资源,防止多个进程或线程同时访问和修改。
  5. 消息队列

    • Redis的列表(List)数据类型可以实现一个简单的消息队列。生产者可以将消息推送到队列中,消费者可以从队列中拉取消息并进行处理。虽然Redis本身不是一个专业的消息队列系统,但在一些简单的场景下可以作为消息队列的替代品。
  6. 实时系统

    • Redis的低延迟和高并发特性使其非常适合用于实时系统。例如,可以使用Redis来实现实时数据分析、实时推荐等功能。
  7. 数据过期和淘汰

    • Redis支持数据的过期和淘汰策略,可以根据数据的访问频率、最近访问时间等因素来自动删除过期的数据。这种特性可以用于实现缓存淘汰、限流等功能。
  8. 地理位置信息

    • Redis的GeoHash功能可以存储地理位置信息,并支持基于地理位置的查询。这种特性可以用于实现附近的地点搜索、位置推荐等功能。
  9. 大数据处理

    • Redis虽然主要用于内存存储,但它也可以与大数据处理框架(如Spark、Flink等)结合使用,用于处理大规模数据集。例如,可以使用Redis作为数据源或中间结果存储系统,实现数据的高速读写和缓存。
  10. 单点登录

    • 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

image-20240515193943289


原文地址:https://blog.csdn.net/m0_58310590/article/details/140515579

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!