摘要:
写请求来了,要更新数据库和缓存,一前一后更新,就可能导致缓存和DB中的数据在一段时间内不一致。 你只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题? 一般来说,就是如果你的系统不是严格要求缓存+数据库必须一致性的话,缓存可以稍微的跟 阅读全文
摘要:
缓存雪崩 简介:缓存同一时间大面积的失效(热点数据同时过期失效或者宕机),所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉。 如果缓存因某种原因发生了宕机,那么原本被缓存抵挡的海量查询请求就会像疯狗一样涌向数据库。此时数据库如果抵挡不了这巨大的压力,它就会崩溃 解决办法: 事前 阅读全文
摘要:
Redis 的并发竞争 Key 问题 也就是多个系统同时对一个 key 进行操作,我们期望的顺序是set 1--> set 2 --> set 3,但是最后执行的顺序set 1--> set 3 --> set 2,和我们期望的顺序不同,这样也就导致了结果的不同! 解决方案是: 第一种: 分布式锁( 阅读全文
摘要:
redis 事务 Redis 通过 MULTI、EXEC、WATCH 等命令来实现事务(transaction)功能。事务提供了一种将多个命令请求打包,然后一次性、按顺序地执行多个命令的机制,并且在事务执行期间,服务器不会中断事务而改去执行其他客户端的命令请求,它会将事务中的所有命令都执行完毕,然后 阅读全文
摘要:
redis 持久化机制(怎么保证 redis 挂掉之后再重启数据可以进行恢复): Redis不同于Memcached的很重一点就是,Redis支持持久化,而且支持两种不同的持久化操作。Redis的一种持久化方式叫快照(snapshotting,RDB),另一种方式是只追加文件(append-only 阅读全文
摘要:
Redis中有个设置时间过期的功能,即对存储在 redis 数据库中的值可以设置一个过期时间。如我们一般项目中的 token 或者一些登录信息,尤其是短信验证码都是有时间限制的。set key 的时候,都可以给一个 expire time,就是过期时间,通过过期时间我们可以指定这个 key 可以存活 阅读全文
摘要:
1. String: set: get: decr: incr: (自增。可以用来做计数器,如果结合expire可以用来限制在一定时间内,访问次数等; 并且多线程调用incr,可以保证同步)。 mget:(一次取得多个key的value) (做了一个测试:存了2500个key-value,用mget 阅读全文