热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Memcached----关于存取的小例子

ITOO底层封装的memcached的方法存取的时候有一定的时间耗费。它的工作原理是:存的时候先把对象序列化成字符串,取的时候再把字符串反序列化为对象使用!其实memcached缓存有一个客户端

   ITOO底层封装的memcached的方法存取的时候有一定的时间耗费。它的工作原理是:存的时候先把对象序列化成字符串,取的时候再把字符串反序列化为对象使用!其实memcached缓存有一个客户端,可以提供对memcached的存取,并且各种类型的都可以,所以我就提供给大家一个小例子,希望对初学memcached的学者有帮助!


首先
要做一些前提工作:引用dll。           
     引用了这4个DLL,我们就可以非常简单的用memcached的客户端来操作了!
其次:
写一个memcachedHelper类,用来连接多台机器存放数据库,搭建memcached分布式的环境!      
using Memcached.ClientLibrary;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace test
{
class MemcacheHelper
{
public MemcacheHelper()
{
//跟配置文件相连,使之可以连接多个服务器
string server = ConfigurationManager.AppSettings["serverlist"];
string[] serverlist;
serverlist = server.Split(',');

SockIOPool pool = SockIOPool.GetInstance();
pool.SetServers(serverlist);
pool.MinCOnnections= 3;
pool.InitCOnnections= 3;
pool.MaxCOnnections= 5;
pool.SocketCOnnectTimeout= 5000;
pool.Initialize();
}
}
}


配置配置文件,使之可以灵活填写数据库连接的电脑个数:











最后
建立一个窗体,放上8个按钮外加一个txt文本框 接下来是后台的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Memcached.ClientLibrary;
using System.Collections;

namespace test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//实例化一个helper类,链接数据库池
MemcacheHelper memchachehelper = new MemcacheHelper();
}

private void button1_Click(object sender, EventArgs e)
{
//实例化一个客户端,用于操作memcached数据库
MemcachedClient client = new MemcachedClient();

client.EnableCompression = false;

client.Set("key1", "字符串测试");

MessageBox.Show("key1:字符串测试");
}

private void button2_Click(object sender, EventArgs e)
{
MemcachedClient client = new MemcachedClient();
//取出数据的值,将内容显示到界面的文本框中
txt01.Text = client.Get("key1").ToString();
}

private void button3_Click(object sender, EventArgs e)
{
//实例化一个对象
Person person = new Person { UserId = "1", UserName = "李少然" };
MemcachedClient client = new MemcachedClient();
client.EnableCompression = false;
//向数据库中存入对象
client.Set("key2", person);
MessageBox.Show("key2:对象PersOnUserId= 1, UserName =李少然");
}

private void button4_Click(object sender, EventArgs e)
{
MemcachedClient client = new MemcachedClient();
//从缓存中取出对象
Person cc = client.Get("key2") as Person;
//将对象的内容显示到文本框中
txt01.Text = cc.UserId.ToString() + ";" + cc.UserName.ToString();
}
//存入泛型
private void button5_Click(object sender, EventArgs e)
{
ArrayList arraylist = new ArrayList();
arraylist.Add("泛型集合测试Erica");
arraylist.Add("泛型集合测试李少然");
arraylist.Add("泛型集合测试李卫中");
MemcachedClient client = new MemcachedClient();
client.EnableCompression = false;
client.Set("key3", arraylist);
MessageBox.Show("key3:泛型集合测试Erica,泛型集合测试李少然,泛型集合测试李卫中");
}

private void button6_Click(object sender, EventArgs e)
{
MemcachedClient client = new MemcachedClient();
object demo = client.Get("key3");
ArrayList arraylist = demo as ArrayList;
txt01.Text = arraylist[0].ToString() + ";" + arraylist[1].ToString() + ";" + arraylist[2].ToString() + ";";
}

//存入dt
private void button7_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
string str = "";
dt.Columns.Add("id");
dt.Columns.Add("name");
DataRow dr = dt.NewRow();
for (int i = 0; i <3; i++)
{
dr = dt.NewRow();
dr["id"] = "00" + i.ToString();
dr["name"] = "姓名" + i.ToString();
dt.Rows.Add(dr);
str += dr["id"] + "," + dr["name"] + ";";
}
MemcachedClient client = new MemcachedClient();
client.EnableCompression = false;
client.Set("key4", dt);
MessageBox.Show("key4:" + str);
}

private void button8_Click(object sender, EventArgs e)
{
MemcachedClient client = new MemcachedClient();

object demo = client.Get("key4");

DataTable dt = demo as DataTable;

int count = dt.Rows.Count;

txt01.Text = dt.Rows[0][0].ToString() + "," + dt.Rows[0][1].ToString() + ";" + dt.Rows[1][0].ToString() + "," + dt.Rows[1][1].ToString() + ";" + dt.Rows[2][0].ToString() + "," + dt.Rows[2][1].ToString() + ";";
}
}
}

person类的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace test
{
[Serializable]
public class Person
{
public string UserName { get; set; }

public string UserId { get; set; }
}
}


这样就建立了小例子,可以存取各种类型的数据!那么ITOO的底层代码也就不用转来转去了就用两句话就可以解决!
//存
public static bool Set(string key, object value, DateTime expiry)
{
return mc.Set(key,value, expiry);
}
//取
public static T GetObject(T obj, string key)
{
obj = (T)mc.Get(key);
return obj;
}

小总:
           这样,就可以改掉ITOO底层的代码!但是又出现了一个问题就是:计算机识别二进制是特别快的,ITOO底层把对象先序列化为二进制肯定也是有道理的,如果我直接存对象,可能应用方便了,代码少了几行,但是却没有做测试实验,不知道到底存对象和序列化对象再存入memcached有什么不同!接下来会继续了解的
   下一篇,小编会讲解一些memcached集群存取的一些算法,敬请期待!


推荐阅读
  • 2023年最新指南:如何在PHP中屏蔽警告和错误
    本文详细介绍了如何在PHP中屏蔽警告和错误,包括多种方法和最佳实践,帮助开发者提升代码质量和安全性。 ... [详细]
  • MySQL Administrator: 监控与管理工具
    本文介绍了 MySQL Administrator 的主要功能,包括图形化监控 MySQL 服务器的实时状态、连接健康度、内存健康度以及如何创建自定义的健康图表。此外,还详细解释了状态变量和系统变量的管理。 ... [详细]
  • MongoDB核心概念详解
    本文介绍了NoSQL数据库的概念及其应用场景,重点解析了MongoDB的基本特性、数据结构以及常用操作。MongoDB是一个高性能、高可用且易于扩展的文档数据库系统。 ... [详细]
  • 本文详细探讨了在Web开发中常见的UTF-8编码问题及其解决方案,包括HTML页面、PHP脚本、MySQL数据库以及JavaScript和Flash应用中的乱码问题。 ... [详细]
  • 本文介绍了如何利用X_CORBA实现远程对象调用,并通过多个示例程序展示了其功能与应用,包括基础的Hello World示例、文件传输工具以及一个完整的聊天系统。 ... [详细]
  • Redis:缓存与内存数据库详解
    本文介绍了数据库的基本分类,重点探讨了关系型与非关系型数据库的区别,并详细解析了Redis作为非关系型数据库的特点、工作模式、优点及持久化机制。 ... [详细]
  • 对象存储与块存储、文件存储等对比
    看到一篇文档,讲对象存储,好奇,搜索文章,摘抄,学习记录!背景:传统存储在面对海量非结构化数据时,在存储、分享与容灾上面临很大的挑战,主要表现在以下几个方面:传统存储并非为非结 ... [详细]
  • Python学习day3网络基础之网络协议篇
    一、互联网协议连接两台计算机之间的Internet实际上就是一系列统一的标准,这些标准称之为互联网协议,互联网的本质就是一系列网络协议。二、为什么要有互联网协议互联网协议就相当于计 ... [详细]
  • Java EE 平台集成了多种服务、API 和协议,旨在支持基于 Web 的多层应用程序开发。本文将详细介绍 Java EE 中的 13 种关键技术规范,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • Python3爬虫入门:pyspider的基本使用[python爬虫入门]
    Python学习网有大量免费的Python入门教程,欢迎大家来学习。本文主要通过爬取去哪儿网的旅游攻略来给大家介绍pyspid ... [详细]
  • Hibernate全自动全映射ORM框架,旨在消除sql,是一个持久层的ORM框架1)、基础概念DAO(DataAccessorOb ... [详细]
  • 本文详细介绍了HTTP协议中的缓存机制,包括ETag的使用方法和304状态码的意义,探讨了强缓存与协商缓存的区别及其工作原理,旨在帮助开发者更好地理解和优化网站性能。 ... [详细]
  • 解决WebStorm使用Vuewebpack卡顿问题
      我们在使用Vue时,经常会遇到项目卡顿的情况,这主要是因为Vue的webpack打包时会生成一个node_modules模块,该模块内含至少上万个文件,因而往往会造成WebSt ... [详细]
  • oracle 对硬件环境要求,Oracle 10G数据库软硬件环境的要求 ... [详细]
  • MySQL 5.7 服务端在 Windows 上的安装与配置
    本文详细介绍了在 Windows 系统上安装和配置 MySQL 5.7 服务端的方法,包括 my.ini 配置文件的设置、初始化数据库、启动服务以及设置用户权限等步骤。 ... [详细]
author-avatar
patrick0129_645
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有