原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com
 

redis是继memcached之后兴起的内存数据库,作者非常崇尚简洁高效,力求以最简单的方式最高效的解决问题,所谓大道至简。同时作者也很勤奋,经常尝试不同解决问题的方式来优化。

 
redis支持丰富的数据的数据结构,它们在特定场景下都有自己的用武之地。比如hash: 能提供同一类资源下所有健值的查询, ServiceStack的redis client就是基于此来封装Entity实现透明读写操作的。
 
为了支持不同数据结构的操作,提供了丰富的命令,实际上这就是和redis进行交互的方式。我在项目中用到redis保存json结构的数据,用命令查看并不方便,于是基于node.js提供rest api查询,在chrome浏览器中查看json方便了不少,后面有时间会整理开源到github。
 
redis的cluster模块还没有合并到稳定版本中,因此无法做到数据切片。Master/Slave也只能解决HA的问题,目前还是单机使用的场景比较多,这方面还比较弱。
 
redis曾经在早期版本中提供了使用磁盘来虚拟内存功能,但在新版本中已经取消,作者认为redis定位是内存数据库,在内存中操作数据是最高效的。因此,在产线部署redis要求内存足够,考虑fork进程持久化的问题,建议至少为缓存数据的两倍值。在实践中,我们发现内存紧张可能引发redis异常退出,所以没内存就不要玩redis。
 
redis提供了AOF和Snapshot两种方式来持久化数据,这两种持久化都不会影响缓存使用。前者是commit log方式,对数据的保障性最高,缺点是要准备足够的磁盘空间。另外要注意在特别严格的场景下,要关闭操作系统写缓存(appendfsync),否则高并发下仍然有丢失数据的风险。Snapshot是通常的做法,也是默认的方式,通过一定的策略来触发,注意是Snapshot是全量写入磁盘的。
 
redis也实现了事务性的两阶段提交,事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。事务中的命令要么全部被执行,要么全部都不执行。
 
值得一提的是,在电子商务网站中,前端负载均衡设备通常会以FAQ的方式询问后端服务是否活着,对于redis的检查,可以通过ping命令完成。

redis使用心得的更多相关文章

  1. 分布式缓存Redis使用心得

    一.缓存在系统中用来做什么 1. 少量数据存储,高速读写访问.通过数据全部in-momery 的方式来保证高速访问,同时提供数据落地的功能,实际这正是Redis最主要的适用场景. 2. 海量数据存储, ...

  2. python redis使用心得

    发布与订阅 连接池代码 redis_conn.py import redis REDIS_CONN = { 'HOST': '192.168.1.11', 'PORT': '6378', 'DB': ...

  3. redis学习心得之三-【java操作redis】

    今天主要是讲讲java对redis的操作,来段代码掩饰下基本操作即可明白. java调用你需要下载jedis.jar包 下载网址:https://github.com/xetorthio/jedis/ ...

  4. redis学习心得之二【redis主从配置】

    在前一节我们已经实践启动了一个redis服务,我们将其作为主机,现为其创建一个从机作备份使用 1.复制一份配置出来为从机所用 ~$ cp       redis/etc/redis.conf     ...

  5. redis学习心得之一【安装redis初体验】

    在linux下安装redis 说起这个比mysql的安装过程简单多乐,它不需要configure,只需要解压之后make就可以,无需make install ~$ wget http://redis. ...

  6. 工作圈redis 使用

    redis作为内存数据库,更多的是作为内存cache来使用. 再所负责的工作圈中的使用,主要是分两方面: 1.数据对象: 主题的内容存储 主题回复内容的存储 用户信息存储 圈子信息存储 2.各数据对象 ...

  7. redis安装与使用

    linux: 1.下载redis 下载redis: 可以在redis的官网下载 : http://redis.io/ 也可以去谷歌的code下载: http://code.google.com/p/r ...

  8. .Net Core 三大Redis客户端对比和使用心得

    前言 稍微复杂一点的互联网项目,技术选型都可能会涉及Redis,.NetCore的生态越发完善,支持.NetCore的Redis客户端越来越多, 下面三款常见的Redis客户端,相信大家平时或多或少用 ...

  9. java调用redis的多种方式与心得

    心得: /** * 心得: * 1.连接方式主要有:直连同步,直连事务,直连管道,直连管道事务,分布式直连同步,分布式直连管道, * 分布式连接池同步,分布式连接池管道:普通连接池同步,普通连接池管道 ...

随机推荐

  1. UITableViewCell的highlighted 和selected 属性1

    将UITableViewCell的selectedBackgroundView设置为按下图片的状态,同时不支持多选的情况下,遇到如下问题: 如果默认第一个cell处于selected状态,然后再点击其 ...

  2. Windows下解压版mysql的安装方法

    1 首先下载mysql的解压版的rar安装包 1 将安装包解压到安装路径.C:\Program Files (x86)\MySQL2 将安装路径下的bin追加到环境变量"PATH" ...

  3. vs快捷键visual studio

    网上抄的.记录下来.没全试过!强大的VS,真的喜欢! Shift+Alt+Enter: 切换全屏编辑 Ctrl+B,T / Ctrl+K,K: 切换书签开关Ctrl+B,N / Ctrl+K,N: 移 ...

  4. android download manager

    下载管理器,有个哥们写得很好了http://www.trinea.cn/android/android-downloadmanager/ 下载后台通知 下载管理器内容交互 最近对内部业务逻辑整理了一下 ...

  5. redis客户端连接异常

    本文参考:http://mdba.cn/2015/04/02/redistwemproxy-%e5%ae%a2%e6%88%b7%e7%ab%af%e8%bf%9e%e6%8e%a5%e5%bc%82 ...

  6. 用 R 进行高频金融数据分析简介

    作者:李洪成 摘自:http://cos.name/wp-content/uploads/2013/11/ChinaR2013SH_Nov03_04_LiHongcheng.pdf 高频数据 金融市场 ...

  7. 为什么匿名内部类只能访问final变量【转】

    是变量的作用域的问题,因为匿名内部类是出现在一个方法的内部的,如果它要访问这个方法的参数或者方法中定义的变量,则这些参数和变量必须被修饰为final.因为虽然匿名内部类在方法的内部,但实际编译的时候, ...

  8. Django-数据模型

    修改model.py文件 from django.db import models # Create your models here. class Question(models.Model): q ...

  9. 黑马程序员-scanf函数

    变量的内存:字节和地址:1.变量的存储单位是字节,每个字节都有存储地址.2.不同的数据大小占用的内存带下不同拥有的字节数也是不同的.变量的存储:1.存储是按照,先存储的放在地址教高的位置,优先存储的地 ...

  10. C#is运算符的作用

    is运算符的含义:检查对象是不是给定类型,或者是否可以转换为给定类型,如果是,这个运算符就返回True. is运算符的语法:<operand> is <type> 这个表达式的 ...