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则不会 ...
随机推荐
- [Swift]LeetCode808. 分汤 | Soup Servings
There are two types of soup: type A and type B. Initially we have N ml of each type of soup. There a ...
- mybatis 批量更新 Parameter '__frch_item_0' not found. Available parameters are [list]
一次在做批量更新数据的时候报错 Parameter '__frch_item_0' not found. Available parameters are [list] 记过反复查找,最后才发现是一个 ...
- Hbase篇--HBase中一对多和多对多的表设计
一.前述 今天分享一篇关于HBase的一对多和多对多的案例的分析. 二.具体案例 案例一.多对多 人员-角色 人员有多个角色 角色优先级 角色有多个人员 人员 删除添加角色 角 ...
- HBase篇--HBase操作Api和Java操作Hbase相关Api
一.前述. Hbase shell启动命令窗口,然后再Hbase shell中对应的api命令如下. 二.说明 Hbase shell中删除键是空格+Ctrl键. 三.代码 1.封装所有的API pa ...
- android 工具库
https://github.com/xybCoder/AndroidCommon android工具类集合
- Python内置函数(13)——complex
英文文档: class complex([real[, imag]]) Return a complex number with the value real + imag*1j or convert ...
- .net core在Ocelot网关中统一配置Swagger
最近在做微服务的时候,由于我们是采用前后端分离来开发的,提供给前端的直接是Swagger,如果Swagger分布在各个API中,前端查看Swagger的时候非常不便,因此,我们试着将Swagger集中 ...
- CentOS安装Java JDK
JDK是 Java 语言的软件开发工具包,主要用于移动设备.嵌入式设备上的java应用程序.在Linux上安装Tomcat,而Tomcat服务器运行时是需要JDK支持的,所以服务器必须配置好JDK用到 ...
- 剖析HBase负载均衡和性能指标
1.概述 在分布式系统中,负载均衡是一个非常重要的功能,在HBase中通过Region的数量来实现负载均衡,HBase中可以通过hbase.master.loadbalancer.class来实现自定 ...
- eclipse创建的maven项目,pom.xml文件报错解决方法
[错误一:]maven 编译级别过低 [解决办法:] 使用 maven-compiler-plugin 将 maven 编译级别改为 jdk1.6 以上: <!-- java编译插件 --> ...