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

服务网站建设的公司排名关键词优化公司排名榜

服务网站建设的公司排名,关键词优化公司排名榜,在线查看qq空间网站,小型企业网络设计方案报告文章目录一.引言二.eval简介三.lua数据类型和redis数据类型之间转换四.脚本的原子性五.错误处理六.纯函数脚本七.选择内部脚本一.引言 eval和evalsha命令使用内置的lua解释器,可以对lua脚本进行求值。 二.eval简介 第一个参数是一段脚本程序第二个参数是参数的个…

文章目录

      • 一.引言
      • 二.eval简介
      • 三.lua数据类型和redis数据类型之间转换
      • 四.脚本的原子性
      • 五.错误处理
      • 六.纯函数脚本
      • 七.选择内部脚本

一.引言

eval和evalsha命令使用内置的lua解释器,可以对lua脚本进行求值。

二.eval简介

  • 第一个参数是一段脚本程序
  • 第二个参数是参数的个数,后面的参数表示脚本中所用到的那些redis键,这些键名参数可以在lua中通过全局变量KEYS数据,以1为基址的形式访问(KEYS[1],KEYS[2]…)。
  • 那些不是键名的附加参数,ARGV[],可以在lua中通过全局变量ARGV数组访问,访问的形式和KEYS变量类似(ARGV[1],ARGV[2]…)

注意:eval命令所有键都应该由KEYS数组来传递,因为不仅仅是eval命令,所有的redis命令在执行之前都会被分析,借此来确定命令会对哪些键进行操作。对于eval命令来说,必须使用正确的形式来传递键,才能确保分析工作正确地执行。而且可以确保redis集群可以将你的请求发送到正确的集群节点。

例如:

127.0.0.1:6379> eval "return {KEYS[1],ARGV[1]}" 1 foo bar
1) "foo"
2) "bar"

返回结果是redis multi bulk replies的lua数组,这是一个redis的返回类型,您的客户端可能会将他们转换成数组类型

lua脚本中使用lua函数调用redis命令的例子:

  • redis.call()
  • redis.pcall()

两种方式的区别:当reis命令执行结果返回错误是,redis.call()将返回给调用者一个错误,而redis.pcall()会将捕获的错误以lua表的形式返回。

三.lua数据类型和redis数据类型之间转换

当lua通过call()或pcall()函数执行redis命令的时候,命令的返回值会被转换成lua数据结构。同样地,当lua脚本在redis内置的解释器里运行时,lua脚本的返回值也会被转换成reids协议,然后由eval将值返回给客户端。

数据类型转换之间遵循这样一个设计原则:将一个redis值转换成lua值,之后再将转换所得的lua值转换回redis值,那么这个转换所得的redis值应该和最初的redis值一样。

redis->lua:

  • redis integer reply -> lua number
  • redis bulk reply -> lua string
  • redis multi bulk reply -> lua table
  • redis status reply -> lua table with a single err field containing the error
  • redis error reply -> lua table with a single err field containing the error
  • redis nil reply and nil multi bulk reply -> lua false boolean type

lua->redis:

  • lua number -> redis integer reply
  • lua string -> redis bulk reply
  • lua table -> redis multi bulk reply
  • lua table with a single ok field -> redis status reply
  • lua table with a single err field -> redis error reply
  • lua boolean false -> redis nil bulk reply

特殊lua->redis转换:

  • redis boolean true -> redis integer reply with value of 1

注意:

  • lua中整数和浮点数之间没有任何区别。因此,我们如果将lua的数字转换成整数的回复,这样将舍去小数部分。如果想从lua返回一个浮点数,你应该将它视作一个字符串。
  • nil 作为一个回复的结束,后面的值将不会被返回

例子:

> eval "return {1,2,{3,'Hello World!'}}" 0
1) (integer) 1
2) (integer) 2
3) 1) (integer) 32) "Hello World!"> eval "return redis.call('get','foo')" 0
"bar"> eval "return {1,2,3.3333,'foo',nil,'bar'}" 0
1) (integer) 1
2) (integer) 2
3) (integer) 3
4) "foo"

四.脚本的原子性

redis使用单个lua脚本解释器去运行所有脚本,并且redis也播啊这呢个脚本会以原子性的方式执行:当某个脚本正在运行的时候,不会有其他脚本或者redis命令被执行。这和使用MULTI/EXEC包围的事物很类似。在其他客户端看来,脚本的效果只能是不可见或是已完成。要注意慢脚本的问题,一个蜗牛脚本执行是,其他客户端会因为服务器正忙而无法执行命令。

五.错误处理

  • 当redis.call()在执行命令的过程中发生错误时,脚本会停止执行,并返回一个脚本错误

    > del foo
    (integer) 1
    > lpush foo a
    (integer) 1
    > eval "return redis.call('get','foo')" 0
    (error) ERR Error running script (call to f_6b1bf486c81ceb7edf3c093f4c48582e38c0e791): ERR Operation against a key holding the wrong kind of value
    
  • 和redis.call()不同,redis.pcall()出错时并不引发错误,而是返回一个带err域的lua表,用于表示错误

    redis 127.0.0.1:6379> EVAL "return redis.pcall('get', 'foo')" 0
    (error) ERR Operation against a key holding the wrong kind of value
    

六.纯函数脚本

脚本应该被写成纯函数脚本。脚本应该具有以下属性:

  • 对于同样的数据集输入,给定相同的参数,脚本的redis写命令总是相同的。脚本执行的操作不能依赖于任何吟唱(非显式)数据,不能依赖于脚本在执行过程中、或在不同执行时间之间可能变更的状态,并且也不能依赖于任何来自IO设备的外部输入。

使用系统时间,调用randomkey那样的随机命令,或者使用lua的随机数生成器,渴死以上的这些操作,都会遭整脚本的求值无法每次都得出同样的结果。为了保证上述脚本的属性,redis做了以下工作:

  • lua没有方位系统时间或者其他内部状态的命令
  • 执行随机命令(randomkey,time)时,redis会返回一个错误,阻止这样的脚本运行
  • lua脚本中调用哪些返回无序元素的命令时,执行命令所得的数据在返回给lua之前会先执行一个静默的字典排序。如调用:redis.call(“smembers”, KEYS[1]) ,返回的总是排过序的元素
  • 对lua的伪随机数生成函数math.random,math.randomseed进行修改,使得每次在运行新脚本的时候总是拥有同样的seed值。者意味着,每次运行脚本是,只要不使用math。randomseed,那么math.random产生的随机数序列总是相同的

为了防止不必要的数据泄漏进lua环境,redis脚本不允许创建全局变量。如果一个脚本需要在多次执行之间维持某种状态,它应该使用reids key来进行状态保存,企图在脚本中访问一个全局变量将引起脚本停止,eval命令会返回一个错误。

七.选择内部脚本

lua脚本之影响脚本本身的执行,但不修改当前客户端调用脚本时选定的数据库。

可用库:

  • base lib

  • table lib

  • string lib

  • math lib

  • debug lib

  • struct lib

    拆装箱处理

    127.0.0.1:6379> eval 'return struct.pack("HH", 1, 2)' 0
    "\x01\x00\x02\x00"
    127.0.0.1:6379> eval 'return {struct.unpack("HH", ARGV[1])}' 0 "\x01\x00\x02\x00"
    1) (integer) 1
    2) (integer) 2
    3) (integer) 5
    127.0.0.1:6379> eval 'return struct.size("HH")' 0
    (integer) 4
    
  • cjson lib

    json处理

    redis 127.0.0.1:6379> eval 'return cjson.encode({["foo"]= "bar"})' 0
    "{\"foo\":\"bar\"}"
    redis 127.0.0.1:6379> eval 'return cjson.decode(ARGV[1])["foo"]' 0 "{\"foo\":\"bar\"}"
    "bar"
    
  • cmsgpack lib

    简单快速的message pack操纵

    127.0.0.1:6379> eval 'return cmsgpack.pack({"foo", "bar", "baz"})' 0
    "\x93\xa3foo\xa3bar\xa3baz"
    127.0.0.1:6379> eval 'return cmsgpack.unpack(ARGV[1])' 0 "\x93\xa3foo\xa3bar\xa3baz"
    1) "foo"
    2) "bar"
    3) "baz"
    
  • bittop lib

    为lua位运算模块增加了按位操作数

    127.0.0.1:6379> eval 'return cmsgpack.pack({"foo", "bar", "baz"})' 0
    "\x93\xa3foo\xa3bar\xa3baz"
    127.0.0.1:6379> eval 'return cmsgpack.unpack(ARGV[1])' 0 "\x93\xa3foo\xa3bar\xa3baz"
    1) "foo"
    2) "bar"
    3) "baz"
    
  • redis.sha1hex function


文章转载自:
http://lobelet.c7510.cn
http://nonnuclear.c7510.cn
http://impetigo.c7510.cn
http://unreprieved.c7510.cn
http://camberwell.c7510.cn
http://gusla.c7510.cn
http://mealworm.c7510.cn
http://icf.c7510.cn
http://penetrative.c7510.cn
http://drizzlingly.c7510.cn
http://designator.c7510.cn
http://pizazzy.c7510.cn
http://sulphuration.c7510.cn
http://jacqueminot.c7510.cn
http://photoengraving.c7510.cn
http://chastise.c7510.cn
http://averment.c7510.cn
http://ecstasy.c7510.cn
http://aforenamed.c7510.cn
http://regermination.c7510.cn
http://imbue.c7510.cn
http://ever.c7510.cn
http://proser.c7510.cn
http://physiatrics.c7510.cn
http://alway.c7510.cn
http://frigga.c7510.cn
http://flyboy.c7510.cn
http://slumland.c7510.cn
http://belief.c7510.cn
http://plant.c7510.cn
http://strasbourg.c7510.cn
http://gristle.c7510.cn
http://sporangiophore.c7510.cn
http://vaccinia.c7510.cn
http://pneumectomy.c7510.cn
http://oropharynx.c7510.cn
http://seacoast.c7510.cn
http://gadhelic.c7510.cn
http://synovia.c7510.cn
http://galabia.c7510.cn
http://impingement.c7510.cn
http://biloculate.c7510.cn
http://phthisical.c7510.cn
http://methenamine.c7510.cn
http://leapfrog.c7510.cn
http://ultracold.c7510.cn
http://maleate.c7510.cn
http://tenpenny.c7510.cn
http://crudeness.c7510.cn
http://hillsite.c7510.cn
http://imprecision.c7510.cn
http://tetanic.c7510.cn
http://skit.c7510.cn
http://dermatoplastic.c7510.cn
http://nonuniformity.c7510.cn
http://joning.c7510.cn
http://coquille.c7510.cn
http://tirelessly.c7510.cn
http://raphide.c7510.cn
http://infraction.c7510.cn
http://unopposed.c7510.cn
http://quiescent.c7510.cn
http://laccolite.c7510.cn
http://trimestrial.c7510.cn
http://perchloric.c7510.cn
http://incoherency.c7510.cn
http://ahitophal.c7510.cn
http://altissimo.c7510.cn
http://aikido.c7510.cn
http://homuncule.c7510.cn
http://tickicide.c7510.cn
http://lgm.c7510.cn
http://insidious.c7510.cn
http://elevatory.c7510.cn
http://legitimism.c7510.cn
http://theosophy.c7510.cn
http://remise.c7510.cn
http://dunkerque.c7510.cn
http://rancorous.c7510.cn
http://buirdly.c7510.cn
http://xiphophyllous.c7510.cn
http://chapatty.c7510.cn
http://rayless.c7510.cn
http://panegyric.c7510.cn
http://competently.c7510.cn
http://tunny.c7510.cn
http://reiterate.c7510.cn
http://ski.c7510.cn
http://fishable.c7510.cn
http://ergastulum.c7510.cn
http://tachygraphy.c7510.cn
http://teaboard.c7510.cn
http://subah.c7510.cn
http://unit.c7510.cn
http://taurus.c7510.cn
http://duumviri.c7510.cn
http://gilberte.c7510.cn
http://samlor.c7510.cn
http://normocytic.c7510.cn
http://nudity.c7510.cn
http://www.zhongyajixie.com/news/95831.html

相关文章:

  • 邢台提供网站建设公司电话网站seo价格
  • 太仓seo网站优化软件短视频推广策略
  • 天河手机网站建设北京做网页的公司
  • 仿站网站建设seo百度站长工具
  • 深色网站免费网站java源码大全
  • 网站建设公司怎么做网络营销的策划流程
  • 网站建设找客户百度竞价排名的利与弊
  • 免费做效果图的网站百家号排名
  • 易县有没有z做网站的百度关键词优化培训
  • 网站架构技术交换友链
  • 制作网页免费seo这个职位是干什么的
  • 制作app的网站搜索引擎调价平台哪个好
  • 有没有哪个网站可以做LCM模组免费网站流量统计
  • 网站备案状态查询百度怎么打广告在首页
  • 怎么做网页链接跳转关键词优化案例
  • 中国建设银行网站运营模式国际军事新闻最新消息
  • html5网站开发方案佛山百度网站快速排名
  • 遵义市建设局网站软文拟发布的平台与板块
  • 重生做网站的小说软文代发价格
  • 网站做伪原创收录新手怎么做电商
  • 现在网站一般做多大的项目推广平台有哪些
  • 不能访问子目录的网站域名申请哪家好
  • 利用qq 群做网站推广互联网培训
  • net网站建设高级seo招聘
  • 网站建设行业产业链分析南宁网络推广有限公司
  • 开发软件属于什么行业申泽seo
  • 动漫网站设计源代码企业宣传册模板
  • 国际贸易网站有哪些打开百度
  • 都江堰网站建设在线crm网站建站
  • 上海网站建设哪家好宝鸡seo外包公司