NoSQL

Redis 使用实战 分布式锁解决秒杀超卖问题

分布式锁应用场景 秒杀环境下:订单服务从库存中心拿到库存数,如果库存总数大于0,则进行库存扣减,并创建订单订单服务负责创建订单库存服务负责扣减库存 模拟用户访问库存 多线程并发访问,出现超卖问题,线程不安全。没有保证原子性 单体锁的分类 单体应用锁指的是只...

详解Redis缓存数据常见问题及解决方法

1.缓存穿透 1.1 问题描述 缓存穿透是在客户端/浏览器端请求一个不存在的key,这个key在redis中不存在,在数据库中也不存在数据源,每次对此key的请求从缓存获取不到,就会请求数据源。 如使用一个不存在的用户id去访问用户信息,redis和数据库...

一文详解Redis中的持久化

1. 前言 为什么要进行持久化?:持久化功能有效地避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据恢复。 持久化都有那些方式?:Redis支持RDB和AOF两种持久化机制。 2. RDB RDB持久化是把当前进程数据生成快照保...

redis stream 实现消息队列的实践

Redis5.0带来了Stream类型。从字面上看是流类型,但其实从功能上看,应该是Redis对消息队列(MQ,Message Queue)的完善实现。 基于redis实现消息队列的方式有很多: PUB/SUB,订阅/发布模式 基于List的 LPUSH+...

Redis实现消息的发布订阅原理分析

一、什么是发布和订阅 Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。 特点:Redis 客户端可以订阅任意数量的频道。 这就好比粉丝们关注了我,当我写完文章发布的时候,你们打开CS...

Redis基本数据类型List常用操作命令

Redis数据类型List操作 在redis里,可以把list巧妙的运用成 栈、队列、阻塞队列等。 一、push 插入元素 1. lpush,在头部插入 将一个值或者多个值,插入到列表的头部。 lpush list onelpush list twolpu...

redis 解决库存并发问题实现数量控制

一、命令 二、常见场景 三、流程图与代码 redis是单进程,阻塞式,在同一时刻只能处理一个请求,后来的请求需要排队等待。 优点:因为是单进程,所以无需处理并发问题,降低 系统复杂度 缺点:不适合缓存大尺寸对象(超过100kb) 原因: 由于Redis只使...

Redis分布式锁详细介绍

分布式锁 在单进程应用中,当一段代码同一时间内只能由一个线程执行时, 多线程下可能会出错,例如两个线程同时对一个数字做累加,两个线程同时拿到了该数字,例如40,一个线程加了10,一个线程加了20,正确结果应该是70, 但由于两个线程在自己的内存中一个算出的...

Redis锁完美解决高并发秒杀问题

1 单机环境下的锁 2 分布式情况下使用Redis锁。 3 一台服务宕机,导致无法释放锁 4 给每一把锁加上过期时间 5延长锁的过期时间,解决锁失效 6 使用Redisson简化代码 场景:一家网上商城做商品限量秒杀。 1 单机环境下的锁 将商品的数量存到...

Redis数据库安装部署及基本操作详解

Redis数据库概述 Redis是一个开源的、使用c语言编写NoSQL数据库,它是基于内存运行并支持持久化,采用key-value(键值对)的存储形式, 是目前分布式结构中不可或缺的 Redis相比于其他数据库的优点 具有极高的数据读写速度:读(11000...

使用Redis实现实时排行榜功能

游戏中存在各种各样的排行榜,比如玩家的等级排名、分数排名等。玩家在排行榜中的名次是其实力的象征,位于榜单前列的玩家在虚拟世界中拥有无尚荣耀,所以名次也就成了核心玩家的追求目标。 一个典型的游戏排行榜包括以下常见功能: 1. 能够记录每个玩家的分数; 2. ...