Redis和MySql数据同步以及Redis使用场景
Redis和MySql的数据同步是我们开发中经常遇到的问题,怎么实现Redis和MySql之间的数据同步?
实际开发中我们经常采用如下方式实现Mysql和Redis数据同步:
当我们对MySQL数据库进行进行增删改的时候,我们在增删改的service层将缓存中的数据清除,用户请求过来的时候会先去缓存中查询数据,如果缓存中没有要查询的数据则去数据库中查询,然后将查询的结果放入缓存中并设置一个有效期,这个时候缓存中的数据就是最新的数据。
Redis使用场景:
1、热点数据的缓存
因为Redis访问速度块、支持的数据类型比较丰富,所以Redis很适合用来存储热点数据,另外我们可以设置数据过期时间,及时的更新缓存数据,这个使用场景非常的常见。
2、计数器
因为Redis的incrby命令可以实现原子性的操作,所以可以在高并发的秒杀活动中通过Redis的incrby命令控制库存、也可以它来控制接口的访问次数。
3、定时器
因为redis可以设置数据的有效期,我们可以把一些有时效性的数据放入redis.例如验证设置过期时间等
4、分布式锁
多个系统在Redis中set同一个key,只有key不存在的时候,才能设置成功,并且该key会对应其中一个系统的唯一标识,当该系统访问资源结束后,将key删除,则达到了释放锁的目的。在实现的时候要注意的几个关键点:
1、锁信息必须是会过期超时的,不能让一个线程长期占有一个锁而导致死锁;
2、同一时刻只能有一个线程获取到锁。
几个要用到的redis命令:
setnx(key, value):“set if not exits”,若该key-value不存在,则成功加入缓存并且返回1,否则返回0。
get(key):获得key对应的value值,若不存在则返回nil。
getset(key, value):先获取key对应的value值,若不存在则返回nil,然后将旧的value更新为新的value。
expire(key, seconds):设置key-value的有效期为seconds秒。