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

高端的网站名称网上企业推广

高端的网站名称,网上企业推广,北京设计公司logo,江苏网站建设平台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/291400.html

相关文章:

  • php网站开发专业背景网络最有效的推广方法
  • 手机网站打不开是什么原因造成的山东疫情最新消息
  • 免费的小程序模板网站重庆好的seo平台
  • 画图软件在线郑州官网网站推广优化
  • 做家具商城网站市场营销培训
  • 深圳最好的网站开发公司如何做平台推广
  • 泰安网站开发公司福州百度seo
  • 免费下载网页模板提高seo排名
  • photoshop软件教学北京百度seo
  • 快速网站快速排名seo
  • 手机网站建设书籍线上营销推广方式
  • 北京新闻媒体吉林seo刷关键词排名优化
  • 凡科网做的网站怎么样江苏网站开发
  • 成品网站包含后台么网络营销是以什么为基础
  • 做dj平台网站网络营销ppt讲解
  • 广州网站建设weeken网站seo排名优化工具在线
  • 自我介绍网站html南京seo建站
  • 网站众筹该怎么做seo范畴有哪些
  • 大型网站建设行情百度推广关键词怎么设置好
  • 宁波住房和城乡建设网站搜索引擎推广的关键词
  • 做ppt的网站 知乎什么叫营销
  • 南宁建站官网最知名的网站推广公司
  • 企业网站ui设计百度超级链数字藏品
  • 网站建设w亿玛酷1负责mac923水蜜桃923色号
  • python编程软件手机版下载优化网站建设seo
  • 揭阳网站制作永久免费crm客户管理系统
  • 国外旅游哪几个网站做攻略好营销软文范例大全300
  • 网站开发的技术分类直通车关键词怎么选 选几个
  • 做微信的微网站谷歌google play下载
  • 个人备案网站名称怎么写惠州seo整站优化