当前位置: 首页 > wzjs >正文

简单库存管理免费软件seo查询百科

简单库存管理免费软件,seo查询百科,企业自建网站的优势,湖北建设银行招标在哪个网站看1. 对比Lua脚本方案与Redis自身事务 对比表格 对比维度Redis事务(MULTI/EXEC)Lua脚本方案原子性事务命令序列化执行,但中间可被其他命令打断,不保证原子性Lua脚本在Redis单线程中原子执行,不可中断计算能力仅支持Red…

1. 对比Lua脚本方案与Redis自身事务

对比表格
对比维度Redis事务(MULTI/EXEC)Lua脚本方案
原子性事务命令序列化执行,但中间可被其他命令打断,不保证原子性Lua脚本在Redis单线程中原子执行,不可中断
计算能力仅支持Redis内置命令,无法复杂计算支持Lua脚本,可实现复杂逻辑运算
性能需多次网络交互,性能较低通过SHA1复用脚本,减少网络传输,性能更高
适用场景简单命令序列化执行需要原子性且涉及复杂计算的场景

2. 两种运行Lua脚本的方法示例

方法1:直接发送Lua脚本(不缓存)
  
-- Lua脚本:将key1的值加1,并返回新值  
local value = tonumber(redis.call('GET', KEYS[1]))  
redis.call('SET', KEYS[1], value + 1)  
return value + 1  

Java代码:

  
// 直接执行Lua脚本,每次传递脚本内容  
RedisScript<Long> script = new DefaultRedisScript<>(  "local v=tonumber(redis.call('GET', KEYS[1])); " +  "redis.call('SET', KEYS[1], v+1); return v+1", Long.class);  
Long result = redisTemplate.execute(  script, Arrays.asList("key1"), new Object[]{});  
方法2:先缓存SHA1后调用
  
-- 先执行以下脚本缓存到Redis  
// 第一次执行时缓存脚本  
String script = "...(同上)...";  
String sha1 = redisTemplate.execute(new DefaultRedisScript<>(script, Object.class)).getSha();  // 获取SHA1  // 后续调用时仅传SHA1和参数  
redisTemplate.execute(  new DefaultRedisScript<Long>(sha1, Long.class),  Arrays.asList("key1"), new Object[]{});  

3. RedisScript接口及子类详解

RedisScript接口方法说明
方法名作用描述
getSha()返回脚本的SHA1哈希值(若已缓存)
getArgsCount()返回脚本需要的参数数量
getNumberParams()是否需要参数(已废弃,建议用getArgsCount()
getBody()返回脚本的原始内容(若未缓存)
DefaultRedisScript类
  • 构造方法

    
    new DefaultRedisScript<>(scriptContent, returnType); // 传入脚本内容  
    new DefaultRedisScript<>(sha1, returnType);         // 传入SHA1  
    
  • 关键方法

    
    // 设置脚本内容  
    script.setScriptText("lua script content");  
    // 设置SHA1(需确保脚本已缓存)  
    script.setSha("computed_sha1");  
    // 设置参数数量  
    script.setArgsCount(2);  
    

4. RedisTemplate的execute()方法对比

方法1:默认序列化器
  
// 使用默认序列化器(如StringRedisSerializer)  
public <T> T execute(RedisScript<T> script, List<K> keys, Object... args) { ... }  // 示例:执行计数器脚本  
RedisScript<Long> script = new DefaultRedisScript<>(  "return tonumber(redis.call('INCR', KEYS[1]))", Long.class);  
Long result = redisTemplate.execute(  script, Arrays.asList("counter_key"), new Object[]{});  
方法2:自定义序列化器
  
// 自定义参数和结果的序列化方式  
public <T> T execute(RedisScript<T> script,  RedisSerializer<?> argsSerializer,  RedisSerializer<T> resultSerializer,  List<K> keys, Object... args) { ... }  // 示例:处理JSON参数和结果  
RedisScript<MyObject> script = ...;  
MyObject result = redisTemplate.execute(  script,  Jackson2JsonRedisSerializer.class,  // 参数序列化器  new Jackson2JsonRedisSerializer<>(MyObject.class), // 结果序列化器  Arrays.asList("key"),  new MyParamObject() // 自定义参数对象  
);  
对比表格
方法版本参数序列化器结果序列化器适用场景
默认方法使用RedisTemplate默认配置使用RedisTemplate默认配置简单类型(如String、Long)
自定义方法可指定任意RedisSerializer可指定任意RedisSerializer复杂对象(如JSON、POJO)
http://www.dtcms.com/wzjs/431637.html

相关文章:

  • 合肥公司门户网站制作西安网站建设平台
  • 企业电子商城网站建设电子商务网站推广
  • 长沙有效的可以看的网站网络推广合同
  • 网站旁边的小图标怎么做的海南百度推广开户
  • 网站建成后 再添加小功能麻烦吗seo的方法
  • 网站用空间还是服务器百度一下你就知道了官网
  • 网站建设多选题百度文库高端网站建设专业公司
  • 做pc端网站要成本么公众号seo排名软件
  • 怎么做网站教程视频seo中国官网
  • html5做动态网站建设百度公司招聘2022年最新招聘
  • 建设厅培训中心网站广西网络优化seo
  • 阿里云服务器做美女网站seo是干嘛的
  • 阜阳企业做网站客户管理软件crm排名
  • 建设网站 费用网页推广链接怎么做
  • wordpress模板上传不网络seo优化平台
  • wordpress 3 企业主题信息流优化师前景
  • 成都网站快速排名优化app线下推广怎么做
  • django 微信小程序开发教程抖音seo软件工具
  • 网站防止非法链接怎么做百度排名优化咨询电话
  • 成都网站建设开发公南宁百度推广seo
  • 重庆网站推广优化百度服务中心电话
  • wordpress图片添加标签seo外链工具源码
  • 网页微信版看聊天记录有记录吗滁州网站seo
  • 二手设备回收做哪个网站好河北seo网络优化师
  • 杭州网站建设页面二级域名免费分发
  • 佛山南海网站开发合肥网络优化推广公司
  • 做网站的技术困难网页优化公司
  • 佛山网站建设网站网站怎么建设
  • 沈阳网页模板建站seo整站优化推广
  • 北京海淀区派出所sem和seo哪个工作好