- 0.1:Nosql特点
- 0.2:Nosql分类
- 0.3:redis基本知识
- 0.4:五种基本数据结构
- 0.5:三种特殊数据类型
- 0.6:redis实现乐观锁
- 0.7:redis持久化
Redis
Nosql特点
2、大数据量高性能(Redis一秒写入8万,读区11万,Nosql的缓存记录级,是一种细粒度 的缓存)
3、数据类型多样(不需要提前设计)
Nosql分类
键值类型:Key指向value的键值对,通常用hash table来实现
列存储数据库:以列簇存储,将同一列数据存在一起
文档型数据库:Key-Value对应的键值对,Value为结构化数据
图形数据库:图结构
redis基本知识
redis默认有16个数据库,默认使用第一个数据库,可以使用select [编号]
来切换数据库
五种基本数据结构
1.String
2.List
3.Set
4.Hash
5.Zset
三种特殊数据类型
1.Geospatial
存储城市地理位置经纬度;
计算两个位置之间直线距离;
查找我(自己经纬度位置)附近的指定半径之内的附近的人;
2.Hyperloglog
3.Bitmap
redis实现乐观锁
使用watch监视实现乐观锁
-
multi,开启redis的事物
-
exec,提交事务执行从multi到此命令前到命令队列
-
discard,取消事务,置客户端为非事物态
-
watch,监视键值对,作用时,如果事务提交exec时发现监视的监视对发生变化,事务将被取消
Redis事务
Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端送来的命令请求打断。
Redis事务的作用就是串联多个命令
防止别的命令插队。
事务的三个命令:
1.multi
2.exec
3.discard
组队当中的某一个命令失败,整个队列命令都会取消
组队没有失败,但是执行时候失败了,只有失败命令取消
redis事务三大特性:
-
单独的隔离操作
-
没有隔离级别的概念
-
不保证原子性操作
redis并发情况下连接超时可通过连接池解决
悲观锁和乐观锁
悲观锁:认为很悲观,每次去拿数据的时候都认为别人回修改,所以每次都会在拿数据的时候上锁,这样别人想拿数据的时候就会阻塞,直到她拿到锁。
在关系型数据库当中就用到了这种锁机制,如行锁,表锁等,读锁,写锁等,都是在操作之前先上锁
乐观锁:乐观锁是相对悲观锁而言的,乐观锁假设数据一般情况不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果冲突,则返回给用户异常信息,让用户决定如何去做。乐观锁适用于读多写少的场景,这样可以提高程序的吞吐量。
redis持久化
1.RDB
概念:在指定的时间间隔内将内存中的数据集快照写入磁盘
原理:redis会单独创建一个子线程进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结速了,再用这个临时文件替换上次持久化好的文件,整个过程中,主线程不用进行任何的IO操作,这就确保了极高的性能,如果需要大规模数据恢复,且对于数据的完整性不是很敏感,那么RDB方式要比AOF方式高效
缺点:最后一次持久化的数据可能会丢失
优点:
-
适合大规模的数据恢复
-
对完整性和一致性要求不高的
-
节省磁盘空间
-
恢复速度快
劣势:
-
fork时候,内存中数据被克隆了一份,所以需要二倍的内存空间需求
-
虽容redis采用了写时拷贝技术,但是数据量大时候还是很费性能
-
在备份周期的一定时间间隔内做一次备份,如果在这个时间间隔内redis退出,数据将会丢失
2.AOF
概念:
以日志的形式来记录每个写操作,不记录读操作,将redis执行过的所有指令记录下来,只许追加文件,不许改写文件,redis启动之初会读取文件重新构建数据
如果RDB和AOF同时开启,默认使用AOF恢复数据,因为AOF不会存在数据丢失
异常恢复
1.如果遇到AOF文件损坏,可以先停止redis
2.然后通过Redis-check-aof --fix appendonly.aof
命令进行修复
3.然后重新启动即可
AOF同步频率设置
appendfsync always
始终进行同步,每次redis写入都会立刻计入日志,但是性能较差,完整性好
appendfsync everysec
每秒同步,每秒计入日志一次,如果宕机,本秒数据可能丢失
appendfsync no
redis不主动进行同步,把同步时机交给操作系统
重写追加操作
AOF采用文件追加方式,文件会越来越大,为了避免出现此操作,新增了重写机制,当AOF文件的大小超过所设定的阀值,redis就会启动AOF文件内容压缩,只保留可以恢复数据的最小指令集,
例如
set test 1 set test2 2
只记录最终结果set test 1 test2 2
优点
-
备份机制更稳定,丢失数据概率更低
-
可读的日志文件,通过操作AOF文件,可以处理误操作
劣势
-
比起RDB占用更多对磁盘空间
-
恢复备份速度慢
-
每次读写都同步,需要一定压力