zoukankan      html  css  js  c++  java
  • Redis总结2

    一.Redis效率高的原因

      众所周知,Redis常用来做缓存,从而提高项目QPS(每秒查询率)。QPS = 并发量 / 平均响应时间

      然而其效率高的原因包含但不仅限于如下几点:

        1.Redis基于内存,绝大部分操作都是直接对内存的操作,执行效率高。官方提供的数据是可以达到100000+的QPS

        2.数据结构简单,因此对数据的操作也简单

        3.采用单线程处理请求,将多个请求串行处理,避免线程创建销毁的开销和线程上下文切换的开销

        4.采用I/O多路复用,且是非阻塞IO

    二.通过Redis实现分布式锁

      1.通过使用setnx key value方式:

        如果key不存在,则创建并赋值,如果key存在,则设置失败,因此可以保证数据的安全性。可以通过expire来设置该key的生存时间,当超过生存时间后该key和value会被删除。

        附:该方式设置成功返回1,失败返回0,时间复杂度为O(1),缺点是每次操作都需要setnx和expire两个步骤,原子性得不到满足,在setnx之后和expire之前的过程中甚至可能出现死锁等情况。

      2.通过set key value ex px nx/xx方式:

        ex和px是过期时间,单位是秒和毫秒。nx是当key不存在的时候进行设置操作,而xx是当key存在的时候进行设置操作。该方法保证了原子性,提高了安全性,但多个对象同时过期的时候可能会造成短暂的卡顿,可以给每个key加上一个随机值来解决该卡顿问题。

    三.通过Redis实现异步队列

      1.生产者消费者模式

        使用List作为队列,通过rpush将消息加入队列,通过lpop将消息从队列中取出(先进先出),从而实现异步队列。通常将rpush看做生产者,将lpop看做消费者,当消费者获得数据后,数据将消失。

        该方式的缺点是:可能队列中没有消息,却lpop数据,并且生产者和消费者的关系是一对一的,一个生产者生产的数据只能被一个消费者消费。

      2.发布订阅模式

        发布者:publish key value

        订阅者:subscribe key

        该方式的缺点是:消息发布是无状态的,无法保证数据可达,对于发布者来说,消息发布就等同于消息丢失,无法确认订阅者是否收到消息。例如:在发布者发布消息的时候,订阅者下线了,重新上线的订阅者无法接受到发布者刚才发布的消息。

    四.Redis持久化方式

      Redis默认开启了RDB存储方式进行持久化,以一个dump.rdb文件存。

        1.RDB持久化:

          它开启持久化条件是在一定时间内,key和value达到一定的存储次数,可以在redis.conf中的save中设置,如下图

          

          附:如果在配置文件中将stop-writes-on-bgsave-error设置为yes,那么当备份进程出错时,就会停止接收写入操作,以此保证持久化数据一致

        2.AOF持久化

          开启:在Redis.conf文件中,将appendonly设置为yes

        3.RDB-AOF混合模式

          使用BGSAVE做镜像全量持久化,AOF做增量持久化

    关于Redis的其他介绍可以参考我的上一篇文章https://www.cnblogs.com/ywb-articles/p/10660071.html

    如果想深入了解Redis,可以参考官方文档http://redisdoc.com/index.html

  • 相关阅读:
    centos7上修改lv逻辑卷的大小
    centos6上调整lv逻辑卷
    nginx的日志配置
    修改Linux系统默认编辑器
    mysqldump命令的安装
    centos7上设置中文字符集
    nginx的80端口跳转到443
    ubuntu上安装docker和docker-compose
    javascript递归、循环、迭代、遍历和枚举概念
    Lattice 开发工具Diamond 相关版本下载地址
  • 原文地址:https://www.cnblogs.com/ywb-articles/p/11210934.html
Copyright © 2011-2022 走看看