关于Memcache使用的工具类

分布式缓存有它自己的好处 。

下面的 ConstValue.sessionId  是一个常量

public static readonly string sessionId = "sessionId";

过期时间。小于0 的情况下自动为0

public static readonly int sessionExpressMinute = 20;

此处贴出我写的一个工具类。主要实现 类似session 的分布式缓存

需要引用一些程序集,此处我就不多写了,有问题在下面留言就可以了。

类名称 MemcacheHelper

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Web.ModelBinding;
using Memcached.ClientLibrary;
using System.Web;

namespace CZBK.ItcastOA.Common
{
  public   class MemcacheHelper
  {
      private static readonly MemcachedClient mc = null;

static MemcacheHelper()
      {
          //连接池
          string[] serverlist = { "127.0.0.1:11211", "10.0.0.132:11211" };

//初始化池
          SockIOPool pool = SockIOPool.GetInstance();
          pool.SetServers(serverlist);

pool.InitConnections = 3;
          pool.MinConnections = 3;
          pool.MaxConnections = 5;

pool.SocketConnectTimeout = 1000;
          pool.SocketTimeout = 3000;

pool.MaintenanceSleep = 30;
          pool.Failover = true;

pool.Nagle = false;
          pool.Initialize();

// 获得客户端实例
          mc = new MemcachedClient();
          mc.EnableCompression = false;
      }
      public static bool Set(string key, object value)
      {
          return mc.Set(key, value);
      }
      public static bool Set(string key, object value, DateTime time)
      {
          return mc.Set(key, value, time);
      }
      /// <summary>
      /// 获取数据
      /// </summary>
      /// <param name="key"></param>
      /// <returns></returns>
      public static object Get(string key)
      {
          return mc.Get(key);
      }
      /// <summary>
      /// 删除
      /// </summary>
      /// <param name="key"></param>
      public static bool Delete(string key)
      {
          if (mc.KeyExists(key))
          {
              return mc.Delete(key);
          }
          return false;
      }

/// <summary>
      /// 模仿session的方式
      /// </summary>
      /// <typeparam name="T">需要反序列化的那个类型</typeparam>
      /// <param name="key">键</param>
      /// <param name="date">相对过期时间,以分钟为准</param>
      /// <returns>返回一个已经反序列化的一个对象,as 就可以直接转变</returns>
      public static object  SessionGet<T>(string  key ,int minute =20)    where T:class , new ()
      {//取回缓存中的值
          object obj  = mc.Get(key);
          if (obj!= null && mc.Set(key, obj, DateTime.Now.AddMinutes(minute)))
          {
              return SerializeHelper.DeserializeToObject<T>(obj.ToString());
          }
          mc.Delete(key);
          return null;
            ;
      }
      /// <summary>
      /// 判断写入缓存
      /// </summary>
      /// <param name="value">键</param>
      ///  <param name="context">上下文</param>
      /// <param name="minute">过期时间  默认为 20</param>
      /// <returns>  是否成功</returns>
      public static bool  SessionSet(object value,HttpContext context,int minute = 20)
      {
          //设置默认过期时间
          if (minute <= 0)
          {
              minute = ConstValue.sessionExpressMinute;
          }
          value = SerializeHelper.SerializeToString(value);
          string key = Guid.NewGuid().ToString();
          if (mc.Set(key, value, minute))
          {
              context.Response.Cookies[ConstValue.sessionId].Value = key;
              return true;
          }
          return false;
      }
     /// <summary>
     ///
     /// </summary>
     /// <param name="value">传过来一个实体类型</param>
     /// <param name="response">响应体</param>
      /// <param name="minute">过期时间  默认为 20</param>
     /// <returns></returns>
      public static bool SessionSet(object value, HttpResponseBase response, int minute = 20)
      {
          //设置默认过期时间
         if (minute <= 0)
         {
             minute = ConstValue.sessionExpressMinute;
         }
         value = SerializeHelper.SerializeToString(value);
          string key = Guid.NewGuid().ToString();
          if (mc.Set(key, value))
          {
              response.Cookies[ConstValue.sessionId].Value = key;
              return true;
          }
          return false;
      }

}
}

时间: 2024-08-29 21:53:09

关于Memcache使用的工具类的相关文章

Memcached的配置,SSH项目中的整合(com.whalin),Memcached工具类,Memcached的代码调用

?? 1 改动pom.xml,加入依赖文件: <dependency> <groupId>com.whalin</groupId> <artifactId>Memcached-Java-Client</artifactId> <version>3.0.2</version> </dependency> 2 加入memcached-context.xml,注意要在web.xml中进行配置 <?xml ver

Arrays工具类

Arraysd的静态方法能够方便的对数组进行操作,每个方法也加了注释 : 程序: import java.util.*;public class Array{        public static void main(String[] args){                int[]  arr={1,3,4,2};                System.out.println("排序前:");                printArray(arr);//打印原数组

常用工具类(System,Runtime,Date,Calendar,Math)

一.Sy 一个java.lang包中的静态工具类. 三大字段: static PrintStream err "标准"错误输出流. static InputStream in "标准"输入流. static PrintStream out "标准"输出流. 其他常用方法: 描述系统信息: 获取系统属性信息: static Properties getProperties(): (Properties是Hashtable的子类,也就是Map 的子类

iOS 中的正则匹配(工具类)

正则表达式 正则表达式是对字符串操作的一种逻辑公式, 用事先定义好的一些特定字符.及这些特定字符的组合, 组成一个"规则字符串", 这个"规则字符串"用来表达对字符串的一种过滤逻辑, 正则表达式就是用于描述这些规则的工具, 或者说, 正则表达式就是记录文本规则的代码. 在开发中, 我们经常会有查找符合某些复杂规则的字符串的需要, 比如数据校验: 判断用户的输入是否合法(如:用户注册的时候,QQ号码,电话号码,邮箱是否符合要求) 下面让我们先来看看正则匹配常用的一些字

(九十五)音效播放方法和工具类的制作

音效通过AVFoundation框架实现,是通过函数而不是方法,因此需要进行桥接等操作,具体步骤如下. 进行音效播放,首先要得到音效的URL(只能是本地音频),然后转换为音效ID(唯一),通过ID播放音效. [音效播放方法] ①导入框架主头文件 #import <AVFoundation/AVFoundation.h> ②通过Bundle拿到本地音效,然后调用AudioServicesCreateSystemSoundID函数得到音效ID,ID为0代表无效,以此为依据可进行懒加载 @inter

spring endpoint工具类

工具类代码 @Controller public class EndpointDocController {     private final RequestMappingHandlerMapping handlerMapping;     @Autowired     public EndpointDocController(RequestMappingHandlerMapping handlerMapping) {         this.handlerMapping = handler

web常用的工具类总结

数据库的链接的操作类 package utils; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class DBConnection { private static final String DBDRIVER = "com.m

字符串工具类(指定字符串的长度和判断是否为空等方法)

package com.sec.util; /** * 字符串工具类 * @author Administrator * */public class StringUtil { /** * 过滤<,>,\n 字符串的方法 * @param input * @return */ public static String filterHTML(String input){ if(input == null || input.length() == 0){ return input; } input

java并发的艺术-读书笔记-第八章常用的并发工具类

jdk中提供了几个非常有用的工具类,分别是CountDownLatch,CyclicBarrier和semaphore exchanger CountDownLatch:允许一个或者多个线程等待其他线程完成操作 public class CountDownLatchTest{ static CountDownLatch c = new CountDownLatch(2); public static void main(String[] args){ new Thread(new Runnabl