欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

基于.net ,使用几种常见的NoSQL数据库

程序员文章站 2022-06-04 18:34:07
[toc] "示例完整源码地址" 2020年1月10日 10:10:10 shanzm 0 .net中的缓存对象 MemoryCache对象 HttpContext.Cache (Asp.net)对象 示例:(详见: "001MemoryCache" ) 1.MemCached 安装包下载: "推荐 ......

0 .net中的缓存对象

  • memorycache对象

  • httpcontext.cache (asp.net)对象

示例:(详见:001memorycache

//memorycache是存入到程序进程的内存中的,程序重启之后就没了
//添加引用:system.runtime.caching
//新建一个缓存对象,使用默认的缓存对象
memorycache memcache = memorycache.default;
//缓存以键值对的形式存储,缓存的生命期是10s
memcache.add("name", "shanzm", datetimeoffset.now.addseconds(10));

1.memcached

  • 安装包下载:

  • nuget:pm> install-package enyimmemcached

  • memcached中的cas操作:(详见:003cas操作

示例:(详见:002memcacheddemo

//创建配置对象
memcachedclientconfiguration memconfig = new memcachedclientconfiguration();
memconfig.addserver("127.0.0.1:11211");

//创建memcachedclient对象
using (memcachedclient memclient = new memcachedclient(memconfig))
{
    //写入memcached中
    memclient.store(enyim.caching.memcached.storemode.set, "name", "shanzm");
    memclient.store(enyim.caching.memcached.storemode.set, "age", "100");

    //读取数据
    string name = memclient.get<string>("name");
    if (name == null)
    {
        console.writeline("无缓存");
    }
    else
    {
        console.writeline(name);
    }

    //删除数据
    console.writeline(memclient.get<string>("age"));
    memclient.remove("age");
    if (null == memclient.get<string>("age"))
    {
        console.writeline("已经将key为age的数据从memcached服务器中清除");

    }
    console.readkey();
}

2.redis

示例:(详见:004redisdemo)

//注意此处我们使用异步方法
using (connectionmultiplexer conn = await connectionmultiplexer.connectasync("127.0.0.1:6379"))
{
    //默认是0号数据库,若是其他数据库,如3号数据库,conn.getdatabase(3)
    idatabase db = conn.getdatabase();

    //写入数据
    await db.stringsetasync("name", "张三", timespan.fromseconds(10));

    //批量写入(使用redis中batch对象 见013redis的批量操作)
    keyvaluepair<rediskey, redisvalue>[] kvs = new keyvaluepair<rediskey, redisvalue>[3];

    kvs[0] = new keyvaluepair<rediskey, redisvalue>("a", "a");
    kvs[1] = new keyvaluepair<rediskey, redisvalue>("b", "b");
    kvs[2] = new keyvaluepair<rediskey, redisvalue>("c", "c");
    await db.stringsetasync(kvs);

    //读取数据(查询不到数据返回为null)
    string name = await db.stringgetasync("name");
    string a = await db.stringgetasync("a");

    //删除数据
    db.keydelete("a");

    //判断是否存在某条数据
    if (!db.keyexists("a"))
    {
        messagebox.show("已删除key值为‘a’的数据");
    }

    //对已经存储的数据设置过期时间
    db.keyexpire("b", timespan.fromseconds(10));
}

3.mongodb

  • 安装mongodb()

  • 安装mongodb gui客户端:robo3t

  • nuget:pm>install-package mongodb.driver -version 2.5.0
    (注意默认安装最新版本可能会报错
    亲测2.5.0版本和 .net framework版本是4.6.1完美支持)

  • mongodb中的完整的增删改查,见:017mongodb中的curd

示例:(详见:016mongodbdemo)

//连接mongodb服务,创建对象
mongoclient client = new mongoclient("mongodb://127.0.0.1:27017");
//获取名为:testdb1的数据库,若是没有则创建!
imongodatabase db = client.getdatabase("testdb1");
//获取名为名为personsde表(collection可以理解为表)若是没有则创建!
imongocollection<person> persons = db.getcollection<person>("persons");


person p1 = new person() { id = 0001, name = "shanzm", age = 25 };
person p2 = new person() { id = 002, name = "shanzm" };//mongodb会对age默认填充为0

persons.insertone(p1);
persons.insertone(p2);