Redis.docx
- 文档编号:3442694
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:11
- 大小:1.52MB
Redis.docx
《Redis.docx》由会员分享,可在线阅读,更多相关《Redis.docx(11页珍藏版)》请在冰豆网上搜索。
Redis
Redis入门
1.Redis是一个内存数据库。
他和其他关系型数据库以及非关系型数据库的区别:
2.Redis具体持久化功能,一种是定时持久化一种是每执行一次命令就持久化相应内容。
3.对软件中临时表的使用,可以使用redis来处理,因为他的update速度更快
4.Redis所支持的数据结构类型
5.各个类型命令
(1)String
例子:
Stirng的value支持下面三种类型:
对Integer和Float类型可以进行increment和decrement
方法如下:
对应String如果可以转换为Integer和float,那么也会参与运算,如果是empty则默认为0参与运算。
此外String有类似java中的String操作命令:
例子:
(2)List
此外还有LPUSH/PPOP
例子:
(3)Set里面值不重复
其中当数据很大的时候SMEMBERS谨慎使用。
例子:
(4)Hash
例子:
(5)ZSetsortedSet
存入仍然为key和value其实key是唯一的,value是float类型数字
其中value就是score是排序的依据。
此外key可以就是Hash中的key,能取出hash中对于key的value(可以测试看)。
例子:
(6).web应用中redis的使用案例
1)登录token场景的使用,将用户名信息放入redis
2)webpage缓存(机票查询缓存?
)
3)电商中对浏览过的记录进行实时缓存。
(7).订阅和发布(subscribe/publish)
(8).基础的Redis事务
WATCH,MULTI,EXEC,UNWATCH,DISCARD提供不中断操作
(9).过期相关指令
10.数据持久化
时间段的片段存储:
就是到点将前一个时间点的段的数据存储到disk。
有四个相关的方法:
BGSAVE,SAVE,SHUTDOWN,SYNC
存储文件是配置文件的dbfilename路径是dir
文件追加式存储:
在文件中进行每次追加方式存储。
在配置文件appendonly属性为yes时候开启,可以设置appendfsync来进行同步操作来确保数据写入文件。
当是固定硬盘的时候SSD需要注意appendfsync的问题。
命令BGREWRITEAOF使file根据要求适当变小。
11.复制:
配置:
當slave鏈接到master,則master將啟動BGSAVE操作,需要配置好dir和dbfilename
兩個參數。
Salve端的设置:
slaveofhostport表示链接到的master服务器
这个可以作为命令进行切换新master服务器。
如果停止从master服务器更新数据则用命令
SLAVEOFnoone.
Slave可以挂Slave模式:
12:
系统出错处理
(1)检查snapshots和append-only文件
可以通过redis-check-aof和redis-check-dump两个命令
13.事务
关系型数据库的事务是指执行一系列更新等操作,在事务开始前,然后最后执行commit才都有效,如果执行rollback则放弃操作。
而Redis的事务,通过特定命令MULTI来表示后续要连续执行一系列命令。
传递一系列命令后执行EXEC。
和关系数据库的区别,理解下来是Redis的每执行一次命令,都会真的影响到数据。
而关系数据库,每次执行在commit之前都没有真的改变数据。
那么问题来了如何保证当某个数据被执行的生活,其他客户端不能更新当前数据呢?
可以通过WATCH命令来保证。
而UNWATCH则在WATCH之后和MULTI之前取消WATCH。
DISCARD则是在MULTI之前,EXEC之后,若有未执行的命令则就取消。
一般DISCARD会破坏整体的事务性,一般用的不多。
锁:
乐观锁(OptimisticLocking)相对悲观锁而言,乐观锁机制采取了更加宽松的加锁机制。
悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性。
但随之而来的就是数据库性能的大量开销,特别是对长事务而言,这样的开销往往无法承受。
而乐观锁机制在一定程度上解决了这个问题。
乐观锁,大多是基于数据版本(Version)记录机制实现。
何谓数据版本?
即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表增加一个“version”字段来实现。
读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。
此时,将提交数据的版本数据与数据库表对应记录的当前版本信息进行比对,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。
在关系型数据库基本是悲观锁,而Redis的锁则是乐观锁。
在WATCH期间,Redis不会锁住任何数据,相反任何数据先被修改,这Redis将通知所有clients
通过事务操作能保证数据的一致性,那么性能要就要开销了,可以通过pipe里面放入多个命令进行非事务的批量执行则可以提高效率。
当Redis出现性能问题就需要分析哪个命令执行时间太长,可以通过redis-benchmark命令来分析。
通过SETNX命令可以获得当前锁,来进行人工加锁,不过从性能上,还是建议使用基于WATCH的自动加锁
为了防止死锁,Redis的锁设有Timeout功能,可以通过EXPIRE命令来进行设置,此外如果没有人工设置,当client获取锁失败后,都会为其设置timeout时间
countingsemaphore是另外一种类型的锁,他表示可以并行同时访问某个资源的process数量。
感觉这个类似于数据库连接池。
14.Autocomplete样例
Autocomplete最近联系人
分析下来,完成该功能需要三步
第一步:
如果当前联系人存在,则删除当前联系人
第二步:
将当前最新的联系人加入到List最前面
第三步:
删除超过100条的数据
对应Redis可以通过LREM,LPUSH,LTRIM三个命令进行,通过MULTI/EXEC来保证一个事务
15.任务队列
所谓队列,这里和消息队列不同,redis指一串操作放入List作为执行.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Redis