Redis缓存问题:
1 .缓存直通是指查询一定不存在的数据。 由于缓存是在未命中时被动写入的,因此从容错角度看,如果从存储层中找不到数据,则不会写入缓存。 因此,不存在的数据将在每次请求时查询存储层,从而导致缓存失去意义。 如果流量较大,DB可能会挂起。 如果有人利用不存在的key频繁攻击我们的APP,这是漏洞。 2 .高速缓存雪崩是指,由于我们设置高速缓存时采用了相同的有效期限,在某一时刻高速缓存同时失效,请求全部传送给DB,DB的瞬时压力过重的雪崩。 某些设置了过期日期的key在某些时刻可能会被超高并发访问时,是非常“热点”的数据。 此时,需要考虑缓存被“破坏”的问题。 这与缓存雪崩的区别在于,相对于某个key缓存,前者是更多的key。Redis缓存的限制:
内存限制单点故障
Redis集群: 解决单点故障问题
设置主从主机:主主机不需要添加特殊配置的redis-server redis.conf从主机: slaverslaveof主机的地址连接端口号。 例如,如果slaveof 127.0.0.1 6379主从设备位于同一设备上,则还必须注意端口号冲突。 将端口更改为6380哨兵: sentinelsentinel是哨兵,负责监控主服务器的运行情况。 如果主服务器关闭,从服务器中选择主服务器Port 26379 Sentinelmonitormymaster 127.0.0.16379向主机启动哨兵
spring : redis : lettuce : pool : max-active :10 min-idle :3 max-wait :10000 sentinel 3360 nodes 3360-127 27
1、数据库向主数据库发送sync命令2、主数据库接收到sync命令后,执行BGSAVE命令(保存快照)生成RDB文件,并编写RDB文件中的帧当主数据库执行BGSAVE时,从数据库接收并加载该文件4,同时从数据库发送RDB文件。主数据库向从服务器发送缓冲区中的所有写入命令。5、处理
Redis的瓷砖承担着两个主要目标。
1 .使用许多计算机的总内存以支持更大的数据库。 如果没有分片,则仅限于单功能支持的内存容量2。 可以将计算能力扩展到多核或多服务器。 将网络带宽扩展到多服务器或多网络适配器范围的片的替代方案是散列片。 此模式是哪个密钥散列插槽设置key---- hashcode---16384http://www.Sina.com /
1、RDB:redis数据库,快照。 默认情况下,Redis将数据快照保存到磁盘上的二进制文件中,文件名为dump.rdb。 如果数据集内每n秒有m次以上的更新,则可以配置Redis持久性策略,包括将数据写入磁盘。 或者,也可以手动调用命令SAVE或BGSAVE。
在Springboot中的配置应用
Redis是一个使用fork函数复制当前进程(父进程)副本的子进程,它开始向临时RDB文件写入数据。 子进程完成写入RDB文件后,Redis可以通过用新文件替换旧文件来使用写入时复制技术。 2、AOF:Append Only File。 快照模式不是很可靠,如果系统关闭或Redis意外落入kill,最后写入Redis的数据将会丢失。 对于某些APP应用程序来说,这可能不是一个大问题,但对于要求高可靠性的APP应用程序来说,Redis不是一个理想的选择。 Append-only文件模式是另一种选择。 可以在配置文件中打开AOF模式
Redis提供了三种同步策略:每秒同步、每次更改同步和异步。 事实上,每秒同步也是异步的,而且效率非常高,如果发生停机,在这一秒钟内更改的数据将会丢失。
3、虚拟内存方式。 如果key小而value大,则使用VM会很有效,因为它节省大量内存。 当key不小时,可以考虑使用一些非常方法将大的key设置为大的value,也可以考虑将key/value组合为新的value。
名为vm-max-threads的参数可以设置访问swap文件的线程数。 请不要超过机器的核心数。 如果设置为0,则对swap文件的所有操作都是串行的。 虽然可能会导致相对长的延迟,但数据完整性很好。 用虚拟内存确保性能也很好。 如果数据量很大,请考虑分布式和其他数据库
redis.wind
ows.confdaemonize no默认情况下redis不是作为守护进程运行的,如果想让它在后台运行,就把它改成yes。当redis作为守护进程运行的时候,它会写一个pid到/var/run/redis.pid文件里面 port 6379监听端口号,默认为6379,如果设为0,redis将不在socket上监听任何客户端连接。 tcp-backlog 511设置TCP监听的最大容纳数量。在高并发的环境下,需要把这个值调高以避免客户端连接缓慢的问题。Linux内核会把这个值缩小成/proc/sys/net/core/somaxconn对应的值,所以要修改这两个值才能达到你的预期。 bind 192.168.1.100 10.0.0.1默认情况下,redis在server上所有有效的网络接口上监听客户端连接。如果只想让它在一个网络接口上监听,那就绑定一个IP或者多个IP。多个IP用空格隔开 timeout 0指定在一个client空闲多少秒之后关闭连接(0就是不管它) loglevel notice定义日志级别。可以是:debug适用于开发或测试阶段、verbose类似debug信息但是内容更少些、notice适用于生产环境、warning仅仅一些重要的消息被记录将redis安装为服务的命令redis-server --service-install redis.windows-service.conf --loglevel verbose启动服务net start Redis
redis持久化机制:
snapshot—RDB
对应的快照文件为dump.rdb
Redis事务
redis事务是通过MULTI,EXEC,DISCARD和WATCH四个原语实现的。
使用Redis实现分布式锁:
申请加锁操作:
抢购、秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个:
1、高并发对数据库产生的压力2、竞争状态下如何解决库存的正确减少("超卖"问题)对于第一个问题,已经很容易想到用缓存来处理抢购,避免直接操作数据库,例如使用Redis。
Redis使用watch完成秒杀抢购功能:
使用redis中两个key完成秒杀抢购功能,mywatchkey用于存储抢购数量和mywatchlist用户存储抢购列表。