除了存取数据,redis还可以支持mq等操作,这里面有些小细节,需要注意一下:
----------------------------------------
1、事务处理
  大家都说redis支持事务,但实际上redis的事务跟关系数据库的事务不一样。不支持rollback操作。
redis的事务会先有一个将命令放入队列的过程,如果成功放入队列,返回值为queue,否则为失败。如果某个命令放入队列时报错,那么客户端会终止事务,并且丢掉这个事务;但在2.6.5版本之前,即使发生了错误,也没有丢弃事务,如果执行exec,则仍然会执行所有已放入队列的命令。
综上:只要成功放入队列的命令,redis就会坚定不移的执行;执行过程中如果发生错误,也不会回滚,只是会把所有命令执行结果返回客户端,需要客户端自行处理。
所以,redis的事务实际不是我们理解的关系数据库的事务,redis的事务实际上就是提供了一次性执行某些命令的方式,该执行过程中不会被其它客户端打扰。redis的事务连原子性(数据库事务的原子性,不回滚,所以不满足)都不满足!!!

2、慢查询
  redis是为高并发设计的,最高并发在8-11w/s。因为redis是单线程的,所以如果有操作速度比较慢,那后果将是极其严重的,因为这会阻塞其它客户端对redis的访问。
  redis除了string,其它类型并没有对value的大小做出限制,理论上可以存放redis最大内存大小的数据。假设我们要存一个100M的文件到redis,可想而知,肯定快不了;
  redis关于慢查询的配置有两个:
  slowlog-log-slower-than 10000 -- 慢查询时间设置,大于此时间的操作会被记录到慢查询日志中,单位是微秒,1ms = 1000 millionsecond
  slowlog-max-len 128 --慢查询日志长度
  慢查询日志是存放于内存中的一个list,默认长度128,因为在内存中,操作速度极快,因此是否开启慢查询日志对redis性能的影响微乎其微。
  对于线上slow-max-len配置的建议:线上可加大slow-max-len的值,记录慢查询存长命令时redis会做截断,不会占用大量内存,线上可设置1000以上;
  对于线上slowlog-log-slower-than配置的建议:默认为10毫秒,根据redis并发量来调整,对于高并发比建议为1毫秒
  注意:慢查询只记录命令在redis的执行时间,不包括排队、网络传输时间。慢查询是先进先出的队列,访问日志记录出列丢失,需定期执行slow get,将结果存储到其它设备中(如mysql);
  如果发生了无法忍受的慢查询,一般处理办法有:
  1、对数据切分,将大数据切分为多个小数据进行操作;
  2、另起缓存,专门用于慢查询业务操作,避免拖慢系统公用redis速度。
  另:这里插一句,上面我们说假设要存100M的对象到redis,那么如果真的这么做,应该用redis的哪种数据类型呢?显然是string,因为其它的都不合适嘛。一般这种操作都是压缩后转为字节流处理,而且由于存取较慢,一般不跟主redis库放一起,以免影响业务高峰期的正常业务处理。除了放大文件要比较警惕,redis自己的内存一般也不建议太大,原因参考:http://blog.csdn.net/rofth/article/details/51480376
  其它待补充。

3、发布订阅
  redis的发布订阅就是用的 发布-订阅模式(观察者模式)实现的,存放了一个map跟一个list,map放所有的主题,list放客户端列表,如果一个主题有了消息,会根据map的value找到list中的客户端列表,然后逐个给客户端发消息。

4、持久化到硬盘
  redis的持久化方案有RDB跟AOF两种,RDB就是快照模式,AOF指日志模式,默认采用RDB模式。
  RDB模式因为快照生成的备份文件后缀为.rdb而命名,aof是因为把所有操作保存于一个后缀为.aof的文件二命名;
  RDB的原理是根据conf设置的条件,如果满足,则将另起线程,将当前redis中的数据被分到某个文件;AOF的原理是将redis收到的所有操作指令保存到一个日志文件。
  RDB速度快,而且由于是另起线程进行保存,基本对redis无影响,一般生产采用该模式。AOF因为所有操作都要记录一个日志文件,会严重影响redis性能,但由于实时记录,如果发生宕机,能非常好的还原数据。aof看似美好,实际几乎没人用,因为使用redis的出发点之一就是性能高,而这个会影响能能;数据的问题,一般采用双机备份的机制,即一台redis主机对应一台redis备机,采用RDB机制,如果主机宕机,马上切换到备机,如果备机也坏了,那最坏的情况还是有最近的rdb备份不是。
  rdb跟aof的配置都在redis.conf中配置,rdb可以配置多条配置,同时生效。aof因为记录了所有操作命令,文件会比较大,因此有压缩机制,也就是rewrite的过程,这个压缩不是读aof文件进行去重操作,而是利用的快照机制来做的。
  rdb文件的存储格式跟解读参照:http://www.cnblogs.com/huangxincheng/p/5074998.html
5、运维监控
  对redis实时监控的软件,有redislive跟treeNMS两个,TreeNMS为国产软件,也挺好的;
 
-------------------------------------
先这么多吧,碰到了再补充
 

 
 
 
 

redis要注意的一些知识的更多相关文章

  1. redis哨兵架构的基础知识及部署和管理

    一.前言 1.哨兵的介绍 sentinal,中文名是哨兵 哨兵是redis集群架构中非常重要的一个组件,主要功能如下 ()集群监控,负责监控redis master和slave进程是否正常工作 ()消 ...

  2. redis:安装及基础知识(一)

    Redis官网:https://redis.io/ Redis中文网:http://www.redis.cn/ Redis 是一个开源的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. ...

  3. 三:redis启动后的基础知识

    Redis启动后的杂项基础知识 1.单进进程 单进程模型来处理客户端的请求.对读写等事件的响应是通过对epoll函数的包装来做到的.Redis的实际处理速度完全依靠主进程的执行效率       Epo ...

  4. Redis命令总结及其基础知识讲述

    1.redis的不同之处 Redis拥有其他数据库不具备的数据结构,又拥有内存存储(这使得redis的速度非常快),远程操作(使得redis可以与多个客户端和服务器进行连接).持久化(使得服务器可以在 ...

  5. Redis源码研究—基础知识

    1. Redis 是什么 Redis是一个开源的使用ANSI C语言编写的基于内存的key/value存储系统,与memcache类似,但它支持的value类型更多,包括:字符串(string).链表 ...

  6. [Redis知识体系] 一文全面总结Redis知识体系

    本系列主要对Redis知识体系进行详解.@pdai Redis教程 - Redis知识体系详解 知识体系 学习资料 知识体系 知识体系 相关文章 首先,我们通过学习Redis的概念基础,了解它适用的场 ...

  7. 2、Redis入门介绍

    1.什么是Redis Redis:REmote DIctionary Server(远程字典服务器) 是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分布式内存数 ...

  8. 超强、超详细Redis数据库入门教程

    这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么2.redis的作者何许人也3.谁在使用red ...

  9. Redis入门指南

    随着互联网业务对性能需求日益强烈,作为Key/Value存储的Redis具有数据类型丰富和性能表现优异的特点.如果能够熟练地驾驭它,不管是把它用做缓存还是存储,对很多大型应用都很多帮助.新浪作为世界上 ...

随机推荐

  1. Hadoop单机/伪分布式集群搭建(新手向)

    此文已由作者朱笑笑授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 本文主要参照官网的安装步骤实现了Hadoop伪分布式集群的搭建,希望能够为初识Hadoop的小伙伴带来借鉴意 ...

  2. Hadoop在ubuntu下安装配置文件及出现问题

    我的配置: 路径: hadoop /home/flyuz/hadoop jdk1.8.0_172 /opt/java/jdk1.8.0_172 eclipse /opt/eclipse 版本: ubu ...

  3. Error: connection reset by peer ,during filebeat connect to elk.

    Error screenshot like below: Reason: What I found that was the machine failing had same configuratio ...

  4. 剑指offer —— 二维数组的查找

    1.问题:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 2.思路:只看题目本身 ...

  5. spring中使用缓存

    一.启用对缓存的支持 Spring 对缓存的支持最简单的方式就是在方法上添加@Cacheable和@CacheEvict注解, 再添加注解之前,必须先启用spring对注解驱动的支持,基于java的配 ...

  6. Centos7安装MySQL8.0

    请到这个地址看:https://www.cnblogs.com/kevingrace/p/10482469.html Centos7安装MySQL8.0 - 操作手册 一.yum安装方式: 卸载之前版 ...

  7. 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_基元类型(二)

    [基元类型推荐] 推荐直接使用 FCL 类型. [理由] 编码时不至于困惑string与String的使用.由于C#的stirng(一个关键字)直接映射到System.String(一个 FCL 类型 ...

  8. Gym - 101572G Galactic Collegiate Programming Contest 小根堆(set)

    题目传送门 题目大意: n个人,m次提交,每次提交都代表某支队伍做出一题,并且给出罚时,让你输出每次提交后,编号为1的队伍的排名. 思路: 首先处理ac和罚时,由于罚时最大1000,最多有1e5次,要 ...

  9. 关于Django在写小项目的一些小注意事项

    个人常踩的坑的小问题: . 在筛选元素的时候,及时queryset里面只有一个元素,取值还是要用方法取出来 例:#当狗指定pd时候已经唯一,还是要加fir()方法,本人经常忘记了 models.Boo ...

  10. node js linux / OS 安装

    rm -rf 删除文件夹名字rm -rf 软连接名称 1.安装taryum install -y tar 3. 下载node https://nodejs.org/en/download/ 4. 拷贝 ...