《NoSQL》memcached缓存

Posted 风雪幻林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《NoSQL》memcached缓存相关的知识,希望对你有一定的参考价值。

1. memcached的配置:

1.1:安装:

    官网未提供 Memcached 的Window平台安装包,只提供源代码,需要自己编译。可以根这篇文章配置安装。自己的系统平台及需要的版本号:

1.2:连接memcached:

NuGet开发包:

Install-PackageEnyimMemcached


2. memcache缓存:

2.1 参数说明:

memcache只能保存键值对,键值对只能是字符串。memcache存入数据的3种模式:

Set:如果存在则覆盖,不存在则新增(般使用这个)

Replace:如果存在则覆盖,并且返回 true;如果不存在则不处理,并且返回 false

Add:如果不存在则新增,并且返回 true;如果存在则不处理,并且返回 false

注:ExecuteXXX方法,唯一区别就是返回值信息更详细,在保存类对象,这个类必须是可序列化


2.2 缓存的写入和读取:

2.3 缓存删除key:

Remove(string key)   //Key 的长度最高是250 个字符,Value 最长 1M


3. 缓存的并发访问处理:

解决并发访问的cas操作:

using (MemcachedClient client = newMemcachedClient(mcConfig))

{

    var cr1=client.GetWithCas("name");

    Console.WriteLine("读取出了:"+cr1.Result+"cas:"+cr1.Cas);

    Console.WriteLine("按任意键继续");

    Console.ReadKey();

    var res =client.Cas(StoreMode.Set, "name", "123",cr1.Cas);

    if (res.Result){

        Console.WriteLine("修改成功"+res.Cas);

    } else{

        Console.WriteLine("被别人改了" + res.Cas);

    }

}

查询的时候查出一个 cas值,在写入的时候带着这个 cas 值,如果发现 cas 值已经变了,则说明已经有别人改过了


4. memcached 集群:

缓存时间设置一样,每隔一段时间就会造成一次数据库的访问高峰期。解决的方法就是缓存时间设置不一样,比如加上一个随机数

memcached集群配置:

  1. 在多个服务器上启动多个 Memcached 服务器

  2. 客户端决定把数据写入不同的实例//mcConfig.NodeLocatorFactory = new KetamaNodeLocatorFactory()


5. 关于memcached:

  • 建议规则“系统名字_模块名字_业务 Key”设定 Key 的时候,避免冲突:

    • 比如“Shop_Admin_FilterWords

  • Increment、Decrement 是用来对计数器进行增减

  • 多线程,可以充分利用 CPU 多核的性能

  • 对象数据只能自己序列化成 json字符串进行存储

  • Key 最大长度 255 个字符,Value 最长 1M

以上是关于《NoSQL》memcached缓存的主要内容,如果未能解决你的问题,请参考以下文章

『全国首发』NoSQL很性感之Memcached系列三

NoSQL之Memcached

mongodb nosql redis memcached 是什么?

NoSQL - Redis应用场景

Spring Boot 操作 Memcache

NoSQL:redis缓存数据库