博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis进阶学习笔记
阅读量:7196 次
发布时间:2019-06-29

本文共 2914 字,大约阅读时间需要 9 分钟。

Redis是什么这里不用再说了吧?下面是官方的解释

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs and geospatial indexes with radius queries.

Redis 常用参数配置

参数名称 说明 备注
maxmemory 最大内存设置 Redis 设置的允许的最大占用内存大小
maxmemory-policy 内存达到设定值之后的淘汰策略 默认值noeviction,不淘汰,抛出错误信息

Redis事务管理

开启REDIS事务管理

MULTI

提交事物

EXEC

丢弃事务

DISCARD

测试脚本

127.0.0.1:6379> MULTI  // 开启事务OK127.0.0.1:6379> SET PHONE 15556353237QUEUED127.0.0.1:6379> SET AGE 25QUEUED127.0.0.1:6379> EXEC  // 提交事务OKOK127.0.0.1:6379> GET AGE // 测试是否设置成功25127.0.0.1:6379> GET PHONE15556353237127.0.0.1:6379> MULTIOK127.0.0.1:6379> SET NUMBER 100QUEUED127.0.0.1:6379> DISCARD  //丢弃数据,不提交OK127.0.0.1:6379> GET NUMBER // 获取不到NUMBER127.0.0.1:6379> KEYS * // 再次验证不存在NUMBERADDRESSname3NAMESname2PHONEAGEname1name127.0.0.1:6379>

Redis超时时间

在Redis中可以为每个KEY设置一个生存时间,当这个生存时间到期的时候,这个KEY将被删除。

设置Redis超时时间

EXPIRE KEY_NAME TIME_SECOND

// 常见一个NAME=SMITH的数据127.0.0.1:6379 > SET NAME SMITH// 设置其超时时间为10s127.0.0.1:6379 > EXPIRE NAME 10

取消超时时间设置

  • 在使用SET 或者GETSET命令更新KEY值的时候 ,会自动的取消生存时间
// 清除生存在时间成功返回1,失败返回0(KEY 不存在或者本身尚未设置生存时间)127.0.0.1:6379> PERSIST NAME1

查询剩余时间

TTL KEY_NAME

// 查询NAME剩余时间,返回-1 表示超时时间不存在// 超时时间不存在有两种含义(1是已经到期 2是永久存在本身没有设置生存时间)127.0.0.1:6379 > TTL NAME

测试脚本

127.0.0.1:6379> SET NAME TAOOK127.0.0.1:6379> EXPIRE NAME 15 // 返回1 表示设置超时时间成功1127.0.0.1:6379> TTL NAME // 当前生存时间剩余12s12127.0.0.1:6379> GET NAME // 获取成功TAO127.0.0.1:6379> TTL NAME // 剩余1s1127.0.0.1:6379> GET NAME // 再次尝试获取,则获取失败127.0.0.1:6379>

消息通知-任务队列

  • 在一些异步任务中可以Redis作为一个消息队列,主要核心的内容就是使用了Redis的列表的存储。

    任务队列实现基本

创建LIST,并新增初始数据127.0.0.1:6379> LPUSH CITYS 安徽省芜湖市1127.0.0.1:6379> LPUSH CITYS NewYork  // 新增数据,返回当前list的长度信息2127.0.0.1:6379> LPUSH CITYS China3127.0.0.1:6379> LPUSH CITYS UN4127.0.0.1:6379> LPOP CITYS // 获取数据UN127.0.0.1:6379> LPOP CITYSChina127.0.0.1:6379> LPOP CITYSNewYork127.0.0.1:6379> LPUSH CITYS NANJING2127.0.0.1:6379> LPOP CITYSNANJING127.0.0.1:6379> LPOP CITYS安徽省芜湖市127.0.0.1:6379> LPOP CITYS  // 当前队列没有任何数据,返回空,此处不会阻塞127.0.0.1:6379> LPOP CITYS127.0.0.1:6379>

设置任务队列优先级

BLPOP命令的格式为

BLPOP KEY [KEY]

比如 BLPOP QUERE:1 QUERE:2 当两者都没有数据的时候,那么线程将被阻塞,当前其中任何一个有数据的时候,我们就会获取到数据信息,从而达到QUERE:1 优先级高于QUERE2的需求

订阅/发布模式

指定Channel名称订阅

订阅者使用SUBSCRIBE CHANNEL [CHANNEL...] 来订阅一个或者多个频道,订阅成功后会返回说明信息

  • subscribe表示当前是订阅信息
  • NEWS/MESSAGE 表示当前订阅的频道名称
  • 1/2 表示当前订阅的频道的数目

发布者使用PUBLISH CHANNEL MESSAGE 向CHANNEL频道发送消息MESSAGE

  • 返回当前接收到这个消息的订阅者的数目

具体的演示可以参考下图,左侧发布者发布消息到频道NEWS和MESSAGE,右侧订阅者订阅了NEWS和MESSAGE频道,

发布消息不会持久化,也就是说当A向CHANNEL发布一条MESSAGE之后,B订阅了CHANNEL,那么这个时候B不会收到MESSAGE这条消息的

%E8%AE%A2%E9%98%85%E5%8F%91%E5%B8%83%E6%A8%A1%E5%BC%8F.png

通过GLOB语法订阅

所谓GLOB语法,简而言之就是通配符订阅 ,如 PSUBSCRIBE NAME[1-3] 那么将会订阅到NAME1 NAME2 NAME3 ,?*和%表示同理

管道技术

Redis执行命令会通过TCP的方式进行连接,没执行一个命令就会等待上一条命令返回后在执行下一条,即便下一条命令不需要上一条的结果也是如此,这无疑大大浪费了时间,因此使用管道技术,可以一次执行完成,不需要多次执行,避免时间的浪费,这个知识点单独拿出来学习,敬请期待.

%E7%AE%A1%E9%81%93%E6%8A%80%E6%9C%AF.png

转载于:https://www.cnblogs.com/zhoutao825638/p/10382206.html

你可能感兴趣的文章
libjpeg.so.62: no version information available (required
查看>>
maven deploy 的那些事
查看>>
跨平台即时通讯解决方案
查看>>
IT运维面临网络缓慢的解决方法
查看>>
linux系统日志解析
查看>>
[转]linq查询运算符大全
查看>>
DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity,
查看>>
软件项目的“管理之痒”
查看>>
硅谷课程 | 系统设计的基本方法SNAKE原则
查看>>
泰国取消国家数据中心建设计划
查看>>
富士通推新型RFID标签WT-A522L,适用于时尚服装和配件
查看>>
微软:10台Windows 10 PC已有8台已升一周年更新
查看>>
《UNIXLinux程序设计教程》一2.5 文件定位
查看>>
干货满满,阿里天池CIKM2017 Rank4比赛经验分享
查看>>
全闪存不是早买早亏
查看>>
成为更优秀的程序员:退后一步看问题
查看>>
蓝屏死机”再见?Win10 正测试“绿屏”死机
查看>>
外媒称 Android 7.0 当中加入了指纹手势
查看>>
在 GitHub 上,女性提交的代码更可能被接受
查看>>
如何配置struts+hibernate,基本使用方法
查看>>