• EnyimMemcached中用DateTime参数设置过期后赋值有问题的解决.


    环境: win10 64位、memcached 1.4.4 64位、EnyimMemcached 2.16.0(ps:2.13.0也有此问题,别的版本就没试了).

    EnyimMemcached git源码地址:https://github.com/enyim/EnyimMemcached

    事发原因:最近有时间就想着把redis和Memcached的缓存都想一个公共类,好方便随身用,redis很快弄好了,Memcached在网上查貌似EnyimMemcached用的比较多(原来用过Memcached.ClientLibrary,抱着不走回头路的心态直接过滤了,也因为这个许多年没有更新过了.),立马开工,在vs中NuGet搜索安装,直接测试试用,

    看里面有三个方法,原来没看那么多,直接用的第二个DateTime,别的也没试,Get获取值时报错,提示没有实例化(实例化不就是没值么),于是看赋值那里,结果提示返回的是true,赋值成功,但就是取值报错,折腾了一上午,查说改配置什么的都没用,用命令行赋值却又能成功,很无奈 ⊙﹏⊙.

    后面无意中用了下TimeSpan,却成功了.(原来根本没想过会是参数原因!).于是就有了上面找源码。

    看代码没什么不同,就MemcachedClient.GetExpiration这两个重载不一样,继续看GetExpiration方法

     看返回结果都是uint类型,结果DateTime参数中是这样返回uint类型的:uint retval = (uint)(expiresAt.ToUniversalTime() - UnixEpoch).TotalSeconds;

    这不是返回时间戳嘛,TimeSpan参数返回的就是分钟数了,想不通了,同样返回调用的一个是时间戳一个是分钟数,这不是瞎搞吗。

    遂改为下面得分钟的:uint retval = (uint)(expiresAt - DateTime.Now).TotalSeconds;

    ok,编译下把dll加载到自己项目中,使用DateTime参数的运行赋值取值成功!

  • 相关阅读:
    python3 str.encode bytes.decode
    GTX 1080显卡出错
    Android studio2.2 app:transformNative_libsWithStripDebugSymbolForDebug
    psmisc
    How to configure locales to Unicode in a Docker Ubuntu 14.04 container?
    keras中文文档笔记1——概述
    keras中的一些小tips(一)
    基于Theano的深度学习(Deep Learning)框架Keras学习随笔-01-FAQ
    Android studio 更新android SDK
    groovy基础
  • 原文地址:https://www.cnblogs.com/dangzhensheng/p/7155484.html
Copyright © 2020-2023  润新知