NoSQL
概述
NoSQL("Not Only SQL")是一类非关系型数据库的统称,主要用于存储,管理和查询非结构化或半结构化数据.与传统的关系型数据库(如MySQL, PostgreSQL)不同,NoSQL不使用表格结构,也不依赖SQL语言
特点
- 灵活的数据模型:支持键值,文档,列族,图等多种形式
- 高可扩展性:适合处理大规模数据,容易进行水平扩展
- 高性能:在某些读写密集型场景下比传统数据库更快
- 适应性强:适合结构变化频繁或不固定的场景
常见的NoSQL类型与示例
| 类型 | 示例数据库 | 数据结构说明 | | -------- | --------------- | ---------------------------- | | 键值存储 | Redis,Riak | 通过key访问value(非常快速) | | 文档存储 | MongoDB,CouchDB | 类似JSON的文档格式存储数据 | | 列族存储 | Cassandra,HBase | 每行可有不同列(适合大数据) | | 图数据库 | Neo4j,ArangoDB | 用于存储节点和关系(社交网络) |
Redis
概述
Redis(Remote Dictionary Server) 是一个基于内存的 键值(Key-Value)数据库,支持多种数据结构,如字符串、列表、哈希、集合、有序集合等。
- 高性能:所有数据都存储在内存中,读写非常快。
- 多数据结构支持:不仅能存储字符串,还能存储 list、hash、set 等复杂类型。
- 支持持久化:可以将内存中的数据保存到磁盘。
- 可用作缓存、消息队列、排行榜、会话存储等。
单线程解读
含义
Redis的核心网络IO和命令处理是由一个线程完成的,也就是说:
- 所有的客户端的命令是串行执行的
- 同一时间Redis只能处理一个命令
- 不需要加锁就能保证数据一致性(这也是Redis高性能的原因之一)
因此说Redis是单线程的
单线程还快的原因
-
所有数据都在内存中,访问速度极快;
-
基于高效的事件机制(如 epoll)处理 IO;
-
使用了高效的数据结构;
-
没有线程上下文切换的开销;
-
命令处理速度非常快(通常是微秒级)。
Redis不是完全“单线程”
从 Redis 6.0 起,引入了 多线程 IO 支持(多线程网络读写),通过开启 io-threads
配置项来实现:
- 处理客户端连接的 读写 IO(如读取命令、返回结果)可以多线程处理;
- 但 命令执行本身 仍然是主线程串行完成的。
这主要提升了在大量客户端连接时的性能,特别是网络带宽压力较大时。
过期数据的删除策略
Redis常用的过期数据的删除策略就两个:
- 惰性删除:只会在取出key的时候对数据进行过期检查.这样对CPU最友好,但是可能会造成太多过期的key没有被删除
- 定期删除:每隔一段时间抽取一批key执行删除过期key操作.并且,Redis底层会通过限制删除操作执行的时长和频率来减少
定期删除对内存更加友好,惰性删除对CPU更加友好.所以,Redis采用的是定期删除+惰性删除
评论区
请登录后发表评论