特性
-
数据存储模型:以键值对(Key-Value) 存储,属于非关系型数据库;区别于 MySQL 这类表与表存在关联的关系型数据库。
-
存储介质:主打内存级数据库,以内存为主要存储媒介,磁盘仅用作辅助持久化。
-
性能特点:相比 MySQL 等磁盘数据库,读写速度极快。
-
数据持久化:虽基于内存运行,但支持数据落盘持久化,防止断电数据丢失。
-
集群部署:原生支持集群模式,可分布式部署在多台服务器。
-
高可用机制:支持主从架构,主节点故障时,从节点可自动顶替,保障服务高可用。
-
操作方式:支持原生命令行操作,同时兼容 Lua 脚本,可实现批量命令、原子化复杂操作。
-
可扩展能力:支持使用 C、C++、Rust 等语言开发Redis 扩展,自定义新数据结构;本质是编译为动态链接库加载运行
redis的用处
- 数据库:内存级数据库(内存是主要的存储硬件,磁盘用于持久化)
- 缓存:比如存储冷热分离架构的热点数据,或者会话存储(负载均衡下把所有会话信息保存在Redis服务器中,防止用户需要在不同服务器上登录多次的逻辑缺陷)
- 中间件:做消息队列服务器进行削峰填谷解耦合
redis为什么快
- 它是访问内存为主,磁盘为辅
- 它逻辑简单,不像Mysql一样要有很多逻辑处理比如关联关系的处理,或者事务的完全支持
- Redis使用epoll模型而不是多线程,网络IO效率高,因此消耗资源少的同时反应速度也较快(因为不用进行调度而是直接在用户层遍历读取)
- Redis使用单线程模型执行命令,避免了不必要的锁竞争和线程调度开销(多线程提高效率是因为自己执行的是CPU密集任务,调度和加锁的消耗比不上充分利用了CPU多核资源的收益。而Redis只操作数据结构,加锁以及调度的开销甚至超过了并行操作本身节省下来的时间,收益比不上消耗)
使用redis的方式
redis是客户端-服务端架构,使用redis的方式如下:
- 命令行
- 图形化界面
- API(程序中使用,类似于mysql api)
hashmap和redis的区别
既然redis是一个键值对的存储方式,那么其实使用hashmap是更快,更简单的(因为redis得通过网络访问,还要维护很多数据结构),但是redis有如下特性:
- 持久化存储
- 可以扩展成分布式
- 支持网络访问
其实redis就是在键值对存储的基础之上扩展了功能,要是你业务里用到这些功能,那就直接使用redis,省得自己手搓,反之要是你不用这些功能当然也就没必要使用redis了。