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

网站新闻公告表怎么做2015做那个网站能致富

网站新闻公告表怎么做,2015做那个网站能致富,wordpress视频网站上传视频,已将绑定域名给另一个网站Redis 使用 Lua 脚本进行原子操作Intro之前写过一篇文章也是 Redis 使用 LUA 脚本实现分布式的 CAS 操作#xff0c;可以参考#xff1a;基于 Redis 实现 CAS 操作最近使用 Redis 的时候有一个需求#xff0c;只有值发生变化的时候才更新#xff0c;如果要更新的值和现在的… Redis 使用 Lua 脚本进行原子操作Intro之前写过一篇文章也是 Redis 使用 LUA 脚本实现分布式的 CAS 操作可以参考基于 Redis 实现 CAS 操作最近使用 Redis 的时候有一个需求只有值发生变化的时候才更新如果要更新的值和现在的值是一样的就不用更新有点类似于 SET NX只是 SET NX 只有值不存在的时候才会 SET我的需求则是要检查要 SET 的值和 Redis 里的值如果不一样就 SET一样就直接返回Implement我实现了针对 String 和 Hash 的 SET 检查核心就是我们的 Lua 脚本实现代码如下对于 Hash 会多一个参数 —— hash field name, 对于 string 则直接是 value 了就会比 hash 少一个参数private const string HashSetWhenValueChangedLuaScript   if redis.call(HGET, KEYS[1], ARGV[1])  ARGV[2] thenreturn 0 elseredis.call(HSET, KEYS[1], ARGV[1], ARGV[2])return 1 end ;private const string StringSetWhenValueChangedLuaScript   if redis.call(GET, KEYS[1])  ARGV[1] thenreturn 0 elseredis.call(SET, KEYS[1], ARGV[1])return 1 end ; 实现起来也比较简单就是先取一下 Redis 中的数据如果和输入的值是一样就返回 0不一样则更新值然后返回 1StackExchange.Redis 使用 API在 StackExchange.Redis 中可以使用 ScriptEvaluate/ScriptEvaluateAsync 来执行 Lua 脚本为了方便使用我把他们封装成了扩展方法实现如下public static bool StringSetWhenValueChanged(this IDatabase db, RedisKey key, RedisValue value) {return (int)db.ScriptEvaluate(StringSetWhenValueChangedLuaScript, new[] { key }, new[] { value })  1; }public static async Taskbool StringSetWhenValueChangedAsync(this IDatabase db, RedisKey key, RedisValue value) {return await db.ScriptEvaluateAsync(StringSetWhenValueChangedLuaScript, new[] { key }, new[] { value }).ContinueWith(r  (int)r.Result  1); }public static bool HashSetWhenValueChanged(this IDatabase db, RedisKey key, RedisValue field, RedisValue value) {return (int)db.ScriptEvaluate(HashSetWhenValueChangedLuaScript, new[] { key }, new[] { field, value })  1; }public static async Taskbool HashSetWhenValueChangedAsync(this IDatabase db, RedisKey key, RedisValue field, RedisValue value) {return await db.ScriptEvaluateAsync(HashSetWhenValueChangedLuaScript, new[] { key }, new[] { field, value }).ContinueWith(r  (int)r.Result  1); } Sample使用示例可以参考下面的测试用例[Fact] public void StringSetWhenValueChangedTest() {var key  ${nameof(StringSetWhenValueChangedTest)};var redis  DependencyResolver.Current.GetRequiredServiceIConnectionMultiplexer().GetDatabase();redis.StringSet(key, 1);// update to 1 if now is not 1Assert.False(redis.StringSetWhenValueChanged(key, 1));Assert.Equal(1, redis.StringGet(key));// update to 2 if now is not 2Assert.True(redis.StringSetWhenValueChanged(key, 2));Assert.Equal(2, redis.StringGet(key)); }[Fact] public void HashSetWhenValueChangedTest() {var key  ${nameof(HashSetWhenValueChangedTest)};var field  testField;var redis  DependencyResolver.Current.GetRequiredServiceIConnectionMultiplexer().GetDatabase();redis.HashSet(key, field, 1);Assert.False(redis.HashSetWhenValueChanged(key, field, 1));Assert.Equal(1, redis.HashGet(key, field));Assert.True(redis.HashSetWhenValueChanged(key, field, 2));Assert.Equal(2, redis.HashGet(key, field)); } More在使用 Lua 脚本的时候如果要使用不等于的逻辑需要小心一些和其他语言不同需要使用 ~ 而非 ! 来表示不等Referenceshttps://github.com/WeihanLi/WeihanLi.Redis/blob/dev/src/WeihanLi.Redis/RedisExtensions.cshttps://github.com/WeihanLi/WeihanLi.Redis/blob/dev/test/WeihanLi.Redis.UnitTest/RedisExtensionsTest.cs基于 Redis 实现 CAS 操作
http://www.pierceye.com/news/807351/

相关文章:

  • 百度站长平台网站验证wordpress关闭略缩图
  • 网站怎么做qq微信登陆界面设计的有趣的网站推荐
  • 设计logo网站赚钱注册域名怎么做网站
  • 网站备案 教程网站设计大全推荐
  • 临沂建设局网站官网文明网站建设工作进度表
  • 网站编辑seo旅游网站建设代码
  • 为什么自己做的网站打开是乱码wordpress live-2d
  • 素材下载网站电商自建站
  • 浙江省的网站建设公司有哪些代理注册公司一般多少钱
  • 如何在建设银行网站预约纪念币东莞网站建设服务有什
  • 有哪些可以做h5的网站代理网址上境外网
  • 做网站所需要的代码6红杏直播
  • 南通制作网站wordpress移动版设置
  • 哪个网站有免费ppt下载建筑类网站的推荐理由
  • 视觉差的网站公司外包
  • 基础做网站内蒙住房和城乡建设部网站
  • 发帖效果好的网站展馆展示设计公司排名
  • 童装网站建设文案什么网站做的号
  • 能打开的a站莆田网站建设建站系统
  • 上海市城乡建设管理局网站一个月做网站
  • 网站后台管理系统 aspwordpress拖拽上传
  • 华为手机官方网站登录爬虫做视频网站
  • 山东省工程建设信息官方网站河南网站seo推广
  • 低成本做网站 白之家重庆市建设执业资格注册管理中心网站
  • 电子商务网站建设需求在别的公司做的网站可以转走吗
  • 网站流量怎么做乡1万做网站需要几个人
  • 阿里云centos7做网站怀化网站seo
  • 我做的网站怎样被百度收录易语言 做网站mysql
  • 花店网站模板免费下载9个做简历的网站
  • 东港区网站制作seo推广模式是什么