Redis指南

一、简介

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:6379> set age 18
OK
127.0.0.1:6379> dump age
"\x00\xc0\x12\a\x00\xb2\xeb\xab\xbc\x1d\xeb\x911"
127.0.0.1:6379> restore age1 5000 "\x00\xc0\x12\a\x00\xb2\xeb\xab\xbc\x1d\xeb\x911"
OK
127.0.0.1:6379> get age1
"18"

 

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 10000 

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

CONFIG SET slowlog-max-len 1000

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

slowlog get [number]

 

  查看当前慢日志的数量:

slowlog len

  清空慢日志:

slowlog reset

 

 

 

 

 

六、集群

 

 

七、redis性能测试

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

转载于:https://www.cnblogs.com/tianyajuanke/p/6134323.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283314.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringIOC之AbstractMessageSource

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

【实战】手把手教你从 0 到 1 搭建一套 RocketMQ 集群

大家好&#xff0c;我是君哥。今天来分享怎样搭建 RocketMQ 集群。本文搭建集群使用的环境是 2 个云主机&#xff0c;架构如下&#xff1a;在 47.xx.xx.xx 和 39.xx.xx.xx 上分别部署一个 Name Server 和 Broker 主节点&#xff0c;这里不搭建从节点。也就是官网介绍的 2m-nosl…

敏捷制造:并不是你想像的矛盾体

\关键点\敏捷制造使企业能够比传统制造方式更快更有效地取悦客户 \敏捷方法实际上是为制造而不是软件而开发的 \敏捷制造需要从上到下的数字视角和承诺 \敏捷制造需要新的技能&#xff0c;还需要授权、扁平化合作和贯穿整个组织的沟通 \迈向敏捷制造的第一步可以是通过升级传统…

上海一趟,我陷入了沉思

hi&#xff0c;这里是桑小榆。2022年8月20日&#xff0c;我去了一趟上海&#xff0c;交了很多新朋友&#xff0c;和各行业且具备独立思考的伙伴交流了很多&#xff0c;也吸收了很多的新东西。此篇我将分享我的感悟&#xff0c;并以自己的角度剖析存在的问题。痛苦与症状在此之前…

Swiper(Swiper master)是目前应用较广泛的移动端网页触摸内容滑动js插件

为什么80%的码农都做不了架构师&#xff1f;>>> Swiper(Swiper master)是目前应用较广泛的移动端网页触摸内容滑动js插件 http://www.swiper.com.cn/ 转载于:https://my.oschina.net/huqiji/blog/800482

vue实现todo功能(一):搭建vue-webpack环境

前言 我最开始因为项目原因接触的是react&#xff0c;对于我这种美观狂而言&#xff0c;react中难以调解的css让我十分抓狂&#xff0c;说是在写页面&#xff0c;因为不能写自己的样式&#xff0c;像是在拼凑页面&#xff0c;没意思。于是我开始了解vue这种将css html javacrip…

单模光电转换器怎么接_以太网光纤收发器怎么用?

以太网光纤收发器有单模、多模&#xff0c;单纤、双纤&#xff0c;百兆、千兆&#xff0c;电信级和工业级品质&#xff0c;稳定可靠&#xff0c;是网络高清监控优选设备。那么&#xff0c;以太网光纤收发器怎么用呢&#xff1f;接下来就由飞畅科技的小编来为大家详细介绍下以太…

WPF效果第一百九十六篇之彩色马蹄形图

上一篇又是基于ListBox改了改模板实现了点不一样的效果;今天来分享一点这些天一直摸索的好玩的效果;闲话不多扯直接看效果:1、对于各种定义就直接看下面:https://www.wigglepixel.nl/en/blog/what-are-color-spaces-color-profiles-and-gamma-correction2、关于马蹄图我找到了S…

grub4dos中的不容易理解的问题

2019独角兽企业重金招聘Python工程师标准>>> menu.lst中写有菜单&#xff0c;但又发现很多人使用BCD,是否是这样&#xff0c;通过menu.lst中的菜单引导的系统&#xff0c;是不通过BCD文件引导的&#xff0c;还是说它们是必须同时有的&#xff0c;并且要关联呢&#…

卸载wps后桌面上的office文件图标变成了白色

文章目录卸载wps后桌面上的office文件图标变成了白色第一步&#xff1a;第二步卸载wps后桌面上的office文件图标变成了白色 作者&#xff1a;wyf 第一步&#xff1a; **win(图标&#xff09;R&#xff0c;输入regedit&#xff0c;点击确定**第二步 2、找到HKEY_CLASSES_ROOT…

springboot单例模式注入对象_Spring 中经典的 9 种设计模式,打死也要记住啊!

本文转载自公众号“Java专栏1.简单工厂(非23种设计模式中的一种)2.工厂方法3.单例模式4.适配器模式5.装饰器模式6.代理模式7.观察者模式8.策略模式9.模版方法模式Spring中涉及的设计模式总结1.简单工厂(非23种设计模式中的一种)实现方式&#xff1a;BeanFactory。Spring中的Bea…

通过项目逐步深入了解Mybatis(四)

相关阅读&#xff1a; 1、通过项目逐步深入了解Mybatis<一> 2、通过项目逐步深入了解Mybatis<二> 3、通过项目逐步深入了解Mybatis<三> 本项目所有代码及文档都托管在 Github地址&#xff1a;https://github.com/zhisheng17/mybatis 延迟加载 什么是延迟加载…

读两本敦煌书杂记-敦煌的历史(一)

前两天看了樊锦诗院长的讲座&#xff0c;八十几岁的高龄还讲的兴致盎然&#xff0c;虽然全长两个多小时但感觉一点不嫌长&#xff0c;听完深受感动。意犹未尽&#xff0c;又迫不及待的买了几本书来读。一本是《灿烂佛宫》&#xff0c;一本是《报恩父母经典故事》。因为我自己从…

在anaconda中安装tensorflow-GPU版本

在anaconda中安装tensorflow-GPU版本 第一步&#xff1a;去anaconda官网下载&#xff0c;我下载的是anaconda (python3.7版本&#xff09; anaconda下载链接&#xff1a;点击link 进去之后网页最下面有要下载的版本 安装的具体步骤&#xff1a;点击 link 第二步&#xff1a;…

云服务远程登录---设置安全组

对于小白来说购买了云服务不知道怎么开放端口和用xsell远程连接下面是步骤&#xff1a; 下面就可以玩耍了转载于:https://www.cnblogs.com/zhaojingyu/p/9021068.html

高程数据处理_珠峰长高了吗?新高程怎么算出来的?揭秘

珠穆朗玛峰是世界上海拔最高的山峰&#xff0c;被称为世界第三极&#xff0c;是亚洲的水塔。12月8日&#xff0c;珠穆朗玛峰最新高程公布&#xff0c;为8848.86米。珠峰长高了吗&#xff1f;怎么测算出来的&#xff1f;和以往的测量相比&#xff0c;“新”在哪里&#xff1f;就…

微服务框架开发(二)—扩展spring schema

2019独角兽企业重金招聘Python工程师标准>>> 一、实体bean的定义 回顾一下我们需要定义的4个标签 定义注册中心标签&#xff1a;<xmen:registry name"registry" regProtocol"zookeeper" address"127.0.0.1:2181" connectTimeout&q…

如何找tensorflow-gpu版本对应的cuda和cudnn

第一步 先创建一个虚拟环境&#xff08;我是在anaconda Prompt中创建&#xff09;&#xff1a;conda create -n TF1.14 python3.6 第二步 进入虚拟环境conda activate TF1.14 第三步 安装tensorflow-gpu版本 pip install tensorflow-gpu1.14.0 -i HTTPS://pypi.doubanio…

基于干净语言和好奇心的敏捷指导

\关键要点\\通过简单的问题可以挖掘出产品中包含的真正有价值的信息&#xff0c;以及我们所期望的合作方式。\\t在以“干净问题”为基础的文化中&#xff0c;没有问题会遭到嘲笑&#xff0c;而且不存在“愚蠢”的问题。\\t“尽其所能地工作”和“干净反馈”等练习可以帮助敏捷团…

origin如何绘制双y轴曲线_Origin用矩阵绘制多层曲面映射图

点击上方关注点击下方点赞【导读】怎样绘制多曲面映射图&#xff1f;1.矩阵数据的准备1.1 XYYYY型数据我们在实验中得到一张Excel表格一列X表示电场强度&#xff0c;负载量不同的多列Y又分为Pm、Pr两组。那么我们需要分别构造Pm和Pr两组XYYYY型数据表。那么全选Pr表中的XYYYY型…