除了存取数据,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. Bugly升级应用集成指南

    1.配置 app/build.gradle android { defaultConfig { ndk { //设置支持的SO库架构 abiFilters 'armeabi' //, 'x86', ' ...

  2. ASP.NET MVC 页面模块编程语法小结

    1.@RenderSection("XXX") 与 @section XXX{} _Layout.cshtml <!DOCTYPE html> <html> ...

  3. Redis集群Windows

    一 所需软件:Redis.Ruby语言运行环境.Redis的Ruby驱动redis-xxxx.gem.创建Redis集群的工具redis-trib.rb 二 安装配置redis redis下载地址   ...

  4. ASP.NET MVC底层原理与框架

    前言 鄙人有一毛病,喜欢钻研原理性的东西,感觉只知道怎么用还不太够,更想知道如何实现的以及为什么会这样. 暑假的时候做积分系统是第一次接触MVC,感觉MVC就是一个框架,分为Module ,view和 ...

  5. typeof 和 instanceof

    typeof 和 instanceof 都是用来判断类型的函数 typeof 对于原始类型来说,除了 null 都可以显示正确的类型 typeof 1 // 'number' typeof '1' / ...

  6. Mineweep(扫雷)

    题目描述: 每周一题之2  Mineweep(扫雷) Minesweeper (扫雷) PC/UVa IDs: 110102/10189, Popularity: A, Success rate: h ...

  7. js 弹性菜单

    <!doctype html> <html> <head> <meta http-equiv="Content-Type" content ...

  8. C语言中的预处理命令

    预处理功能是C语言的重要功能. 问:为什么要预处理,什么是预处理? 答:我们知道高级语言的运行过程是通过编译程序(编译器)把源代码翻译成机器语言,实现运行的.编译程序的工作包含:语法分析.词法分析.代 ...

  9. 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_对象的相等性和同一性

    [重写Equals注意的事项] 1. Equals 必须是自反的:--x.Equals(x)肯定为 true 2. Equals 必须是对称的:--x.Equals(y)肯定返回与y.Equals(x ...

  10. Codeforces Round #334(div.2) A

    A. Uncowed Forces time limit per test 1 second memory limit per test 256 megabytes input standard in ...