首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

redis(三)redis锁的使用

不做处理的代码 编写最普通的程序,不考虑任何并发的代码 需求 假定现在有10000库存,访问一次接口库存减1 当库存等于0,返回库存不足 需求分析 因为需要模拟接口访问,所以需要一个web项目,我这里使用的是一个可以运行起来的...redis锁的代码 synchronized确实可以解决库存不一致问题,但是,因为线上服务大部分都是多节点部署,两台或者两天以上的服务器,代码加synchronized肯定是不好使的 所以这里推荐使用redis...锁 redis锁的优势 redis锁基于redis实现 数据存储在内存,操作较快 redis是单线程,安全 修改后的代码 使用setIfAbsent来判断key是否存在 使用expire来设置超时时间...锁主要用作分布式的安全方面,可以通过最后的redis锁测试的结果看出,虽然库存没有减到0,但是安全得到了保障,每个数,只被用了一次 我这是第一次使用StringRedisTemplate(之前都是使用Jedis...),没有踩过太大的坑,所以不敢保障这个redis使用一定正确,但是效果达到了 本文使用的redisUtils,点击下面的阅读原文,即可找着

62710
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Redis BitMap使用

    Redis BitMap ? 概述 ---- 1.BitMap简介 2.BitMap相关指令 3.BitMap使用场景 ?...Redis从2.2.0版本开始增加了setbit、getbit、bitcount等几个bitmap相关命令。...如果Redis key不存在,则自动生成一个新的字符串值。字符串会自动伸展以确保可以将value保存在指定的偏移量上。当字符串值进行伸展时,空白位置以0填充。...因为Redis字符串的大小被限制在512M以内, 如果需要使用比这更大的空间,则必须使用多个key。 通过以下两个指令分别设置offset=0和offset=100的位信息。...第3节 BitMap使用场景 ---- BitMap适用于网站活跃活跃用户统计/用户行为统计等场景。 为了统计今日登录的用户数,使用一个BitMap,每一位标识一个用户ID。

    1.6K10

    redis简单使用

    Redis 比其他 key-value 缓存产品有以下三个特点:Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载到内存使用。...Redis流的出现解决了上述提到的所有问题,它是上述3种数据结构的综合体,具备它们各自的所有优点以及特点,是使用Redis实现消息队列应用的最佳选择。...因为毫秒时间和顺序编号都使用64位的非负整数表示,所以整个流ID的总长为128位,而Redis在接受流ID输入以及展示流ID的时候都会使用连字符-分割这两个部分。...redis> XADD s1 * k2 v2"1663308584308-0"如果用户使用了*作为ID参数的值,但是宿主机器的当前时间比流中已有最大ID的毫秒时间要小,那么Redis使用该ID的毫秒时间来作为新...4) 消费消息需要使用特定命令进行显式确认。Redis将该确认解释为:此消息已正确处理,可以从消费者组中移除。

    1.9K20

    Redis进阶-Redis使用建议一二事

    【推荐】 禁用命令 禁止线上使用keys、flushall、flushdb等,通过redis的rename机制禁掉命令,或者使用scan的 方式渐进式处理。...【推荐】合理使用select redis的多数据库较弱,使用数字进行区分,很多客户端支持较差,同时多业务用多数据库实际还是单线程处理,会有干扰。...2. pipeline可以打包不同的命令,原生做不到 3. pipeline需要客户端和服务端同时支持 【建议】Redis事务功能较弱,不建议过多使用,可以用lua替代 客户端使用 【推荐】...避免多个应用使用一个Redis实例 正例:不相干的业务拆分,公共数据做服务化。...【推荐】 使用带有连接池的数据库,可以有效控制连接,同时提高效率,标准使用方式: import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool

    33230

    Redis使用指南

    设置过期时间、释放资源 使用Redis做K-V存储,一定要注意过期时间的把控,任何K-V的存储都要设置过期时间,不管多长时间。...一般在封装Redis操作工具类时提供默认使用系统公共超时时间的操作API,避免新手在使用时不设置过期时间,导致内存的浪费。...另外,通过连接池 Jedis jedis = JedisPool.getResource(); 这样获取Redis连接最好使用try/finally块,并且在finally块中调用 jedis.close...怎么解决,可以对更新缓存的操作加锁,使用synchronized吗?不行,因为生产上是分布式部署的,需要使用redis分布式锁。...Redis分布式锁需要特别注意的点就是锁的过期时间,如,使用redis的setnx命令,设置成功即表示拿到锁,然后设置过期时间,命令执行失败的线程表示获取锁失败。

    61130

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券