码迷,mamicode.com
首页 > 其他好文 > 详细

redis原子性读写操作

时间:2016-11-24 14:14:58      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:com   执行   integer   mic   并发   let   比较   库存   服务器   

  最近在开发电商平台的子系统——储值卡系统,系统核心业务涉及到金额消费以及库存控制,因此为了解决建立在内存上高并发情况下的事务控制,使用了spring封装的RedisTemplate执行lua脚本进行原子性操作,确保金额消费,库存按顺序处理,解决资源争抢。

  

  1.使用lua脚本

  Redis 使用单个 Lua 解释器去运行所有脚本,并且, Redis 也保证脚本会以原子性(atomic)的方式执行:当某个脚本正在运行的时候,不会有其他脚本或 Redis 命令被执行。这和使用 MULTI / EXEC 包围的事务很类似。在其他别的客户端看来,脚本的效果(effect)要么是不可见的(not visible),要么就是已完成的(already completed)。

  另一方面,这也意味着,执行一个运行缓慢的脚本并不是一个好主意。写一个跑得很快很顺溜的脚本并不难,因为脚本的运行开销(overhead)非常少,但是当你不得不使用一些跑得比较慢的脚本时,请小心,因为当这些蜗牛脚本在慢吞吞地运行的时候,其他客户端会因为服务器正忙而无法执行命令。

 

  2.实现watch机制

  

  MULTI

  标记一个事务块的开始。

  事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令原子性(atomic)地执行。

  例子:

  

  redis> MULTI            # 标记事务开始
  OK

  redis> INCR user_id     # 多条命令按顺序入队
  QUEUED

  redis> INCR user_id
  QUEUED

  redis> INCR user_id
  QUEUED

  redis> PING
  QUEUED

  redis> EXEC             # 执行
  1) (integer) 1
  2) (integer) 2
  3) (integer) 3
  4) PONG

redis原子性读写操作

标签:com   执行   integer   mic   并发   let   比较   库存   服务器   

原文地址:http://www.cnblogs.com/cl2Blogs/p/6097206.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!