redis

支持复杂数据类型  : key-value, string, list, set, hash table, sorted set,

其他有用特性:            TRANSACTION, SCRIPT

TRANSACTION

WATCH 监视key; 若在事务开始之前key发生改变, 则不进行事务。

UNWATCH 解除监视

MULTI 开始事务

redis command; 注意, 这里只能是一组redis command, 不能夹杂任何数据逻辑。。。 类似于SQL事务中的一组SQL命令

EXEC 执行事务 /  DISCARD 放弃事务

那么,类似需求如何满足呢?  transaction是满足不了这种需求【CAS, check and save】;且这种需求是业务逻辑中非常常见的。。。

if ( db.key > 10) {  ++db.key;  saveTOdb(db.key); }

SCRIPT(lua)

script也能保证原子性。 为了保证原子性(同时也保证主从一致), 内嵌的lua做了修改、去掉随机函数等。

[root@mobile_dev2 src]# cat test2.lua

if redis.call("EXISTS", KEYS[1]) == 1 thenlocal cur = redis.call("GET", KEYS[1])if cur >= ARGV[1] thenreturn redis.call("INCR", KEYS[1])end return cur
elsereturn 0
end

[root@mobile_dev2 src]# ./redis-cli SET XX 5
OK
[root@mobile_dev2 src]# ./redis-cli GET XX
"5"

[root@mobile_dev2 src]# ./redis-cli EVAL "$(cat test.lua)" 1 "XX" 10  # 5>=10 failed,所以输出原值5.
"5"

[root@mobile_dev2 src]# ./redis-cli SET XX 10
OK
[root@mobile_dev2 src]# ./redis-cli GET XX
"10"

[root@mobile_dev2 src]# ./redis-cli EVAL "$(cat test.lua)" 1 "XX" 10
"11"

SCRIPT的键和参数

如上。 redis的lua函数,可以有两个表。 KEYS表 是redis中存的key; ARGV表是存放传入参数的。

命令   lua 脚本 KEYS表长度 逐个的KEYS 逐个的ARGV
./redis-cli EVAL  "$(cat test2.lua)" 1 "XX" 10
           

其他

多个客户端可以并发的发送数据请求, 但redis server在处理这些请求可以看做是单线程的。

redis保证SCRIPT的原子性,处理该脚本时不会有其他command或者SCRIPT在同时被处理;

因此可以保证业务逻辑的正确性。 避免各类数据库中常见的脏数据、旧数据等问题。

如上, 同时必须保证SCRIPT的简单高效; 否则会导致其后的处理请求统统延时。。。

./redis-cli SCRIPT LOAD "$(cat test.lua)"    ###LOAD之后是lua脚本源码。。。

http://www.redisdoc.com/en/latest/

http://www.redisbook.com/en/latest/index.html !!!!!!!!!!!!!!!!!!!

redis lua相关推荐

  1. Java并发:分布式应用限流 Redis + Lua 实践

    任何限流都不是漫无目的的,也不是一个开关就可以解决的问题,常用的限流算法有:令牌桶,漏桶.在之前的文章中,也讲到过,但是那是基于单机场景来写. 之前文章:接口限流算法:漏桶算法&令牌桶算法 然 ...

  2. 秒杀(PHP,Redis,Lua)

    2019独角兽企业重金招聘Python工程师标准>>> 虚拟机测试PHP+Redis与PHP+Redis+Lua性能比较 [root@bogon ~]# redis-cli --ve ...

  3. Redis Lua脚本中学教程(下)

    在中学教程的上半部分我们介绍了Redis Lua相关的命令,没有看过或者忘记的同学可以步行前往直接使用机票Redis Lua脚本中学教程(上).今天我们来简单学习一下Lua的语法. 在介绍Lua语法之 ...

  4. 高并发-【抢红包案例】之四:使用Redis+Lua脚本实现抢红包并异步持久化到数据库

    文章目录 导读 概述 实现步骤 注解方式配置 Redis lua脚本和异步持久化功能的开发 Service层添加Redis抢红包的逻辑 Controller层新增路由方法 构造模拟数据,测试 代码 总 ...

  5. Redis Lua脚本中学教程(上)

    失踪人口回来啦! 有读者问我为什么这么久都没有出Redis Lua中学教程,表示村头厕所已经好久没有纸了.其实我早就要写这篇中学教程了,奈何最近太忙了,就一拖再拖,直到今天我终于又开始动笔了.忘记Lu ...

  6. redis lua 抽奖 PHP,通过redis+lua实现加减库存

    一. 场景 下单后库存校验或者秒杀场景下,有很多利用"锁"的方案来解决问题.但是加锁其实是一件性价比很低的事,所以我们采用用redis+lua的方式来实现这个功能. 二. 思路 阶 ...

  7. redis+lua实现分布式限流

    前言 之前我们谈到的限流解决方案中提到了在分布式环境下,可以使用redis结合lua进行限流,与网关层限流不同的是,基于Redis+Lua的分布式限流属于服务端限流 使用redis做限流原因 在前面的 ...

  8. Redis实现计数器---接口防刷---升级版(Redis+Lua)

    [前言] Cash Loan(一):Redis实现计数器---接口防刷  中介绍了项目中应用redis来做计数器的实现过程,最近自己看了些关于Redis实现分布式锁的代码后,发现在Redis分布式锁中 ...

  9. Redis+Lua+Java

    Java+Redis+Lua Redis在2.6推出了脚本功能,允许开发者使用Lua语言编写脚本传到Redis中执行.使用脚本的好处如下: 1.减少网络开销:本来5次网络请求的操作,可以用一个请求完成 ...

  10. Redis ~ Lua。

    Redis ~ Lua. 文章目录 Redis ~ Lua. 发现问题. Lua 解决. Lua ~ Windows. Hello World. IDE ~ ZeroBrane. 文档. Redis ...

最新文章

  1. c++ primer,友元函数上的一个例子(By Sybase)
  2. 取余运算 C和python的区别
  3. Eclipse 中 SDK无法更新---解决方法
  4. 广域网优化产品的5大应用场景—Vecloud
  5. 如何写一个能被手机打开的C语言小程序,如何用C语言中一些简单的语句做一个小程序,能够输入一个字符就会弹出一句话...
  6. java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.base.BaseSelectProvider.<init>()的问题解决
  7. 各企业正在纷纷向“云”,背后有着哪些原因?
  8. 警告:ORA-00600 2252 错误正在SCN问题下不断爆发
  9. 【华为云•云享专家•原创分享计划上线】原创文章征集,寻找与众不同的你
  10. python卸载_微软再出神器,这次终于对Python下手了!
  11. C++ 头文件系列(iostream)
  12. 系统常用 Intent 合集
  13. 计算机考研英语资料推荐,2016考研计算机专业备考资料推荐
  14. 新媒体时代,内容为王已经走偏
  15. 魔兽世界怀旧服哪个服务器人最多,魔兽世界怀旧服8个服务器人口普查 部落/联盟阵营最新比例...
  16. 电商系统之延长收货与申请退款
  17. ORA-00001: unique constraint (...) violated解决方案
  18. centos linux 修改系统默认语言设置,centos怎么更改语言设置为中文
  19. 正在保存“index.vue”: 从 “‘Vetur‘, ‘ESLint‘“ (configure)中获取代码操作。
  20. 列举详细的数学相关软件:MATLAB为何可以这么强

热门文章

  1. Python 入门建议
  2. 运用神经网络方法找寻集成学习中的最优权重
  3. RobHess的SIFT源码分析:综述
  4. 条件随机场CRF简介Introduction to Conditional Random Fields
  5. 世界围棋人机大战、顶峰对决第一盘:围棋世界冠军Lee Sedol(李世石,围棋职业九段)对战Google DeepMind AlphaGo围棋程序,Google AlphaGo首战告捷
  6. 线性代数:第二章 矩阵及其运算:逆矩阵、分块矩阵
  7. 【python图像处理】tiff文件的保存与解析
  8. 智慧校园“手环考勤”已成为学校常态
  9. 安装好的nginx安装新的模块
  10. 玩转MaxCompute studio SQL编辑器