1、为什么用redis
(1) 提升数据的响应速度
(2) 减轻关系型数据库的压力
Redis的执行流程
当用户要来操作数据时直接连接数据库进行查询然后展示,相同的数据也需要再进行数据库的查询,对于大数据量的并发访问,会给数据造成距大的压力。
为了减轻数据库的压力,使用了这种非关系型数据库(nosql数据库)redis
当用户第一次访问时,首先访问redis,redis中如果没有数据再去查询数据库,当查询完数据库后,先将数据存放到redis中,然后再返回给用户。
当用户第二次访问的时候还是去访问redis,此时redis中有数据,这时就不需要再次去查询数据库了。
第一次查询,此时redis中有了数据,如果对DB中的数据产生了更新
第二次查询的时候以为redis中已经有了数据,那么就会直接返回,但是问题发生了,db与redis中的数据不同步
此时需要清除redis中的数据
当数据库发生数据改变的时候清空redis
这就是缓存同步:解决nosql数据库与关系型数据库不同步的问题
Redis有五种数据类型
String key value 有一种特殊的写法可以实现数据的分类使用冒号分隔
Clothes:裤子 100
Clothes:风衣 100
Hash key field value key后面跟了个map map中是field value 完成数据归类的操作 存值hset key field value 取值hget key field
List 有序 数据可重复
右压栈–以中心点的位置向右添加 rpush lrange key 0 -1取所有
左压栈–以中心点的位置向左添加 lpush lrange key 0 -1取所有
Set 无序不可重复
存值 sadd key value
取值 smembers key
SortedSet有序不可重复(可以做排行榜信息)
额外的一些对key操作的命令
Expire 设置过期时间,以秒为单位
Ttl 查看某一个key的状态 状态值为-1为持久化状态 -2为key不存在
Persist将某一个key转换为持久化状态
仅适用于linux
Redis的前台启动 redis-server
Redis的后台启动 修改redis.conf中的属性daemonize 改为yes输入redis-server redis.conf完成后台启动
一个单机的redis默认会存在16个数据库 也可以在redis.conf中修改
./redis-cli --raw 客户端连接可以显示中文
在进行连接的时候默认连接的是0号数据库,在同一个数据库中key是不可以重复的,重复的话就会发生值覆盖,在不同的数据库中key是可以重复的,使用select 1命令进行数据库的切换
Redis的持久化策略是对redis内部数据整体的持久化(产生缓存文件,记录信息,缓存文件存放到磁盘中)
1、RDB默认开启的持久化,快照的形式进行记录,dump.rdb。默认存在三种触发条件save 900 1在900秒内如果有1个key发生改变就会触发RDB进行数据存放 save 300 10 在300秒内10个可以发生改变会触发RDB,save 60 10000 60秒内至少有10000个可以发生改变会触发RDB
2、AOF需要手动开启,在redis.ocnf文件中的appendonly属性做修改,当开启后会每秒进行磁盘的写操作,记录的不是单独的数据,会记录所有对redis 的添加、修改、删除的命令。Appendonly属性改为yes 会生成appendonly.aof文件。默认开启每秒记录 appendfsync everysec模式
两种持久化策略是可以同时开启的,但是AOF的优先级高于RDB
Aof的数据安全性高于RDB,但是运行速度低于RDB,建议不开启AOF
Redis集群
在redis3.0版本以后可以直接使用,redis集群中的服务器节点之间是相互联通的,当用户访问集群的节点时,无需关注连接的是哪一个节点,只需要连接集群中任意的节点就可以获取到整个集群的数据
Redis集群数据的存放:0-16383的槽值,当设置值时,根据key计算该key的值,这个值肯定是在0-16383的范围内,根据计算得到的值确定该key的数据存放到哪一个节点中。Key的值可能是相同的。
Redis集群默认有一个投票机制,当集群超过半数的节点认为某一节点已经挂了,那么不管该节点是否挂掉投票结束后就真的挂了,所以一般都是基数个服务器为了实现投票机制。
主从备份:给集群中每一个节点额外搭建一个备份机,为了完成整个集群的高可用,主节点叫master,从节点叫slave。Master对外提供服务,slave实时的做两件事,第一就是同步主节点的数据,第二就是向主节点发送心跳包保证主节点的存活。当主节点无回应时slave变为主节点向外提供服务。
基于(心跳检测机制)keepalived搭建完主从备份后,在用户进行连接时,会在用户和服务之间搭建一个虚拟IP,用户直接连接虚拟IP(VIP),VIP连接master实现用户的间接连接,当master发生问题时,VIP会转接到slave上