Redis SCAN 命令

redis的扫描方法,使用scan,而不是使用 keys*
因为keys* 会全部key扫描一次,key数量很多时,容易造成阻塞太久甚至down机。

Redis Scan 命令用于迭代数据库中的数据库键。
SCAN 命令是一个基于游标的迭代器,每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程。
SCAN 返回一个包含两个元素的数组, 第一个元素是用于进行下一次迭代的新游标, 而第二个元素则是一个数组, 这个数组中包含了所有被迭代的元素。如果新游标返回 0 表示迭代已结束。

/**
 * 查找redis key
 * @param string|null $pattern // 要匹配的规则  'test_*'
 * @param int $count    // 每次遍历数量.count越大总耗时越短,但单次阻塞越长。 建议5000-10000。并发不高则可以调至接近1w。
 * @return array
 */
function redisScan(string $pattern = '', int $count = 6000): array
{

    $keyArr = array();

    while (true){
        // $iterator 下条数据的坐标
        $key = env('redis.prefix', '') . $pattern;
        Log::debug($key);
        $data = Cache::store('redis')->handler()->scan($iterator, env('redis.prefix', '') . $pattern, $count);
        $keyArr = array_merge($keyArr,$data ?: array());

        if ($iterator === 0){   //迭代结束,未找到匹配
            break;
        }
        if ($iterator === null) {//"游标为null了,重置为0,继续扫描"
            $iterator = "0";
        }

    }

    // 反转去重
    return array_flip(array_flip($keyArr));

}

月球上体重是在地球上的16.5% 假设在地球上每年增长0.5kg 算出10年后在地球和月球的体重

import math
thisWeight = int(input("请输入当前体重:"))
increase = 0.5
moonWeight = 0.165
for i in range(10):
    thisWeight = thisWeight + 0.5
moomW = thisWeight * moonWeight
print("10年后在地球上的体重为:{:.2f}\n10年后在月球上的体重为:{:.2f}".format(thisWeight,moomW))

Time


Time包参数说明 :


  now := time.Now()  //Now返回当前本地时间 
  fmt.println(now) // 2022-12-31 18:26:28.695199 +0800 CST m=+0.001064201
  now.Year()// 2022 (年)
  now.Month() // December (月)
  now.Day() // 31 (日)
  now.Date() // 2022 December 31  (返回年月日)
  now.Hour() // 时
  now.Minute() // 分
  now.Second() // 秒`
  
  now.Unix() // 秒级时间戳
  now.UnixNano() // 纳秒级时间戳

  time.Unix(now.Unix(), 0) // 时间戳转换为时间 第二个参数表示精度 返回一个Time类型的时间 2022-12-31 18:26:35 +0800 CST
  ret := time.Unix(now.Unix(), 0)
  ret.Year() // 拿到时间中的年
  ret.Month() // 拿到时间中的月
  ret.Day() // 拿到时间中的日

  now.Add(24 * time.Hour) // 现在的时间加24小时

  // 使用time.Tick(时间间隔)来设置定时器,定时器的本质上是一个通道(channel)。
  timer := time.Tick(time.Hour)
  for t := range timer {
    fmt.Println(t)
  }
  
  // 时间格式化
  //time.Format函数能够将一个时间对象格式化输出为指定布局的文本表示形式,
  //需要注意的是 Go 语言中时间格式化的布局不是常见的Y-m-d H:M:S,
  //而是使用 2006-01-02 15:04:05.000(记忆口诀为2006 1 2 3 4 5)。
  //其中:
  // 2006:年(Y)
  // 01:月(m)
  // 02:日(d)
  // 15:时(H)
  // 04:分(M)
  // 05:秒(S)
  now.Format("2006-01-02 15:04:05") 代表当前时间
  now.Format("2006-01-02 03:04:05") 代表上午时间
  now.Format("2006-01-02 03:04:05.000") 毫秒精度

  // Parse解析一个格式化的时间字符串并返回它代表的时间。layout定义了参考时间:
  func Parse(layout, value string) (Time, error)
  
  // 求两个时间的差 
  func (t Time) Sub(u Time) Duration
  
  // 睡眠
  time.Sleep(5 * time.Second)
  n := 4
  time.Sleep(time.Duration(n))

区块链的发展历程

本篇将会提到:

  • 区块链1.0:货币
  • 区块链2.0:智能合约
  • 区块链3.0:超越货币 经济和市场的公正使用

区块链1.0:货币

A:技术栈
    从技术角度讲,比特币有三层:区块链、协议、货币
    第一层是底层技术,即区块链。区块链是去中心化的、公开透明的交易记录总账—其数据库由所有网络的节点共享的,
    由矿工更新,由全民监督,但没有人真正拥有和控制这个数据库。
    第二层是协议—区块链上进行资金转账的软件系统
    第三层是货币本身,比如比特币
    对于所有加密货币,区块链、协议、货币这三个层次是一种通用结构。每种币都代表一种货币、一种协议、对应的区块链。当然也可以共用区块链。
B: 2个行业问题
    双花问题:
        区块链技术出现之前,数字货币和数字资产具有无限可复制性,如果没有一个中心化的媒介,我们没办法确认一笔资产是否已经被花掉,
        所以需要可信赖的第三方机构比如银行、支付宝等。 区块链通过将点对点文件分享技术和公钥加密技术相结合,创造出了新式数字金钱,从而解决“双花”问题。
        货币的拥有权是由公共总账来记录,并由加密协议和挖矿社区来确认的。因为用户不需要相信交易另一方或者中心化机构 ,只要相信区块链协议下的软件系统即可。
    拜占庭将军问题:
        (战场上多个将军并不信任彼此但需要某种沟通协调机制):区块链每个账页都被网络上各个节点查看和验证,并不要托管到一个中心化的机构。
        使用者不需要担心是否相信交易对手,只要相信区块链网络就行,这就解决了拜占庭将军问题。
C: 数字货币怎么运作?
    有三部分构成:
        地址、私钥、钱包软件 地址:别人能够把比特币发给你的地方 
    私钥:
        是加密学的秘钥,可以把比特币经过私钥加密发送给别人(相当于一个开保险箱的钥匙) 
    钱包软件:
        运行在你电脑上的操作私钥管理比特币的软件
D:数字钱包安全
    数字货币目前的一个问题,一旦私钥丢失就无法找回,而普通用户没有很好的保护私钥的能力,这也是比特币目前未被主流接纳的原因。 
    这个问题Circle等公司在试图解决,给用户提供好的备份保存解决方案。 私钥的这个特性也有很大优势,去中心化的方式相比中心化,
    会减少黑客攻击中心化机构带来的安全问题,比如Apple、Facebook、支付宝这些顶级公司都曾被黑客入侵。
E:1.0的现实运用
    美国出现了Bitpay,Coinbase这些成熟的比特币支付方案提供商。但目前商户面临传统支付、比特币支付两套系统独立运行的问题,影响用户体验,Intuit
    通过PayByCoin模块在传统支付上集成了Bitpay,Coinbase支付,国内如果支付宝、微信能切入,能极大的促进数字货币的普及率。 
    2个领域还有前景:对传统支付的升级改造;对国际汇款的颠覆,传统国际汇款交易费最高达7%~30%
F:和法币关系
    目前比特币的交易是用法币结算的,跟法币也不是替代关系。价格波动性是数字货币未被广泛使用的一个因素,所以出现了和美元锚定的Ripple;Bitpay,
    Coinbase提供了法币、比特币实时转换的解决方案。
G:监管现状
    除少部分国家明令禁止外,大部分国家采取了兼容并包的态度,随着时间的推移,越来越多国家的央行开始认可数字货币以及背后的区块链技术。

区块链2.0:智能合约

区块链1.0应用以比特币为代表,为了解决货币和支付手段的去中心化,那么区块链2.0就是更宏观的对整个市场的去中心化,利用区块链技术来转换许多不
同的资产而不仅仅是比特币,通过转让来创建不同资产单元的价值。
区块链技术的去中心化账本功能可以被用来注册、确认、转移各种不同类型的资产及合约。所有的金融交易都可以被改造成在区块链上使用,
包括股票、私募股权、众筹、债券、对冲基金和所有类型的金融衍生品:期货、期权等。

金融服务: 
    区块链的一个重要方向是利用数字货币与传统银行和金融市场做对接。
    · Ripple Labs正在使用区块链技术来重塑银行业生态系统,使用Ripple支付网络可以让多国银行直接进行转账和外汇交易,而不需要第三方中介。
    Ripple也开发
    了一个智能合约和自己的程序语言Codius。
    · Paypal在做比特币和传统金融和支付市场对接的解决方案。
    · BTCjam在做基于区块链的去中心化P2P借贷。
    · Overstock在做基于区块链的去中心化证券交易所Medici。

智能资产: 
    区块链可以用于任何资产注册、存储和交易,包括金融、经济和货币的各个领域;有形资产、无形资产。
    区块链开辟了不同类型各个层次的行业运用功能,涉及货币、市场和金融交易。使用区块链编码的资产通过智能合约成为智能资产。
    · 智能资产是指所有以区块链为基础的可交易的所有资产类型,包括有形和无形资产。
    智能资产通过区块链控制所有权。并通过合约来符合现有法律,
    比如:预先建立的智能合约能够当某人已经偿还全部贷款后,自动将车辆所有权从财务公司转让到个人名下,这个过程是全自动的。 
    智能资产有可能让我们构建无须信任的去中心化资产管理系统。

智能合约: 
    智能合约意味着区块链交易远不止买卖货币这些交易,将会有更广泛的指令嵌入到区块链中。传统合约是指双方或者多方协议做或不做某
    事来换取某些东西,每一方必须信任彼此会履行义务。而智能合约无须彼此信任,因为智能合约不仅是由代码进行定义的,也是由代码强制执行的,
    完全自动且无法干预。
    众筹: 基于区块链的众筹平台支持初创企业通过创建自己的数字货币来筹集资金,分发自己的“数字股权”给早期支持者,这些数字货币作为支持初创公司应获股份
    的凭证。比特币预测市场: 通过对现实生活中可能发生的事情进行结果预测,比如选举、体育赛事等。
    无须信任的借贷: 区块链的去信任机制网络是智能资产和智能合约发展的重要推动因素。这让不认识的人在互联网上把钱借给你,而你可以将你的智能资产作为抵押,
    这必然大幅降低借贷成本让借贷更具竞争力。非人为干预的机制也让纠纷率大大降低。

以太坊:
    图灵完备的虚拟机 区块链技术将多个领域内的概念和操作结合在一起,包括计算、通讯网络、加密学和人工智能。 
    在区块链2.0中,我们需要通过智能合约和智能资产来记录和转移更多复杂的资产类型,
    我们就需要第三步—更强大的脚本系统—最终实现图灵完备(能够运行任何货币、协议和区块链)。以太坊就是一个区块链
    为基础的项目,旨在提供一个图灵完备脚本语言和图灵完备平台。

区块链3.0:超越货币、经济和市场的公正应用


区块链2.0通过智能合约来彻底颠覆了传统货币和支付的概念,而区块链3.0我们将探讨区块链在非金融货币领域中的价值。
上文我们认识到区块链之所以能够做很多事情是因为区块链具有价值转移和信用转移的优势,这是一种“去信任”的架构。
“去信任”架构就是系统中的参与方无须信任对方就可以完成交易和协作,这是传统互联网最薄弱的一项。
互联网时代我们通过中心化方式让信用局限在一定机构、国家内传递,但面对全球流通仍然没有好办法。
在不同宗教、政治、文化的全球活动中,唯有通过数学来实现更多共识。
通过信用共识,基于数学的区块链实现了全球货币、支付的全部功能,进入3.0时代,更远远超越了货币、支付和金融这些经济领域,将利用其优势重塑人类社会的方方面面。

区块链基于信用共识,使其擅长构建“强去中心化”特性的鉴证类服务。
区块链是一个高效的模型 区块链不仅会重塑货币市场、支付系统、金融服务及经济形态的方方面面,而且会改变人类的每个领域。
区块链技术能够从根本上成为让组织形态减少摩擦并且提高效率的新方案。区块链去中心化的特性能与整个网络有足够的流动性将所以人连接在一起,
去中心交易:
    提供了一种通用技术和全球化的解决方案,自动化的实现物理资源和人力资源的分配,解放了过去由人力来完成的各种协调和确认,
    也许以后所以人类活动都可以通过区块链来协调。

区块链技术涉及到的领域 区块链涉及到多个领域知识:
    公钥和私钥加密、P2P文件共享、分布式计算、网络模型、匿名、区块链账本、加密数字货币和协议等。
    只有理解了这些概念才能提出基于区块链的创新解决方案,并应用到已知领域,反过来也会推动区块链的发展。
    
区块链技术能够实现量子级别管理 区块链可以促进一种全自动的计算方式,这是一种通用的无缝协作方式,让没有数量限制的参与方共同协作,这种通用协作方式是过去人类无法想象的。
区块链促进大数据预测任务自动化 区块链可以和大数据连接,大数据预测分析可以和自动执行的智能合约完美结合,区块链技术加入到经济支付层面,做为量化工具,
海量自动执行的任务会解放大量的人类生产力。区块链也会促进大数据向下一个数量级发展。

分布式反审查组织模式 区块链为跨国公共产品服务的管理问题提供了解决方案。
维基解密是个案列。斯诺登泄密事件中,由于强大中心化政府干预,信用卡支付网络和Paypal都拒绝支持这种捐赠,这样维基解密在经济上被完全封锁了,这种情况,可以使用比特币进行捐款。
· Namecoin:
    去中心化域名系统 Namecoin可以用于替换DNS系统,无法被任何公司或政府控制。它能够让全世界任何人不受限制和审查,自由的在互联网上发布信息。
· 数字艺术:
    区块链认证服务 数字艺术是区块链加密技术能提供颠覆性创新的另一个舞台。
    数字艺术在区块链行业主要应用是指,利用区块链技术来注册任何形式的知识产权,或将鉴证服务变得更加普遍,如合同公证。
    数字艺术还可以针对在线图片、照片或数字艺术作品这些数字资产,通过区块链来保护知识产权。
· Monegraph:
    在线图片保护 Monegraph用户只要将之前创建且发布在网上的图片资产进行注册,就可以对他们的这些数字资产进行货币化。
    就像比特币能够验证货币的所有权,Monegraph能够验证资产所有权:这是一个区块链智能资产运用案例。

下一篇:区块链基础知识
本篇文章特别鸣谢:
感谢瑞琪子的文案参考,瑞琪子是一名特别出色的文案编辑,643368289@qq.com是她的邮箱,欢迎骚扰。