美文网首页
Redis是什么?

Redis是什么?

作者: hbhey | 来源:发表于2020-04-16 15:55 被阅读0次

    定义

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

    数据结构和内部编码

    数据结构图.png

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


    内部编码图.png

    特性

    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

    相关文章

      网友评论

          本文标题:Redis是什么?

          本文链接:https://www.haomeiwen.com/subject/ndtdvhtx.html