基于键值对的数据结构服务器
Redis 中的值不仅可以是字符串,还可以是具体的数据结构,这样不仅能应用于多种场景开发,也可以提高开发效率。
它主要提供五种数据结构:字符串、哈希、列表、集合、有序集合,同时在字符串的基础上演变出了 Bitmaps 和 HyperLogLog 两种数据结构,Redis 3.2 还加入了有关 GEO 地理信息定位的功能。
丰富的功能
① 提供了键过期功能,可以实现缓存。
② 提供了发布订阅功能,可以实现消息系统。
③ 支持 Lua 脚本,可以创造新的 Redis 命令。
④ 提供了简单的事务功能,能在一定程度上保证事务特性。
⑤ 提供了流水线功能,客户端能将一批命令一次性传到 Redis,减少网络开销。
简单稳定
Redis 的简单主要体现在三个方面:
① 源码很少,早期只有 2 万行左右,在 3.0 版本由于添加了集群特性,增加到了 5 万行左右,相对于很多 NoSQL 数据库来说代码量要少很多。
② 采用单线程模型,使得服务端处理模型更简单,也使客户端开发更简单。
③ 不依赖底层操作系统的类库,自己实现了事件处理的相关功能。虽然 Redis 比较简单,但也很稳定。
客户端语言多
Redis 提供了简单的 TCP 通信协议,很多编程语言可以方便地接入 Redis,例如 Java、PHP、Python、C、C++ 等。
持久化
通常来说数据放在内存中是不安全的,一旦发生断电或故障数据就可能丢失,因此 Redis 提供了两种持久化方式 RDB 和 AOF 将内存的数据保存到硬盘中。
高性能
Redis 使用了单线程架构和 IO 多路复用模型来实现高性能的内存数据库服务。
每次客户端调用都经历了发送命令、执行命令、返回结果三个过程,因为 Redis 是单线程处理命令的,所以一条命令从客户端到达服务器不会立即执行,所有命令都会进入一个队列中,然后逐个被执行。
客户端的执行顺序可能不确定,但是可以确定不会有两条命令被同时执行,不存在并发问题。
通常来说单线程处理能力要比多线程差,
Redis 快的原因:
① 纯内存访问,Redis 将所有数据放在内存中。
② 非阻塞 IO,Redis 使用 epoll 作为 IO 多路复用技术的实现,再加上 Redis 本身的事件处理模型将 epoll 中的连接、读写、关闭都转换为时间,不在网络 IO 上浪费过多的时间。
③ 单线程避免了线程切换和竞争产生的消耗。单线程的一个问题是对于每个命令的执行时间是有要求的,如果某个命令执行时间过长会造成其他命令的阻塞,对于 Redis 这种高性能服务来说是致命的,因此 Redis 是面向快速执行场景的数据库。
有没有蜕变测试或者ai测试的教程