redis的学习
一、redis作用
Redis是一个开源的(BSD许可),内存中的数据结构存储系统,可以用作数据库、缓存和消息代理。它支持多种类型的数据结构,如字符串(Strings)、散列(Hashes)、列表(Lists)、集合(Sets)、有序集合(Sorted Sets)等。Redis将这些结构存储在内存中,但也可以将数据持久化到磁盘上,以便在重启后恢复数据。
Redis的主要特点和用途包括:
高性能:由于数据存储在内存中,Redis能够提供非常高的数据读写速度。
丰富的数据结构:Redis支持多种数据结构,使其能够适用于多种场景,如计数器、队列、排行榜等。
原子操作:Redis支持各种操作的原子性,保证了在高并发环境下数据的一致性和完整性。
持久化:虽然Redis主要是一个内存数据库,但它提供了两种持久化机制——快照(RDB)和只追加文件(AOF),以便在重启后恢复数据。
高可用性:Redis支持主从复制和Redis Sentinel,用于实现高可用性。此外,Redis Cluster提供了分布式数据库功能。
用作缓存:由于其高速度特性,Redis常被用作缓存系统,以减少数据库负载和提高应用性能。
用作消息队列:Redis的列表数据结构可以用来实现简单的消息队列,支持发布/订阅模式。
广泛的应用场景:Redis广泛应用于社交网络、实时分析、排队系统、广告定向、实时统计等多个领域。
总之,Redis因其出色的性能、灵活的数据结构和广泛的应用场景而成为当今最流行的NoSQL数据库之一。
二、了解nosql(非关系型数据库)
NoSQL(Not Only SQL)数据库与传统的关系型数据库(如MySQL、Oracle等)相比,具有一些显著的优势,这些优势使得NoSQL数据库在特定场景下更加适用。以下是NoSQL数据库的一些主要优势:
高性能:NoSQL数据库通常提供比传统关系型数据库更快的读写速度,特别是在处理大量数据和高并发请求时。这是因为NoSQL数据库通常使用更简单的数据模型,并且可以分布式部署,从而提高性能。
高可扩展性:NoSQL数据库设计之初就考虑到了水平扩展性。它们可以轻松地在多台服务器之间分布数据,以应对数据量的增长,而无需停机或影响性能。
灵活的数据模型:NoSQL数据库采用非关系型的数据模型,如键值对、文档、列族或图形等,这种灵活性使得NoSQL数据库能够更容易地适应快速变化的数据需求。
高可用性:许多NoSQL数据库系统内置了复制和分片机制,确保了数据的高可用性。即使在部分节点故障的情况下,也能保证数据的持续可用。
低成本:由于NoSQL数据库通常部署在廉价的硬件上,并且可以水平扩展,因此相比于需要昂贵硬件和专业维护的关系型数据库,NoSQL数据库具有更低的成本。
适合大数据处理:NoSQL数据库在处理大规模数据集方面表现出色,尤其是在涉及到复杂数据处理和分析时。
简化开发和维护:NoSQL数据库的简单数据模型和灵活的架构使得开发和维护变得更加容易,尤其是在快速迭代和开发新特性时。
支持多样化的数据类型:NoSQL数据库能够存储和处理结构化、半结构化和非结构化的数据,这使得它们非常适合处理现代应用中常见的多样化数据类型。
非关系数据库,通常被称为NoSQL数据库,涵盖了多种不同的数据存储解决方案。以下是一些常见的非关系数据库类型及其例子:
键值存储(Key-Value Stores)
- Redis:支持多种类型的数据结构,如字符串、列表、集合、哈希表等。
- Voldemort:Facebook开发的一个键值存储系统。
- Riak:一个分布式键值数据库,强调高可用性和容错性。
文档存储(Document Stores)
- MongoDB:一个流行的NoSQL数据库,使用BSON(Binary JSON)作为数据的存储格式。
- CouchDB:一个轻量级的文档数据库,使用JSON格式存储数据。
- Couchbase:结合了CouchDB和Memcached的功能,支持文档存储和快速缓存。
列存储(Column Stores)
- HBase:一个构建在分布式文件系统(如Hadoop HDFS)之上的NoSQL数据库,适用于大规模数据集。
- Cassandra:一个分布式NoSQL数据库,适用于高可用性和无单点故障。
图形数据库(Graph Databases)
- Neo4j:一个高性能的图形数据库,允许通过节点和关系来存储和查询数据。
- ArangoDB:一个多模式数据库,支持图形、文档和键值存储。
宽列存储(Wide-Column Stores)
- Apache HBase:如上所述,是一个宽列存储系统。
- Cassandra:同样,Cassandra也支持宽列存储。
键值对缓存(Key-Value Cache)
- Memcached:一个高性能分布式内存对象缓存系统。
- Tropical Futures(以前叫做BoltDB):一个持久化键值数据库,设计用于提供快速的键值访问。
时间序列数据库(Time-Series Databases)
InfluxDB:一个开源的时间序列数据库,用于存储、查询和分析时间序列数据。
TimescaleDB:一个基于PostgreSQL的数据库,扩展了时间序列数据库的功能。
检索 关系型和非关系型数据库优缺点、特点、区别、适用场景 … - https://blog.csdn.net/weixin_54247764/article/details/115178747 ..
检索 关系型与非关系型数据库:概念、特点与对比-百度开发者中心 - https://developer.baidu.com/article/details/3031246 …
检索 关系型数据库和非关系型数据库的优缺点和对比 - CSDN博客 - https://blog.csdn.net/cr_lzy/article/details/94961460 …
检索 关系型数据库与非关系型数据库:定义、优缺点和比较 - Baidu - https://developer.baidu.com/article/detail.html?id=3139692 …
检索 关系型数据库 VS 非关系型数据库——SQL DB 和 NoSQL DB … - https://www.freecodecamp.org/chinese/news/relational-vs-nonrelational-databases-difference-between-sql-db-and-nosql-db/ …
检索 关系型数据库与非关系型数据库:概念、特点与比较 - 百度 … - https://cloud.baidu.com/article/3031152 …
检索 关系型数据库与非关系型数据库:详细对比与说明-百度开发 … - https://developer.baidu.com/article/details/3195140 …
检索 【独家】一文读懂非关系型数据库(NoSQL) - 腾讯云 - https://cloud.tencent.com/developer/article/1030365 ..
三、关系数据库和非关系数据库
关系数据库(Relational Databases, RDBMS)和非关系数据库(NoSQL)是两种不同的数据库管理系统,它们在多个方面有着显著的差异。以下是它们之间的一些主要比较:
数据模型
- 关系数据库:基于关系模型,数据以表格的形式存储,表之间通过关系(如外键)相互关联。
- 非关系数据库:不使用单一固定的表格模型,而是支持多种数据模型,如键值对、文档、列族、图形等。
扩展性
- 关系数据库:通常通过垂直扩展(增加单个服务器的资源)来提高性能,但扩展性有限。
- 非关系数据库:设计用于水平扩展,通过增加更多的服务器节点来提高性能和存储容量。
灵活性
- 关系数据库:结构固定,对数据的变更通常需要修改表结构,这可能涉及复杂的迁移过程。
- 非关系数据库:提供更高的灵活性,可以更轻松地存储和处理非结构化或半结构化数据。
一致性和完整性
- 关系数据库:提供ACID(原子性、一致性、隔离性、持久性)事务,确保数据的一致性和完整性。
- 非关系数据库:通常提供最终一致性模型,可能在某些情况下牺牲一致性以换取更高的性能和可用性。
查询语言
- 关系数据库:使用SQL(结构化查询语言)进行数据查询和操作,这是一种标准化和广泛支持的查询语言。
- 非关系数据库:使用各种查询语言,如MongoDB的查询语言、Redis的命令集等,这些语言通常与特定的数据库系统紧密相关。
应用场景
- 关系数据库:适合需要高度一致性和复杂查询的应用,如金融交易、客户关系管理(CRM)系统等。
- 非关系数据库:适合需要高扩展性、处理大量非结构化数据或快速迭代开发的应用,如社交网络、大数据分析、实时消息系统等。
成本
- 关系数据库:可能需要更昂贵的硬件和专业维护人员,尤其是在需要高可用性和灾难恢复的情况下。
- 非关系数据库:通常可以在更便宜的硬件上运行,并且维护成本相对较低。
总结
选择关系数据库还是非关系数据库,取决于具体的应用需求、数据模型、性能要求、成本预算和开发团队的熟悉程度。在某些情况下,甚至可以在同一个应用中同时使用关系数据库和非关系数据库,以利用各自的优势。
四、写法区别
关系数据库(RDBMS)和非关系数据库(NoSQL)在写法上的主要区别体现在数据模型、查询语言、数据操作方式等方面。以下是它们在写法上的一些具体区别:
数据模型和存储方式
关系数据库:
- 数据以表格的形式存储,每个表有固定的列和行。
- 表之间通过主键和外键建立关系,实现数据的引用和整合。
1
2
3
4
5
6
7CREATE TABLE Users (
UserID INT PRIMARY KEY,
Username VARCHAR(255),
Email VARCHAR(255)
);
INSERT INTO Users (UserID, Username, Email) VALUES (1, 'JohnDoe', 'john@example.com');非关系数据库:
- 数据存储方式多样,如键值对、文档、列族、图形等。
- 通常不需要预定义的模式,可以灵活地存储各种结构的数据。
1
2
3
4
5
6// 以MongoDB为例,存储文档数据
db.users.insertOne({
_id: ObjectId("507f191e810c19729de860ea"),
username: "JohnDoe",
email: "john@example.com"
});
查询语言
关系数据库:
- 使用SQL(结构化查询语言)进行数据查询和操作,SQL是一种声明式语言,通过描述要执行的操作来查询和操作数据。
1
SELECT * FROM Users WHERE Username = 'JohnDoe';
非关系数据库:
- 使用各自特定的查询语言或API,这些查询语言通常是过程式的,需要明确地描述操作步骤。
1
2// 以MongoDB为例,查询文档数据
db.users.find({ username: "JohnDoe" });
数据操作
关系数据库:
- 数据操作通常涉及事务处理,确保数据的一致性和完整性。
- 支持复杂的连接(JOIN)操作,可以轻松地跨表查询和整合数据。
1
2
3BEGIN TRANSACTION;
UPDATE Users SET Email = 'newemail@example.com' WHERE Username = 'JohnDoe';
COMMIT;非关系数据库:
- 数据操作通常更简单,但可能不支持复杂的事务处理。
- 跨数据模型的查询可能需要更多的编程逻辑。
1
2// 以MongoDB为例,更新文档数据
db.users.updateOne({ username: "JohnDoe" }, { $set: { email: "newemail@example.com" } });
总结
- 关系数据库的写法更注重结构化和关系性,使用SQL进行数据定义、查询和操作,适合需要复杂查询和事务处理的场景。
- 非关系数据库的写法更灵活,支持多种数据模型和查询方式,适合需要高扩展性和处理非结构化数据的场景。
五、redis的键值数据类型
字符串(String)
- 设置键值对:
SET key value - 获取键的值:
GET key - 递增数值:
INCR key - 递减数值:
DECR key
示例:
1 | # 设置键值对 |
哈希(Hash)
- 设置哈希字段值:
HSET key field value - 获取哈希字段值:
HGET key field - 获取所有哈希字段和值:
HGETALL key
示例:
1 | # 设置哈希字段值 |
列表(List)
- 向列表左侧添加元素:
LPUSH key value [value ...] - 向列表右侧添加元素:
RPUSH key value [value ...] - 获取列表元素:
LRANGE key start stop
示例:
1 | # 向列表左侧添加元素 |
集合(Set)
- 添加元素到集合:
SADD key member [member ...] - 获取集合中的所有元素:
SMEMBERS key - 判断元素是否在集合中:
SISMEMBER key member
示例:
1 | # 添加元素到集合 |
有序集合(Sorted Set)
- 添加元素到有序集合:
ZADD key score member [score member ...] - 获取有序集合中指定范围的元素:
ZRANGE key start stop [WITHSCORES] - 根据分数范围获取元素:
ZRANGEBYSCORE key min max [WITHSCORES]
示例:
1 | # 添加元素到有序集合 |
以上是 Redis 中几种常见数据类型的一些基本写法示例。在实际使用中,你可以通过 Redis 客户端(如 redis-cli)或编程语言的 Redis 库来执行这些命令。