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则不会 ...
随机推荐
- 非对称加密技术里面,最近出现了一种奇葩的密钥生成技术,iFace人脸密钥技术
要说到非对称加密技术啊,得先说说对称加密技术 什么是对称加密技术 对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥加密. 也就是密钥也可以用作解密密钥,这种方法在密码学中叫做对称 ...
- MySQL如何系统学习
MySQL是当下互联网最流行的开源数据库.不管你使用或者学习何种编程语言,都将会使用到数据库,而MySQL则是应用最为广泛的数据库,没有之一! 之前在我的博客上也发布过一些MySQL优化配置项,都收到 ...
- Java如何在运行时识别类型信息?
在日常的学习工作当中,有一些知识是我们在读书的时候就能够习得:但有一些知识不是的,需要在实践的时候才能得到真知——这或许就是王阳明提倡的“知行合一”. 在Java中,并不是所有的类型信息都能在编译阶段 ...
- 今天俺要说一说装饰着模式(Decorator)
前言:装饰者模式,又叫做装饰器模式.顾名思义,就是给对象包裹一层,包装.让它变成你喜欢的对象.这种模式在我们开发中经常会用到,它是一种处理问题的技巧,即不让程序死板,也可以扩展程序. (一)何时能用到 ...
- Import Excel void (NPOI)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Qt窗口定制
qt中的QWidget窗口支持窗体绘制,但是不支持窗口标题栏绘制,想要美观的界面,还需要自己去定制,下面我就介绍一种定制窗体的方法 一个窗口无非就3部分,标题栏.窗体和状态栏,接下来我定制的窗口没有状 ...
- qt系统托盘显示、无主窗体
系统图盘是应用程序经常用到的一个控件,当应用程序需要长时间存在的时候,这个控件会变得非常有用,比如,窗口隐藏,显示,关于.关闭等接口都可以放在图盘中处理,今天与到一个问题,需求是这样的:只需要显示图盘 ...
- Docker安装MySQL并配置my.cnf
1.创建一个临时的mysql,以便复制出my.cnf等数据 $ docker run --restart=always -d -v /opt/data/mysql/:/var/lib/mysql -p ...
- msf登陆Windows 2
使用ms17_010(永恒之蓝)进行攻击登陆(XP) 1)加载模块 2)连接靶机 3)设置payload 4)设置lhost(攻击主机IP) 5)exploit进行攻击登陆
- gcc编译基本用法~2
编译简单的 C 程序 C 语言经典的入门例子是 Hello World,下面是一示例代码: ;} 我们假定该代码存为文件‘hello.c’.要用 gcc 编译该文件,使用下面的命令: $ gcc -g ...