定义
高性能键值对数据库,支持的键值数据类型:字符串(String),字符串列表(list),字符串集合(set),有序字符串集合(sorted set),哈希(Hash)。
数据结构和内部编码
数据结构图.pngRedis 源码中设置了一个redisObject数据结构,描述了此种关系。
内部编码图.png
特性
- 速度快 - 基于内存,C语言编写,单线程 - 纯内存,非阻塞IO(实时性好,但是占用大量CPU资源),避免线程切换和竞态消耗。
- 持久化 - Rdis所有数据保持在内存中,可对数据进行持久化在磁盘中。
- 多种数据结构,在新的版本中,还提供了位图(Bitmaps),超小内存唯一值计数(HyperLogLog),地理信息定位(GEO)数据结构。但是其数据结构内部还是基于上述五种基本的数据结构实现的,Bitmaps,HyperLogLog都是String数据类型。
- 支持多种客户端语言 - Java, PHP, Python等。
- 功能丰富 - 发布订阅, 事务, Lua脚本, pipeline。
- "简单" - 不依赖外部库,单线程模型。
- 主从复制
- 高可用 - Redis-Sentinel(V2.8),分布式 - Redis-Cluster(V3.0)
- 多数据库 - 一个redis实例包括了15个数据库,可以选择连接哪个数据据进行操作。选择数据据命令为select 1。 同时可以选择move somekey 1把当前数据库的key移动到数据库1。
- 事务 - multi:开始事务,后面的命令都会被认为是事务的一部分操作;exec:提交事务;discard:事务回滚。
- 注意: Redis是单线程,一次执行一条命令,所以拒绝长(慢命令) - keys,flushall,flushdb,slow,lua script,mutil/exec,operate big value(collection)。对于fysnc file descriptor,close file descriptor会开启另外一个独立线程进行操作。
应用场景
- 缓存系统
- 消息队列 - 秒杀,抢购等。什么是消息队列?
- 计数器 - 网站访问统计,微博转发评论,视频播放
- 排行榜
- 数据过期处理
- 分布式集群架构中的session分离
网友评论