Redis进阶学习笔记
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 // 开启事务
OK
127.0.0.1:6379> SET PHONE 15556353237
QUEUED
127.0.0.1:6379> SET AGE 25
QUEUED
127.0.0.1:6379> EXEC // 提交事务
OK
OK
127.0.0.1:6379> GET AGE // 测试是否设置成功
25
127.0.0.1:6379> GET PHONE
15556353237
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> SET NUMBER 100
QUEUED
127.0.0.1:6379> DISCARD //丢弃数据,不提交
OK
127.0.0.1:6379> GET NUMBER // 获取不到NUMBER
127.0.0.1:6379> KEYS * // 再次验证不存在NUMBER
ADDRESS
name3
NAMES
name2
PHONE
AGE
name1
name
127.0.0.1:6379>
Redis超时时间
在Redis中可以为每个KEY设置一个生存时间,当这个生存时间到期的时候,这个KEY将被删除。
设置Redis超时时间
EXPIRE KEY_NAME TIME_SECOND
// 常见一个NAME=SMITH的数据
127.0.0.1:6379 > SET NAME SMITH
// 设置其超时时间为10s
127.0.0.1:6379 > EXPIRE NAME 10
取消超时时间设置
- 在使用SET 或者GETSET命令更新KEY值的时候 ,会自动的取消生存时间
// 清除生存在时间成功返回1,失败返回0(KEY 不存在或者本身尚未设置生存时间)
127.0.0.1:6379> PERSIST NAME
1
查询剩余时间
TTL KEY_NAME
// 查询NAME剩余时间,返回-1 表示超时时间不存在
// 超时时间不存在有两种含义(1是已经到期 2是永久存在本身没有设置生存时间)
127.0.0.1:6379 > TTL NAME
测试脚本
127.0.0.1:6379> SET NAME TAO
OK
127.0.0.1:6379> EXPIRE NAME 15 // 返回1 表示设置超时时间成功
1
127.0.0.1:6379> TTL NAME // 当前生存时间剩余12s
12
127.0.0.1:6379> GET NAME // 获取成功
TAO
127.0.0.1:6379> TTL NAME // 剩余1s
1
127.0.0.1:6379> GET NAME // 再次尝试获取,则获取失败
127.0.0.1:6379>
消息通知-任务队列
- 在一些异步任务中可以Redis作为一个消息队列,主要核心的内容就是使用了Redis的列表的存储。
任务队列实现基本
创建LIST,并新增初始数据
127.0.0.1:6379> LPUSH CITYS 安徽省芜湖市
1
127.0.0.1:6379> LPUSH CITYS NewYork // 新增数据,返回当前list的长度信息
2
127.0.0.1:6379> LPUSH CITYS China
3
127.0.0.1:6379> LPUSH CITYS UN
4
127.0.0.1:6379> LPOP CITYS // 获取数据
UN
127.0.0.1:6379> LPOP CITYS
China
127.0.0.1:6379> LPOP CITYS
NewYork
127.0.0.1:6379> LPUSH CITYS NANJING
2
127.0.0.1:6379> LPOP CITYS
NANJING
127.0.0.1:6379> LPOP CITYS
安徽省芜湖市
127.0.0.1:6379> LPOP CITYS // 当前队列没有任何数据,返回空,此处不会阻塞
127.0.0.1:6379> LPOP CITYS
127.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这条消息的

通过GLOB语法订阅
所谓GLOB语法,简而言之就是通配符订阅 ,如 PSUBSCRIBE NAME[1-3] 那么将会订阅到NAME1 NAME2 NAME3 ,?*和%表示同理
管道技术
Redis执行命令会通过TCP的方式进行连接,没执行一个命令就会等待上一条命令返回后在执行下一条,即便下一条命令不需要上一条的结果也是如此,这无疑大大浪费了时间,因此使用管道技术,可以一次执行完成,不需要多次执行,避免时间的浪费,这个知识点单独拿出来学习,敬请期待.

Redis进阶学习笔记的更多相关文章
- ROS进阶学习笔记(11)- Turtlebot Navigation and SLAM - ROSMapModify - ROS地图修改
ROS进阶学习笔记(11)- Turtlebot Navigation and SLAM - 2 - MapModify地图修改 We can use gmapping model to genera ...
- Redis in Action : Redis 实战学习笔记
1 1 1 Redis in Action : Redis 实战学习笔记 1 http://redis.io/ https://github.com/antirez/redis https://ww ...
- 爱了!阿里大神最佳总结“Flutter进阶学习笔记”,理论与实战
前言 "小步快跑.快速迭代"的开发大环境下,"一套代码.多端运行"是很多开发团队的梦想,美团也一样.他们做了很多跨平台开发框架的尝试:React Native. ...
- Redis:学习笔记-04
Redis:学习笔记-04 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 10. Redis主从复制 1 ...
- Redis:学习笔记-03
Redis:学习笔记-03 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 7. Redis配置文件 启动 ...
- Redis:学习笔记-02
Redis:学习笔记-02 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 4. 事物 Redis 事务本 ...
- Redis:学习笔记-01
Redis:学习笔记-01 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 1. Redis入门 2.1 ...
- Redis——入门学习笔记
Redis学习 说到前面:这篇笔记只是我作为一个Redis新手,从0到认知的一个过程.后续会持续深入学习. 学习初衷和计划 学习Redis,因为这是热门技术,必须掌握的技术,别人都会我不会.就这一点就 ...
- memcache/redis 缓存学习笔记
0.redis和memcache的区别 a.redis可以存储除了string之外的对象,如list,hash等 b.服务器宕机以后,redis会把内存的数据持久化到磁盘上,而memcache则不会 ...
随机推荐
- Android OpenSL ES 开发:使用 OpenSL 播放 PCM 数据
OpenSL ES 是基于NDK也就是c语言的底层开发音频的公开API,通过使用它能够做到标准化, 高性能,低响应时间的音频功能实现方法. 这次是使用OpenSL ES来做一个音乐播放器,它能够播放m ...
- JavaScript基础之值传递和引用传递
js的值传递和引用(地址)传递 首先总述一下:js的5种基本数据类型 number,string,null,undefined,boolean 在赋值传递时是值传递,js的引用数据类型(object, ...
- Linux 文件夹压缩命令总结
tar命令 解包:tar zxvf FileName.tar 打包:tar czvf FileName.tar DirName gz命令 解压1:gunzip FileName.gz 解压2:gzip ...
- 微信小程序使用nginx方向代理实现内嵌非业务域名
通过上一篇文章简单介绍了一下微信小程序的新组件<web-view>,实现了在小程序中内嵌业务域名的功能.但是boss要的小程序中不仅想内嵌业务域名,还想要打开一些非业务域名(无法操作web ...
- spring cloud + .net core实现微服务架构
1.新建spring boot项目 2.添加spring-cloud-starter-eureka-server依赖(需提供版本信息) <!-- https://mvnrepository.co ...
- asp.net core系列 25 EF模型配置(隐藏属性)
一. 隐藏属性概述 隐藏属性也叫影子属性,该属性不是在.net实体类中定义的属性,而是在EFCore模型中为该实体类型定义的属性.这些属性的值和状态完全在变更跟踪器中维护.它有二个功能:(1)当数据库 ...
- 使用SDL2显示一张图片,SDL2上手贴
SDL全名Simple DirectMedia Layer,是一个跨平台的底层音频.视频.键盘.鼠标操作库,操作实际通过更底层的OpenGL/Direct3D完成,在保留跨平台的兼容性之外提供了非常高 ...
- SpringBoot入门教程(六)SpringBoot2.0统一处理404,500等http错误跳转页
在做web项目的时候,大家对404.500等http状态码肯定并不陌生.然而无论是哪种"非正常"状态码,都不是我们想遇到的.尤其像一些500这种服务器内部错误,不愿意展示给用户的, ...
- 带着新人学springboot的应用09(springboot+异步任务)
本来想说说检索的,不过不知道什么鬼,下载ElasticSearch太慢了,还是放一下,后面有机会再补上!今天就说个简单的东西,来说说任务. 什么叫做任务呢?其实就是类中实现了一个什么功能的方法.常见的 ...
- linux文本处理三剑客的学习
linux下有三个文本处理的神器.分别是grep,sed,awk.功能都是比较强大的. grep帮助: http://my-study-grep.readthedocs.io/en/latest/ s ...