• Redis概述


    1 概述

    Redis 是开源、高性能的key-value数据库。

    Redis很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。

    Redis适合的场景主要局限在较小数据量的高性能操作和运算上。

       

    2 优点

    • 异常快 - 每秒可执行大约110000次的设置(SET)操作,81000次的读取/获取(GET)操作
    • 支持丰富的数据类型 - Redis支持开发人员常用的大多数数据类型,例如列表,集合,排序集和散列等;
    • 支持事务,且操作具有原子性 - 所有Redis操作都是原子操作,这确保如果两个客户端并发访问,Redis服务器能接收更新的值;
    • 多实用工具 - Redis是一个多实用工具,可用于多种用例,如:缓存,消息队列(Redis本地支持发布/订阅),应用程序中的任何短期数据,例如,web应用程序中的会话,网页命中计数等;
    • 单进程单线程 - Redis采用队列技术将并发访问变成串行访问,消除了传统数据库并行控制的开销;
    • 支持读写分离、主从复制

       

    3 相对于memcached的优势

    • redis支持丰富的数据类型,memcached所有的值均是简单的字符串
    • redis单个value的最大限制是1GB, memcached只能保存1MB的数据
    • redis自己构建了虚拟内存机制,比系统的虚拟内存块
    • redis可以持久化其数据

       

    4 Redis支持的数据类型

    • Strings
    • Lists
    • Sets
    • Sorted Set
    • Hashes

       

    5 虚拟内存

    当value很大时,可以使用虚拟内存,节约内存。

    当key也很大时,可以将key-value变成一个value,存在虚拟内存中。

       

    6 数据分片

    数据分片模型把每个节点当成独立的master,对业务进行分片存储。包括范围分区和哈希分区。

    优点:容量大;处理能力强。

    缺点:不支持涉及多个key的操作或事务;数据处理复杂。

       

    7 管道技术

    Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。这意味着通常情况下一个请求会遵循以下步骤:

    客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。

    服务端处理命令,并将结果返回给客户端。

    使用Redis 管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应。

    优势是提高了 redis 服务的性能。

       

    8 回收策略

    • volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
    • volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
    • volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
    • allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
    • allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
    • no-enviction:禁止驱逐数据

       

    9 发布订阅

    Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。

    Redis 客户端可以订阅任意数量的频道。

    下图展示了频道 channel1,以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:

    当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:

       

    10 适用场景

    10.1 会话缓存(Session Cache)

    用Redis缓存会话相比其他存储的优势在于:Redis提供持久化。当维护一个不是严格要求一致性的缓存时,如果用户的购物车信息全部丢失,大部分人都会不高兴的

    10.2 全页缓存(FPC)

    除基本的会话token之外,Redis还提供很简便的FPC平台。回到一致性问题,即使重启了Redis实例,因为有磁盘的持久化,用户也不会看到页面加载速度的下降,这是一个极大改进,能帮助你以最快速度加载你曾浏览过的页面。

    10.3 队列

    Reids在内存存储引擎领域的一大优点是提供 list 和 set 操作,这使得Redis能作为一个很好的消息队列平台来使用。Redis作为队列使用的操作,就类似于本地程序语言(如Python)对 list 的 push/pop 操作。

    10.4 排行榜/计数器

    Redis在内存中对数字进行递增或递减的操作实现的非常好。集合(Set)和有序集合(Sorted Set)也使得我们在执行这些操作的时候变的非常简单,Redis只是正好提供了这两种数据结构。

    10.5 发布/订阅

    发布/订阅的使用场景确实非常多。我已看见人们在社交网络连接中使用,还可作为基于发布/订阅的脚本触发器,甚至用Redis的发布/订阅功能来建立聊天系统。

       

  • 相关阅读:
    使用浏览器的 Local Storage 真的安全吗?
    传统到敏捷的转型中,谁更适合做Scrum Master?
    HBM2E Flashbolt--提升人工智能的算力
    C语言 for 循环
    C语言自加自减运算符(++i / i++)
    C语言逗号表达式
    C语言逻辑运算符
    C语言三目运算符
    C语言条件判断 if / else
    C语言 printf 函数
  • 原文地址:https://www.cnblogs.com/xiongxx/p/6732670.html
Copyright © 2020-2023  润新知