Redis是什么?

定义

高性能键值对数据库,支持的键值数据类型:字符串(String),字符串列表(list),字符串集合(set),有序字符串集合(sorted set),哈希(Hash)。

数据结构和内部编码

Redis 源码中设置了一个redisObject数据结构,描述了此种关系。

特性

  1. 速度快 - 基于内存,C语言编写,单线程 - 纯内存,非阻塞IO(实时性好,但是占用大量CPU资源),避免线程切换和竞态消耗。
  2. 持久化 - Rdis所有数据保持在内存中,可对数据进行持久化在磁盘中。
  3. 多种数据结构,在新的版本中,还提供了位图(Bitmaps),超小内存唯一值计数(HyperLogLog),地理信息定位(GEO)数据结构。但是其数据结构内部还是基于上述五种基本的数据结构实现的,Bitmaps,HyperLogLog都是String数据类型。
  4. 支持多种客户端语言 - Java, PHP, Python等。
  5. 功能丰富 - 发布订阅, 事务, Lua脚本, pipeline。
  6. “简单” - 不依赖外部库,单线程模型。
  7. 主从复制
  8. 高可用 - Redis-Sentinel(V2.8),分布式 - Redis-Cluster(V3.0)
  9. 多数据库 - 一个redis实例包括了15个数据库,可以选择连接哪个数据据进行操作。选择数据据命令为select 1。 同时可以选择move somekey 1把当前数据库的key移动到数据库1。
  10. 事务 - multi:开始事务,后面的命令都会被认为是事务的一部分操作;exec:提交事务;discard:事务回滚。
  11. 注意: Redis是单线程,一次执行一条命令,所以拒绝长(慢命令) - keys,flushall,flushdb,slow,lua script,mutil/exec,operate big value(collection)。对于fysnc file descriptor,close file descriptor会开启另外一个独立线程进行操作。

应用场景

  • 缓存系统
  • 消息队列 - 秒杀,抢购等。什么是消息队列?
  • 计数器 - 网站访问统计,微博转发评论,视频播放
  • 排行榜
  • 数据过期处理
  • 分布式集群架构中的session分离

参考资料

[1] https://coding.imooc.com/class/151.html

Author: HB
Link: http://www.huangbin.fun/Redis是什么.html
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.