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]LeetCode310. 最小高度树 | Minimum Height Trees
For an undirected graph with tree characteristics, we can choose any node as the root. The result gr ...
- [Swift]LeetCode554. 砖墙 | Brick Wall
There is a brick wall in front of you. The wall is rectangular and has several rows of bricks. The b ...
- Python文本数据互相转换(pandas and win32com)
(工作之后,就让自己的身心都去休息吧) 今天介绍一下文本数据的提取和转换,这里主要实例的转换为excel文件(.xlsx)转换world文件(.doc/docx),同时需要使用win32api,同py ...
- iOS学习——图片压缩到指定大小以内
一.图片压缩简述 在我们开发过程中,有可能会遇到拍照.或者从相册中选择图片,要么单选或者多选,然后上传图片到服务器,一般情况下一张图片可能3-4M,如果类似微信朋友圈上传9张图片大约是 35M左右,如 ...
- 基于ipv6的数据抓包
一.实验拓扑 二.配置过程 以r1为例 R1: R1(config)#int f0/0 R1(config-if)#ipv6 enable R1(config-if)#ipv6 address 200 ...
- python判断文件是否存在
# 判断文件是否存在 def judgejson(jsonpath): # 如果存在就返回True,不存在就返回False return os.path.exists(jsonpath)
- css奇淫巧计
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- C#版[击败98.85%的提交] - Leetcode717. 1比特与2比特字符 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...
- 实现无缝兼容ajax/websocket网页应用和服务
为了让用户体验更好,页面前端往往是通过ajax来进行数据处理:由于浏览器的设计原因每个域名下的连接有限,这样导致了同时进行ajax数据请求效率无法得到有效地提升,为了提高效率和传统HTTP协议上的限制 ...
- 【Java基础】【20IO(字节流)】
20.01_IO流(IO流概述及其分类) 1.概念 IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 Java用于操作流的类都在IO包中 流按流向分为两种:输入流,输出流. 流按操 ...