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 // 开启事务OK127.0.0.1:6379> SET PHONE 15556353237QUEUED127.0.0.1:6379> SET AGE 25QUEUED127.0.0.1:6379> EXEC // 提交事务OKOK127.0.0.1:6379> GET AGE // 测试是否设置成功25127.0.0.1:6379> GET PHONE15556353237127.0.0.1:6379> MULTIOK127.0.0.1:6379> SET NUMBER 100QUEUED127.0.0.1:6379> DISCARD //丢弃数据,不提交OK127.0.0.1:6379> GET NUMBER // 获取不到NUMBER127.0.0.1:6379> KEYS * // 再次验证不存在NUMBERADDRESSname3NAMESname2PHONEAGEname1name127.0.0.1:6379>
Redis超时时间
在Redis中可以为每个KEY设置一个生存时间,当这个生存时间到期的时候,这个KEY将被删除。
设置Redis超时时间
EXPIRE KEY_NAME TIME_SECOND
// 常见一个NAME=SMITH的数据127.0.0.1:6379 > SET NAME SMITH// 设置其超时时间为10s127.0.0.1:6379 > EXPIRE NAME 10
取消超时时间设置
- 在使用SET 或者GETSET命令更新KEY值的时候 ,会自动的取消生存时间
// 清除生存在时间成功返回1,失败返回0(KEY 不存在或者本身尚未设置生存时间)127.0.0.1:6379> PERSIST NAME1
查询剩余时间
TTL KEY_NAME
// 查询NAME剩余时间,返回-1 表示超时时间不存在// 超时时间不存在有两种含义(1是已经到期 2是永久存在本身没有设置生存时间)127.0.0.1:6379 > TTL NAME
测试脚本
127.0.0.1:6379> SET NAME TAOOK127.0.0.1:6379> EXPIRE NAME 15 // 返回1 表示设置超时时间成功1127.0.0.1:6379> TTL NAME // 当前生存时间剩余12s12127.0.0.1:6379> GET NAME // 获取成功TAO127.0.0.1:6379> TTL NAME // 剩余1s1127.0.0.1:6379> GET NAME // 再次尝试获取,则获取失败127.0.0.1:6379>
消息通知-任务队列
在一些异步任务中可以Redis作为一个消息队列,主要核心的内容就是使用了Redis的列表的存储。
任务队列实现基本
创建LIST,并新增初始数据127.0.0.1:6379> LPUSH CITYS 安徽省芜湖市1127.0.0.1:6379> LPUSH CITYS NewYork // 新增数据,返回当前list的长度信息2127.0.0.1:6379> LPUSH CITYS China3127.0.0.1:6379> LPUSH CITYS UN4127.0.0.1:6379> LPOP CITYS // 获取数据UN127.0.0.1:6379> LPOP CITYSChina127.0.0.1:6379> LPOP CITYSNewYork127.0.0.1:6379> LPUSH CITYS NANJING2127.0.0.1:6379> LPOP CITYSNANJING127.0.0.1:6379> LPOP CITYS安徽省芜湖市127.0.0.1:6379> LPOP CITYS // 当前队列没有任何数据,返回空,此处不会阻塞127.0.0.1:6379> LPOP CITYS127.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的方式进行连接,没执行一个命令就会等待上一条命令返回后在执行下一条,即便下一条命令不需要上一条的结果也是如此,这无疑大大浪费了时间,因此使用管道技术,可以一次执行完成,不需要多次执行,避免时间的浪费,这个知识点单独拿出来学习,敬请期待.