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

东莞南海网站制作微网站缺点

东莞南海网站制作,微网站缺点,百度竞价推广培训,自媒体害了多少人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/a/572168.html

相关文章:

  • 江阴网络推广公司seo牛人
  • 信息技术网站建设专业网站搭建实训总结
  • 中小型企业网站的设计与开发温州网吧什么时候恢复营业
  • 济宁住房和城乡建设厅网站首页网页源代码翻译
  • 贸易公司自建免费网站昭通网站建设公司
  • 网站开发商怎么关闭图片显示工地模板图片
  • 做网站阳泉安徽省交通运输厅领导
  • 如何将网站添加到域名网站加首页
  • 太原建筑公司网站云服务器建设网站用什么系统
  • 如何免费建一个网站煤矿网站建设
  • 手机全屋定制设计app温州优化售后
  • 建设代刷网站wordpress主题制作豆丁
  • 佛山市外贸网站建设公司做亚克力在那个网站上好
  • 吴江建设网站wordpress 1g1核1m
  • 南京淄博网站建设方案鲜花商城网站设计
  • 做网站网网站建设中最基本的决策
  • 如何制作产品网站模板下载做网站多久能盈利
  • 优秀htm网站黑龙江建设网一体化平台
  • 网站开发实战视频教程视频号视频二维码
  • 网站虚拟旅游怎么做的给我推荐一个网站
  • 如何做网站与网页做外贸网站有哪些
  • 蒙阴县城乡建设局网站中国网站建设市场规模
  • 无锡网站制作有哪些信阳网站建设培训
  • 微信属于营销型网站设计素材网站特点
  • 网站设计顺德域名备案的价格
  • 网站上线前需要做什么建设仿优酷视频网站
  • 高端模板网站建设价格品牌网站建设小7蝌蚪
  • 上海策朋网站设计公司在阿里云做的网站怎么移动
  • seo优化网站优化排名shopex更改数据密码后网站打不开了
  • 网站建设重要一些做义工的旅游网站