一.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

Redis总结2的更多相关文章

  1. 使用redis构建可靠分布式锁

    关于分布式锁的概念,具体实现方式,直接参阅下面两个帖子,这里就不多介绍了. 分布式锁的多种实现方式 分布式锁总结 对于分布式锁的几种实现方式的优劣,这里再列举下 1. 数据库实现方式 优点:易理解 缺 ...

  2. Ignite性能测试以及对redis的对比

    测试方法 为了对Ignite做一个基本了解,做了一个性能测试,测试方法也比较简单主要是针对client模式,因为这种方法和使用redis的方式特别像.测试方法很简单主要是下面几点: 不作参数优化,默认 ...

  3. mac osx 安装redis扩展

    1 php -v查看php版本 2 brew search php|grep redis 搜索对应的redis   ps:如果没有brew 就根据http://brew.sh安装 3 brew ins ...

  4. Redis/HBase/Tair比较

    KV系统对比表 对比维度 Redis Redis Cluster Medis Hbase Tair 访问模式    支持Value大小 理论上不超过1GB(建议不超过1MB) 理论上可配置(默认配置1 ...

  5. Redis数据库

    Redis是k-v型数据库的典范,设计思想及数据结构实现都值得学习. 1.数据类型 value支持五种数据类型:1.字符串(strings)2.字符串列表(lists)3.字符串集合(sets)4.有 ...

  6. redis 学习笔记(2)

    redis-cluster 简介 redis-cluster是一个分布式.容错的redis实现,redis-cluster通过将各个单独的redis实例通过特定的协议连接到一起实现了分布式.集群化的目 ...

  7. redis 学习笔记(1)

    redis持久化 snapshot数据快照(rdb) 这是一种定时将redis内存中的数据写入磁盘文件的一种方案,这样保留这一时刻redis中的数据镜像,用于意外回滚.redis的snapshot的格 ...

  8. python+uwsgi导致redis无法长链接引起性能下降问题记录

    今天在部署python代码到预生产环境时,web站老是出现redis链接未初始化,无法连接到服务的提示,比对了一下开发环境与测试环境代码,完全一致,然后就是查看各种日志,排查了半天也没有查明是什么原因 ...

  9. nginx+iis+redis+Task.MainForm构建分布式架构 之 (redis存储分布式共享的session及共享session运作流程)

    本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,上一篇分享文章制作是在windows上使用的nginx,一般正式发布的时候是在linux来配 ...

  10. windows+nginx+iis+redis+Task.MainForm构建分布式架构 之 (nginx+iis构建服务集群)

    本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,由标题就能看出此内容不是一篇分享文章能说完的,所以我打算分几篇分享文章来讲解,一步一步实现分 ...

随机推荐

  1. [Distributed ML] Yi WANG's talk

    王益,分布式机器学习的践行者,他的足迹值得后来者学习. 膜拜策略: LinkedIn高级分析师王益:大数据时代的理想主义和现实主义(图灵访谈)[心路历程] 分布式机器学习的故事-王益[历史由来] 分布 ...

  2. java 增强for循环对于空集和null的判断

    List<String> list = null; for (String str : list) {//会报空指针异常 System.out.println(str); } List&l ...

  3. JavaScript(6)—— 返回特征数字

    案例要求 根据业务情况,要把核心的东西变成一个模块便于复用,慢慢沉淀后,能够更快更高效地编程. 业务核心算法: /* 数字检测 @return 返回2,能被3和7整除 返回1,能够被3整除 返回0,不 ...

  4. 从Myeclipse到IntelliJ IDEA-——让你摆脱鼠标,全键盘操作

    注:本文是对原文章(https://blog.csdn.net/luoweifu/article/details/13985835)做的补充 快捷键对比 Myeclipse IDEA 说明 Ctrl+ ...

  5. idea标签页多行显示+设置标签页上限

    idea标签页多行显示+设置标签页上限 Setting--Editor--General--Editor Tabs

  6. C语言链表之两数相加

    题目描述 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...

  7. JDBC ----- SQL 插入记录

    package demo; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; ...

  8. Angular5 自定义scrollbar样式之 ngx-perfect-scollbar

    版本 angular 5.0 ngx-perfect-scrollbar ^5.3.5 为什么不用 ngx-perfect-scrollbar 最新的版本 v7 呢? 因为它报错啊!!! 每次init ...

  9. [bzoj2746][HEOI2012]旅行问题 _AC自动机_倍增

    [HEOI2012]旅行问题 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2746 题解: 这个是讲课时候的题. 讲课的时候都在想怎么后 ...

  10. Docker 运行 MYSQL 数据库的总结

    公司里面要求做一个小demo 学习java相关的东西 然后使用了mysql数据库 很早之前做过mysql的容器化运行. 现在想想已经忘记的差不多了  所以这里总结一下 docker化运行mysql数据 ...