一、简介

redis 和 memcached 都是高性能的键值缓存数据库服务,其中 memcached 支持多线程,而 redis 支持丰富的数据结构且能内置持久化机制。

redis 数据都是以键值形式存储的,键是字符串类型,值有 7 种类型(本质上是5种,其中 HyperLogLog 是 string,而 GEO 是 zset,可以通过 object encoding keyname 查看,但由于功能上的差异较大,这里分为7种):

1、string 字符串

2、list 列表

3、set 集合(所有命令均以 S 开头)

4、hash 散列(所有命令均以 H 开头)

5、zset 有序集合(所有命令均以 Z 开头)

6、HyperLogLog

7、GEO (redis 3.2)

不同的值类型,甚至是同一种值类型,其底层实现也可能是不一样的(主要是考虑到不同情况下的效率优化),具体可以看 redis 源码。

二、常见命令

redis 的命令可以参考官网:https://redis.io/commands

对英文不熟练的也可以看国人翻译的网站:http://redisdoc.com/

以下对常见的命令进行列举

1、键操作命令

简单示例:

127.0.0.1:> set age
OK
127.0.0.1:> dump age
"\x00\xc0\x12\a\x00\xb2\xeb\xab\xbc\x1d\xeb\x911"
127.0.0.1:> restore age1 "\x00\xc0\x12\a\x00\xb2\xeb\xab\xbc\x1d\xeb\x911"
OK
127.0.0.1:> get age1
""

2、值操作命令:String

3、值操作命令(List)

4、值操作命令(Set)

5、值操作命令(Hash)

6、值操作命令(SortedSet)

7、值操作命令(HyperLogLog)

7、值操作命令(GEO)

三、发布与订阅

  redis 的发布与订阅,是以频道channel为中介,订阅者订阅相关channel,发布者向channel发送string类型消息,会通知到该channel相关的订阅者。在实际开发中,会有一些问题,其中一个问题是,客户端客观上会存在断线重连的情况,如果一个客户端在订阅了某个channel之后,断线重连了(已经不是原来的订阅者了),则需要重新订阅相关channel,而且会丢失断线期间的消息通知。另外,订阅的客户端会进行阻塞模式,一直监听 redis 通知的消息。取消订阅使用 unsubscribe ch1 [ch2] 命令,如果不带任何频道名,则表示退订所有频道,退订操作在官方提供的 redis-cli 中是无法模拟的,因为一旦执行订阅操作窗口就被阻塞了。
  

  基于 redis 发布与订阅功能,在 redis2.8后实现了键空间通知(keyspace)和键事件通知(keyevent)的功能,前者用于当指定模式的键发生了变化时进行通知,后者用于当发生指定的操作命令时进行通知。该功能需要消耗一定的CPU资源,默认是关闭,可通过修改 redis.conf 文件或执行 config set notify-keyspace-events AKE 来开启。命令中的 "AKE" 表示开启所有类型的通知,更细化的设置请参考官方手册,可以指定具体针对具体类型的键进行 keyspace 或 keyevent 通知。

  监视一个 keyspace/keyevent 的格式是 psubscribe __keyspace@<db>__:* 和 psubscribe __keyevent@<db>__:* ,如订阅 Users: 开头的键发生变化如下:

psubscribe __keyspace@0__:Users:*

  而订阅删除事件的操作如下:

psubscribe __keyevent@0__:del

  而如下的操作将会同时订阅 keyspace 和 keyevent,在执行类似 add key value 操作时,会收到两条通知消息:

psubscribe __key*@0__:*

四、事务

  redis 在一定程度上实现了事务逻辑(不支持回滚),通过 multi/exec 包含的命令集(顺序的将其中的命令入队,如果入队成功会返回 queued,如果入队失败则会导致事务失败,即使执行exec也会返回事务错误),将以原子操作执行(需要注意的是,如果事务队列中的某些命令执行成功,而某些命令执行失败是存在的,redis 并不会回滚。在事务命令入队时,redis只会检查严重的语法格式错误,逻辑错误是没法检测的,比如对一个string键执行 lpush 操作)。 multi 命令标记着事务的开始,exec 标记事务的结束并提交事务,discard 标记着事务的结束并放弃事务。与事务常常一起配合使用的有 watch 命令,该命令用于在事务开始前监视一个 key 的内容是否发生变化。 在执行 exec 命令提交事务时,redis会检测当前的 watch 队列中的数据是否发生变化,如果发生变化,则事务将不被执行(程序可以尝试重试操作,使用乐观锁是从效率考虑)。无论提交还是放弃(exec/discard)一个事务,都会清空当前的 watch 队列,如果需要在事务开始前取消一个之前watch的操作,可以使用 unwatch 命令。

  

  注意,如果 watch 的是一个带生存时间的键,那么即使该键过期了,redis 仍然认为其是没有变化的,事务仍可正常执行。

  redis 脚本是在 redis2.6 之后引入的另一种处理事务的方法,使用脚本要更简单,并且速度更快。redis 官方表示,短时间内并不会移除原有的事务功能,但未来如果脚本被广泛使用的话并不排除这种可能。

五、服务器管理

1、慢日志

  通过慢日志,可以记录执行时间较长的命令,从而便于找出项目的效率问题。

  通过下面的命令可以设置当命令耗时超过多少微秒时将被记录:

config set slowlog-log-slower-than  

  这些慢日志会记录到一个队列中,可以通过下面的命令设置队列的长度:

CONFIG SET slowlog-max-len 

  查看慢日志可以用下面的命令,如果跟上数字,表示显示指定数量的日志:

slowlog get [number]

  查看当前慢日志的数量:

slowlog len

  清空慢日志:

slowlog reset

六、集群

七、redis性能测试

http://www.cnblogs.com/silent2012/p/4514901.html

Redis指南的更多相关文章

  1. thinkphp5使用redis实现秒杀商品活动

    如题,废话少说贴码为上↓ // 初始化redis数据列表 模拟库存50,redis搭建在centos中已开启 public function redisinit(){ $store=50; // 库存 ...

  2. Redis 小白指南(一)- 简介、安装、GUI 和 C# 驱动介绍

    Redis 小白指南(一)- 简介.安装.GUI 和 C# 驱动介绍 目录 简介 安装 入门指令 GUI 工具 C# 驱动介绍 简介 ANSI C 编写,开源,基于内存,可持久化,一个键值对的数据库, ...

  3. Redis 小白指南(二)- 基础命令和五大类型:字符串、散列、列表、集合和有序集合

    Redis 小白指南(二)- 基础命令和五大类型:字符串.散列.列表.集合和有序集合 引言 目录 基础命令 字符串类型 散列类型 列表类型 集合类型 有序集合类型 基础命令 1.获得符合规则的键名列表 ...

  4. Redis 小白指南(三)- 事务、过期、消息通知、管道和优化内存空间

    Redis 小白指南(三)- 事务.过期.消息通知.管道和优化内存空间 简介 <Redis 小白指南(一)- 简介.安装.GUI 和 C# 驱动介绍> 讲的是 Redis 的介绍,以及如何 ...

  5. Redis 小白指南(四)- 数据的持久化保存(草稿)

    Redis 小白指南(四)- 数据的持久化保存 简介 因为 redis 将数据保存在内存中,很容易诱发的一个问题就是,程序崩溃或服务器重启等情况如何保证数据的正常存储. 当我们以 redis 作为主数 ...

  6. Redis 小白指南(二)- 聊聊五大类型:字符串、散列、列表、集合和有序集合

    Redis 小白指南(二)- 聊聊五大类型:字符串.散列.列表.集合和有序集合 引言 开篇<Redis 小白指南(一)- 简介.安装.GUI 和 C# 驱动介绍>已经介绍了 Redis 的 ...

  7. Redis基本使用及百亿数据量中的使用技巧分享(附视频地址及观看指南)

    作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9941208.html 主讲人:大石头 时间:2018-11-10 晚上20:00 地点:钉钉群(组织代码 ...

  8. Spring Boot + Mybatis + Redis二级缓存开发指南

    Spring Boot + Mybatis + Redis二级缓存开发指南 背景 Spring-Boot因其提供了各种开箱即用的插件,使得它成为了当今最为主流的Java Web开发框架之一.Mybat ...

  9. Redis入门指南之三(入门)

    本节主要介绍Redis的5种数据类型,同时使用Python API来操作Redis,其中python版本为3.5, redis版本为4.0.2. redis-py 的API的使用可以分类为: (1)连 ...

随机推荐

  1. 父容器利用opacity设置透明后,子元素跟着变透明的解决方案

    背景半透明,子元素不透明的效果经常需要用到.通常对父容器使用opacity属性时,子元素也跟着变透明,所以不妨设置父容器的 background-color:rgba(r,g,b,x); 其中x取值从 ...

  2. [转]Asp.Net 用户验证(自定义IPrincipal和IIdentity)

    本文转自:http://www.cnblogs.com/amylis_chen/archive/2012/08/02/2620129.html Default.aspx 页面预览 默认情况下SignI ...

  3. ubuntu 14.04 配置tomacat8

    自己在虚拟机总安装tomcat8,主机访问,记下步骤方便以后查看. 1.将tomcat8安装包移动到/usr/local目录中(个人喜欢把自己安装的软件放到/usr/local文件夹中) 2.解压缩, ...

  4. 【原】pageResponse - 让H5适配移动设备全家(移动端适配)

    上一篇文章<为什么选择iPhone5的分辨率作为H5视觉稿尺寸>最后留下了问题:是否需要视觉设计师设计多套的视觉稿供给前端工程师做页面适配呢?按照自己以前的方法,通常会要求设计师设计2套的 ...

  5. 从BSP模型到Apache Hama

    一.什么是BSP模型 概述 BSP(Bulk Synchronous Parallel,整体同步并行计算模型)是一种并行计算模型,由英国计算机科学家Viliant在上世纪80年代提出.Google发布 ...

  6. [No00008F]PLSQL自动登录,记住用户名密码&日常使用技巧

    配置启动时的登录用户名和密码 这是个有争议的功能,因为记住密码会给带来数据安全的问题. 但假如是开发用的库,密码甚至可以和用户名相同,每次输入密码实在没什么意义,可以考虑让PLSQL Develope ...

  7. 怎样简单灵活地将DataTable中的数据赋值给model

    最近在做的一个项目中,有13个方法都需要用到同一种处理方式:通过SQL语句从数据库获取一条指定的数据,并将该数据中的每个值都赋值给一个model,再将这个model中的数据通过微信发送出去.每个方法都 ...

  8. 篇二:MySQL存储过程

    目的:写一个存储过程,往数据库中插入几百条数据,作为识别码给别人用(这里我觉得和验证码的功能相似) BEGIN ); ); ) ; ); ); ; ; while count <= insert ...

  9. blog (后续更新)

    设计Model(设计数据库) from django.db import models # Create your models here. class BlogsPost(models.Model) ...

  10. MySQL练习题

    MySQL练习题 一.表关系 请创建如下表,并创建相关约束 二.操作表 1.自行创建测试数据 2.查询“生物”课程比“物理”课程成绩高的所有学生的学号: 3.查询平均成绩大于60分的同学的学号和平均成 ...