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

建站公司哪家好 知道万维科技山西又增一例在忻州

建站公司哪家好 知道万维科技,山西又增一例在忻州,小型IT网站开发公司,门户网站建设需要多少首先#xff0c;让我们先回顾一下上一篇讲的在Redis Functions中关于将key的名字作为参数和非key名字作为参数的区别#xff0c;先看下面的例子 首先#xff0c;我们先在一个Lua脚本文件mylib.lua中定义如下的库和函数 //--------------------mylib.lua 文件开始 --------…首先让我们先回顾一下上一篇讲的在Redis Functions中关于将key的名字作为参数和非key名字作为参数的区别先看下面的例子 首先我们先在一个Lua脚本文件mylib.lua中定义如下的库和函数 //--------------------mylib.lua 文件开始 ----------- // #!lua name mylib local function my_hset(keys, args) local hash keys[1] local time redis.call(TIME)[1]     //这一行的目的是执行TIME命令得到当前的服务器时间 return redis.call(HSET, hash, _last_modified_, time, unpack(args)) end redis.register_function(my_hset, my_hset) //--------------------mylib.lua 文件结束 ----------- // 然后我们在命令行中运行如下命令 $ cat mylib.lua | redis-cli -x FUNCTION LOAD mylib 当我们再运行如下FCALL命令时候我们会得到如下的结果 redis FCALL my_hset 1 myhash_key first_field first value second_field second value (integer) 3 上面命令的my_hset是函数名1代表第一个参数myhash_key是key名后面的first_field first value second_field second value 都是这个key: myhash_key的field:value对 我们通过在Redis客户端运行 HGETALL myhash_key可以查看到相对应的结果 redis HGETALL myhash_key 1) _last_modified_ 2) 1659536487 3) first_field 4) first value 5) second_field 6) second value 好了在复习完了上一篇Redis Functions的内容之后我们可以看到上面的例子中mylib库中只包含了一个函数my_hset, 事实上在一个库中可以包括多个函数在下面的例子中我们要添加另外2个function my_hgetall  与 my_hlastmodified. 其中函数my_hgetall相当于在redis 客户端执行hgetall命令而my_hlastmodified函数返回的是传入的key中_last_modified这一个field的值 首先让我们在mylib.lua中添加这两个function local function my_hgetall(keys, args) local hash keys[1] local res redis.call(HGETALL, hash) return res end local function my_hlastmodified(keys, args) local hash keys[1] return redis.call(HGET, keys[1], _last_modified_) end 然后在mylib中注册这两个函数 redis.register_function(my_hgetall, my_hgetall) redis.register_function(my_hlastmodified, my_hlastmodified) 因为我们要在mylib库中新增两个函数所以我们需要运行如下的命令 $ cat mylib.lua | redis-cli -x FUNCTION LOAD REPLACE mylib 接下来我们运行my_hgetall函数与my_hlastmodified redis FCALL my_hgetall 1 myhash_key 1) _last_modified_ 2) 1659536487 3) first_field 4) first value 5) second_field 6) second value redis FCALL my_hlastmodified 1 myhash_key 1659536487 最后我们可以通过FUNCTION LIST命令来查看当前所有的Redis Function的库及其包含的函数信息。下面我们来查看一下当前库mylib中包括的3个function的信息 127.0.0.1:6381 FUNCTION list 1) 1) library_name 2) mylib 3) engine 4) LUA 5) functions 6) 1) 1) name 2) my_hset 3) description 4) (nil) 5) flags 6) (empty array) 2) 1) name 2) my_hlastmodified 3) description 4) (nil) 5) flags 6) (empty array) 3) 1) name 2) my_hgetall 3) description 4) (nil) 5) flags 6) (empty array) 在Redis的官方文档中我们发现我们可以在库中定义一个function供库中的其他函数使用在官方的使用说明它给出了一个例子用于错误检测。我们下面来看看这个例子 定义一个check_keys的函数用来检测客户端调用的redis function的函数输入的key是否存在并且只有一个 local function check_keys(keys) local error nil local nkeys table.getn(keys) if nkeys 0 then error Hash key name not provided elseif nkeys 1 then error Only one key name is allowed end if error ~ nil then redis.log(redis.LOG_WARNING, error); return redis.error_reply(error) end return nil end 相应的我们也需要修改已经有的3个函数让他们去调用新增的check_keys函数 local function my_hset(keys, args) local error check_keys(keys) if error ~ nil then return error end local hash keys[1] local time redis.call(TIME)[1] return redis.call(HSET, hash, _last_modified_, time, unpack(args)) end local function my_hgetall(keys, args) local error check_keys(keys) if error ~ nil then return error end local hash keys[1] local res redis.call(HGETALL, hash) return res end local function my_hlastmodified(keys, args) local error check_keys(keys) if error ~ nil then return error end local hash keys[1] return redis.call(HGET, keys[1], _last_modified_) end 这里要注意一点在上面地例子中如果我们运行FCALL redis FCALL my_hgetall 1 myhash_key 1) _last_modified_ 2) 1659536487 3) first_field 4) first value 5) second_field 6) second value 我们可以看到运行是正常地但是如果我们运行FCALL_RO redis FCALL_RO my_hgetall 1 myhash_key (error) ERR Can not execute a script with write flag using *_ro command. 我们会收到一个错误。这是为什么呢 事实上函数my_hgetall的目的只是从数据中读取数据并没有写操作。但是当我们定义它的时候并没有标注它是只读属性 local function my_hgetall(keys, args) local hash keys[1] local res redis.call(HGETALL, hash) return res end 所以这个时候当我们用命令FCALL_RO就会返回一个错误Can not execute a script with write flag using *_ro command 所以为了可以让FCALL_RO执行一个只读属性的函数我们需要对my_hgetall的注册方式进行一下修改 redis.register_function{ function_namemy_hgetall, callbackmy_hgetall, flags{ no-writes } } 这个时候我们再运行FCALL_RO命令时候我们就会得到正确的结果了 redis FCALL_RO my_hgetall 1 myhash_key 1) _last_modified_ 2) 1659536487 3) first_field 4) first value 5) second_field 6) second value 下面我们来看看Redis functions是如何在集群中运行的 在非集群状态时候如果有主从节点那么主节点上的function会自动地被复制到从节点这与function创建地初衷也是一致地Redis认为Functions是数据库的一部分是可以持久化的并且也是可以复制的。 但是如果function是存在于集群的几点中那么就有一些不一样的特性了。Redis function无法被自动地加载到集群中地所有节点而需要被管理员手动地将function加载到集群中地每个节点中。要加载Redis function在集群中地节点可以运行如下地命令 redis-cli --cluster-only-masters --cluster call host:port FUNCTION LOAD [REPLACE] function-code 如果运行命令 redis-cli --cluster add-node 那么这个时候集群中已经存在的节点会将已经加载地function自动地传播到新加入集训地节点 使用Redis Function的其他的注意事项 如果一个已经加载Redis Function的节点需要重启那么在重启之前建议先运行命令 redis-cli --functions-rdb 这样会将已经存在于节点上的Redis function存到一个RDB文件中当这个节点重启之后可以直接加载这个rdb文件就不需要再手工加载每一个function了大大地节省了时间和减少错误机率 本篇文章引用了部分Redis官方文档的例子 大家可以从链接去查看和运行一下。 https://redis.io/docs/interact/programmability/functions-intro/ 下一篇博客我们开始分析Redis function的源码让我们深入探讨一下这个Redis新特性内部是如何执行欢迎继续关注Redis Functions系列博客 最后感谢Redis社区的所有贡献者的努力工作及所有对Redis感兴趣的开发者的支持
http://www.dnsts.com.cn/news/214026.html

相关文章:

  • 微信网站服务器要求qq网站建设
  • 企业如何对自己的网站进行建设百度seo最成功的优化
  • 网站建设过程中需要注意的通用原则页面设计分析
  • 手机网站注意哪些问题吗建设网站个人银行
  • 视频付费点播网站怎么做网站分站系
  • 临沂网站建站专业公司网站建设教程最新资讯
  • 一个网站的后台怎么做西安紧急通知
  • 加强网站内容建设的意见汕头网络推广平台
  • 通用集团网站模板官方网站车联网是谁做
  • 建个站的免费网站能上百度吗中国最牛的设计公司
  • 文昌建设局网站dedecms使用教程
  • 网站抓取压力高建设银行官方网站手机版
  • 金融行业seo整站优化建设项目流程八个阶段
  • 肥城市住房和城乡建设局网站郑州七彩网站建设公司
  • 兰甘肃网站建设网站建设柒首先金手指8
  • 万维网网站服务的名称怎样设置网站访问权限
  • 卡盟网站制作教程东莞搜索网络优化
  • 域名注册成功后怎么使用网站通州网站建设多少钱
  • 网站维护都是一些什么公司wordpress删除管理站点链接
  • 中国建设银行官方网站下载推广app最快的方法
  • iis 添加网站茂名建设局网站
  • 10m网站空间网站建设公司下载
  • 建设网站有哪些步骤深圳做自适应网站
  • 网络服务商官方网站专门做资产负债表结构分析的网站
  • 宜宾网站建设88sou万网个人网站
  • 梅州市建设培训中心网站仿站怎么做
  • app开发网站建设及开发全国工商登记网
  • 焦作网站建设策划静态动漫网站模板
  • 网站首次备案网站建设120
  • 网站管理与建设淄博建设工程学校官方网站