redis lua
来源:互联网 发布:c语言标准库 编辑:程序博客网 时间:2024/06/06 17:50
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 then local cur = redis.call("GET", KEYS[1]) if cur >= ARGV[1] then return redis.call("INCR", KEYS[1]) end return cur else return 0end
[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表是存放传入参数的。
其他
多个客户端可以并发的发送数据请求, 但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 !!!!!!!!!!!!!!!!!!!
- lua-redis
- redis lua
- redis lua
- lua操作redis
- redis-lua安装笔记
- nginx+lua+redis
- Nginx+Lua+Redis实例
- Redis Lua Script Practice
- nginx+lua+redis 使用方法
- lua语言连接redis
- nginx+lua+redis安装
- nginx+lua+redis搭建
- nginx+lua+redis
- Nginx+Lua访问Redis
- 安装openresty+redis+lua
- Redis Lua脚本原理
- redis lua and nodejs
- nginx + lua + redis
- Linux Kernel系列 - VFS核心数据结构
- HTTP响应
- float:left却不在最左边的原因之一
- POJ 2386 Lake Counting (DFS)
- 基于WinCE 5.0环境项目开发心得总结
- redis lua
- 进程调度子系统(3)完全公平调度类CFS
- jquery之stop()的用法
- 第一周作业
- nstimer,nsrunloop,nsthread,nstask
- Android应用程序永久获取root权限方法
- PL/SQL之模块化应用程序开发
- CString ,BSTR ,LPCTSTR之间关系和区别
- asp.net中iframe框架自适应高度的一种解决方法