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]LeetCode246.对称数 $ Strobogrammatic Number
A strobogrammatic number is a number that looks the same when rotated 180 degrees (looked at upside ...
- shell cut 应用实战
简介: cut是一个强大文本处理工具,它可以将文本按列进行划分的文本处理.cut命令逐行读入文本,然后按列划分字段并进行提取.输出等操作. 命令格式: cut [option] filename ca ...
- Maven项目执行java入口main方法
在Maven项目中配置pom.xml文件加载maven-surefire-plugin插件来执行testng.xml,相信大家对此种用法已经非常熟悉了.但是有些场景可能需要我们去加载执行java的ma ...
- 安装ubuntu18.10并连接xshell6
emmmm万万没想到上一篇装的linux内核才3.10,装个ubuntu系统来继续自己的docker学习之旅. 话不多说,先下镜像,地址:http://mirrors.melbourne.co.uk/ ...
- BBS论坛(十五)
15.1.登录界面完成 (1)front/signbase.html {% from 'common/_macros.html' import static %} <!DOCTYPE html& ...
- 运行PHP后台项目:xampp下载,安装,配置,运行PHP的web项目
本来没有想着弄PHP,但是有同学叫我帮忙启动一下一个PHP写的后台.着实需要去学习一下. 想着安装xampp软件,一个集合了多个服务器,多个数据库,多个后台语言的管理软件. 一.xampp下载 二.安 ...
- ubuntu 下安装docker 踩坑记录
ubuntu 下安装docker 踩坑记录 # Setp : 移除旧版本Docker sudo apt-get remove docker docker-engine docker.io # Step ...
- 双飞翼布局的改造 box-sizing和margin负值的应用
box-sizing + margin负值 升级双飞翼布局 一.box-sizing属性 .content-size, .border-size{ width: 200px; height: 100p ...
- Chapter 5 Blood Type——31
I stood carefully, and I was still fine. He held the door for me, his smile polite but his eyes mock ...
- leetcode — single-number-ii
/** * Source : https://oj.leetcode.com/problems/single-number-ii/ * * Given an array of integers, ev ...