首页 > 科技 > Redis*4 生产环境使用场景

Redis*4 生产环境使用场景


redis 分布式


4.1 redis 锁(如分布式事务锁实现)

分布式事务主要解决的就是同一时间只有一个线程在修改共享资源。所以redis的setnx 加上时间设置完全可以实现分布式事务的问题。(注意控制锁的颗粒度:如 共享资源 绑定的是uid 还是requestId )

代码实现:

# 主要逻辑根据实际业务需求public class RedisLock {    private final static Logger LOGGER = LoggerFactory.getLogger(RedisLock.class);    private CacheService cacheService;    /**     * 加锁     *     * @param key     * @param value 当前时间+超时时间     * @return     */    public boolean lock(String key, String value) {        if (cacheService.opsForValue().setIfAbsent(key, value)) {            return true;        }        String currentValue = cacheService.opsForValue().get(key);        //如果锁过期  解决死锁        if (StringUtils.isNotBlank(currentValue) && Long.parseLong(currentValue) 

注意:

1、操作完成后需要将锁释放。

2、出现异常要及时将锁释放。(如果颗粒度比较大,不释放锁别人都得不到操作权限)。

3、注意颗粒度的选择,绑定的是uid还是requestId。权限过大会影响别的线程操作使用。权限过小容易损耗性能。


4.2 redis的队列(生产/消费模式)


redis queue

实际场景 :

发红包 ---->将红包散列成小红包---->放入队列 。

抢红包时 ---->检查用户权限---->检查红包库存---> 从队列中弹出小红包。

(Redis的单线程操作,完全可以控制红包的小并发问题)。如果要更大并发可以直接将请求放入

MQ 进行异步处理。


4.3 redis session服务器(存储用户信息)

常见的session服务器,实现分布式的基础,实现session共享,实现跨服务,减轻服务端的压力。


redis session


4.4 redis 做数据排行榜(热数据分离)

常见需求TOP10/TOP100排行榜。实现原理可以使用Redis中的有序集合SortSet 完美的实现动态排行榜。(或者可以把热数据直接放入Redis,如:实时美元的汇率,波动不定的价格等)。

4.5、保持变动频率较高的数据,如:计数器(网站访问量),点赞/收藏 等。

4.6、redis的订阅发布模式SUB/PUB。如:网站站内信/实时公告。当然也会有更好的别的中间件替代,这里只是举例子。

订阅--->订阅成功--->监听 。 发布消息message1 。此时订阅该channel的client端都可以接收到消息。


每日一图

本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.sosokankan.com/article/2300565.html

setTimeout(function () { fetch('http://www.sosokankan.com/stat/article.html?articleId=' + MIP.getData('articleId')) .then(function () { }) }, 3 * 1000)