Redis扫盲

Redis:

一个开源的高性能的基于键-值(key-value存储的内存数据库 ;
支持多种类型的数据结构 string、list、hash、set、sorted set 等。
键值Key是唯一的,放在字典里面。对数据库的增、删、查、改操作都是构建在对字典的操作之上。
Redis使用C语言开发,5.6+万行代码(v3.0.3)。


优点:
异常快 - Redis非常快,每秒可执行大约110000次的设置(SET)操作,每秒大约可执行81000次的读取/获取(GET)操作。
支持丰富的数据类型 - Redis支持开发人员常用的大多数数据类型,例如列表,集合,排序集和散列等等。这使得Redis很容易被用来解决各种问题,因为我们知道哪些问题可以更好使用地哪些数据类型来处理解决。
操作具原子性 - 所有Redis操作都是原子操作,这确保如果两个客户端并发访问,Redis服务器能接收更新的值。
多实用工具 - Redis是一个多实用工具,可用于多种用例,如:缓存,消息队列(Redis本地支持发布/订阅),应用程序中的任何短期数据,例如,web应用程序中的会话,网页命中计数等。

存储结构:


持久化保存文件的两种方式:

一、RDB
可以在指定的时间间隔内生成数据集的时间点快照。
save 900 1 #15分钟内修改1次
save 300 10 #5分钟内修改10次
save 60 10000 #1分钟内修改10000次
二、AOF
 记录服务器执行的所写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。
appendonly no #AOF日志开关,默认关闭


符合一定条件时Redis会自动将内存中的所数据进行快照并存储在硬盘上。进行快照的条件可以由用户在配置文件中自定义,由两个参数构成:时间和改动的键的个数。当在指定的时间内被更改的键的个数大于指定的数值时就会进行快照。RDB是Redis默认采用的持久化方式,在配置文件中已经预置了3个条件;
可以存在多个条件,条件之间是“或”的关系,只要满足其中一个条件,就会进行快照。 如果想要禁用自动快照,只需要将所有的save参数删除即可。

慢日志是 Redis 用来记录查询执行时间的日志系统

SLOWLOG get 5 #慢日志查询


默认记录耗时超过10毫秒
config get slowlog-log-slower-than
默认保存慢日志条数128
config get slowlog-max-len

Redis主从模式

redis 支持 master-slave(主从模式,redis server 可以设置为另一个 redis server 的主机(从机,从机定期从主机拿数据。特殊的,一个 从机同样可以设置为一个 redis server 的主机,这样一来master-slave 的分布看起来就是一个有向无环图 DAG,如此形成 redis server 集群,无论是主机还是从机都是 redis server,都可以提供服务。

从属服务器自己制定谁是自己的主服务器
配置方法是在从机的配置文件中指定slaveof参数为主机的ip和port
slaveof 10.120.241.38 6851 #主服务器
slave-read-only yes #从属服务器只读

一个master可以多个slave。
一个slave可以接收其他slave的链接,即不仅仅能连接一个master所属的slaves,而且能连接到slave的slave,从而形成了“图”结构。
在复制进行时,master是“非阻塞”的。即一个或多个slave对master进行第一次同步时,master仍然可以提供查询服务,而对于slave,当复制进行时则是“阻塞”的,期间slave不能响应查询。
复制可以用于提高数据的扩展性(比如多个slave用于只读查询,或者仅用于数据备份。
使用复制可以避免在master存储数据,通过修改redis.conf文件(将“save”的al注释,这样数据存储只在slave端进行。


如果当前服务器已经是某个主服务器(master server)的从属服务器,那么执行 SLAVEOF host port 将使当前服务器停止对旧主服务器的同步,丢弃旧数据集,转而开始对新主服务器进行同步。
另外,对一个从属服务器执行命令 SLAVEOF NO ONE 将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集不会被丢弃。
利用『 SLAVEOF NO ONE 不会丢弃同步所得数据集』这个特性,可以在主服务器失败的时候,将从属服务器用作新的主服务器,从而实现无间断运行。


Redis哨兵模式

sentinel是redis高可用性的解决方案,由一个或多个sentinel实例组成的系统,主要大功能: 

监控,能持续监控Redis的主从实例是否正常工作;
通知,当被监控的Redis实例出问题时,能通过API通知系统管理员或其他程序; 
自动故障恢复,如果主实例无法正常工作,Sentinel将启动故障恢复机制把一个从实例提升为主实例,其他的从实例将会被重新配置到新的主实例,且应用程序会得到一个更换新地址的通知。 

Redis Sentinel是一个分布式系统,可以部署多个实例来监控同一组Redis实例,一般在生产环境中部署多个实例来提高系统可用性,只要有一个Sentinel实例运行正常,就能保证被监控的Redis实例运行正常(类似Zookeeper,通过多个Zookeeper来提高系统可用性;

port 26379 #sentinel 端口
bind 10.162.66.152 26379 #sentinel 地址
sentinel monitor master_6379 10.162.66.152 6380 1 #监控的master
sentinel down-after-milliseconds master_6379 5000 #master最大响应时间

Redis实际应用
与oracle的数据一致性保持
新增操作:首先保存到oracle,然后保存到redis;
查询操作:首先查询redis,查找不到时,从oracle中查询,并将结果保存到redis;
修改操作:删除redis数据,修改oracle数据,再保存到redis;
删除操作:删除redis数据,再删除oracle数据。

考虑到性能,目前redis不进行持久化,因此数据以oracle为准,增删改查操作都要保证oracle数据准确。

转载于:https://www.cnblogs.com/imhero0314/p/6844517.html

猜你喜欢

转载自blog.csdn.net/weixin_34167819/article/details/93714188