memcached的安装和使用(.NET MVC)

17 篇文章 1 订阅
2 篇文章 0 订阅

1、首先为什么要用mamcached缓存呢?
1.1、使用数据库,从而出现高并发带来的数据库“死锁”;
1.2、磁盘IO读写的效率;
1.3、读写性能非常的好、开源、再者有很多的成功案例。
         当然,memcached的有点远不止这些,有兴趣的小伙伴可以上网查阅资料哦!
2、memcahced的简介:
      memcached是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多网站使用。这是一套开放源代码软件,以BSD license授权发布。
      它的存储方式类似于一个容量庞大的hash表。例如:

属性说明
key这个值是唯一的 (string,另:key的最大长度为255个字符。)
value可以存储基本的数据(整型、浮点型、字符串、布尔)、复合类型(数组、对象)、特殊类型(NULL、不能存放资源)、二进制数据(图片、视频、音频)

3、安装memcached步骤:
3.1、下载链接:memcached.zip,提取码:d8d2
3.2、下载成功后解压可以看到三个文件,如图:
在这里插入图片描述
3.3、找到windows命令行,以管理员的身份运行,然后cd到文件的下载目录处,如下图:
在这里插入图片描述
3.4、然后输入安装命令:memcahed.exe -d install,输入完成后直接回车即可;
3.5、安装完成以后,输入命令:memcached.exe -h,查看是否安装成功,出现如图内容则表示已经安装成功:
在这里插入图片描述
3.6、安装成功以后启动memcached,输入命令:memcached -d start,如图:
在这里插入图片描述
此时打开任务管理器,可以看到memcached已经启动了,如图:
在这里插入图片描述
3.7、接下通过windows中的telnet工具实现memcached的登录,输入命令:telnet 127.0.0.1 11211,如图:
在这里插入图片描述
如果启动失败或者不存在该命令等错误,尝试看一下是否启用了telnet工具,打开“控制面板=》程序=》启用或关闭程序=》telnet”即可。
4、在C#中的使用:
4.1 简单的使用控制台,向memcached里面存储一个值进去:
    所需的动态库:EnyimMemcached.dll
4.2 示例代码:

using Enyim.Caching;
using Enyim.Caching.Configuration;

class Program
  {
        static void Main(string[] args)
        {
            MemcachedClientConfiguration mcConfig = new MemcachedClientConfiguration();
            mcConfig.AddServer("192.168.0.117:11211");//使用本地服务器的ip
            using (MemcachedClient client = new MemcachedClient(mcConfig)) {
                client.Store(Enyim.Caching.Memcached.StoreMode.Set, "name", "test-1");//存储一个键值
                Console.WriteLine("数据存储成功!OK");

                string name = client.Get("name").ToString();//根据键“key”,获取对应的值
                Console.WriteLine($"取出来的值“value”为:"+name+",键“key”为“name”。");
            }
           
            Console.ReadKey();
        }
  }

4.3 代码运行效果,如图:
在这里插入图片描述
5.下面模拟简单的用户登录,将用户登录信息存储到memcache里面去。下面我把部分重要的代码贴出来(用户信息使用code-first/EF映射的):
需要引入的动态库:
=》Commons.dll
=》ICSharpCode.SharpZipLib.dll
=》Memcached.ClientLibrary.dll
在这里插入图片描述
5.1 =》MemcacheHelper.cs

using Memcached.ClientLibrary;

public static class MemcacheHelper
 {
        private static MemcachedClient mc;

        static MemcacheHelper()
        {
            //在客户端的memcached的集群来配置
            String[] serverList = { "127.0.0.1:11211" };
            //配置memcached的服务池
            SockIOPool pool = SockIOPool.GetInstance("test");
            //设置服务器列表
            pool.SetServers(serverList);
            //各服务器之间负载均衡的设置比例
            pool.SetWeights(new int[] { 1 });
            pool.Initialize();
            //实例化memcached客户端对象
            mc = new MemcachedClient();
            mc.PoolName = "test";
            //是否启用压缩数据;如果启用了压缩数据,数据压缩长于门槛的数据将被存储在压缩的形式
            mc.EnableCompression = false;
        }
        /// <summary>
        /// 给 memcached中插入值
        /// @author 王伟
        /// @date 2019-06-25 15:08 多云
        /// </summary>
        /// <param name="key">键</param>
        /// <param name="value">值</param>
        /// <param name="expiry">过期时间</param>
        /// <returns></returns>
        public static bool Set(string key, object value, DateTime expiry)
        {
            return mc.Set(key, value, expiry);
        }
        /// <summary>
        /// 在memcached中取值
        /// @author 王伟 
        /// @date 2019-06-25 15:12 多云
        /// </summary>
        /// <param name="key">键</param>
        /// <returns></returns>
        public static object Get(string key)
        {
            return mc.Get(key);
        }
 }

5.2 =》SchoolDbContext.cs

public class SchoolDbContext : DbContext
{
   public SchoolDbContext()
       : base("name=SqlSugarDemoEntities")
     {
        this.Database.CreateIfNotExists();
     }

     public virtual DbSet<Student> Student { get; set; }
     public virtual DbSet<UserInfo> UserInfo { get; set; }
}

5.3 =》BaseController.cs

public class BaseController : Controller
  {
        //用来保存当前用户的信息
        public UserInfo LoginUser { get; set; }
        /// <summary>
        /// 通过过滤器来检查每个页面
        /// @author 王伟
        /// @date 2019-06-25 15:53 多云
        /// </summary>
        /// <param name="filterContext"></param>
        protected override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            base.OnActionExecuted(filterContext);
            //从cookie中获取咱们登录的sesionId
            string sessionId = Request["sessionId"];
            if (string.IsNullOrEmpty(sessionId))
            {
                Response.Redirect("/Login/Index");
            }

            object obj = MemcacheHelper.Get(sessionId);
            UserInfo userInfo = obj as UserInfo;
            if (User == null)
            {
                Response.Redirect("/Login/Index");
            }

            LoginUser = userInfo;
            //实现session的滑动机制
            MemcacheHelper.Set(sessionId, userInfo, DateTime.Now.AddMinutes(20));
        }
 }

5.3 =》HomeController.cs

    public class HomeController : BaseController
    {
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult About()
        {
            ViewBag.Message = "Your application description page.";

            return View();
        }

        public ActionResult Contact()
        {
            ViewBag.Message = "Your contact page.";

            return View();
        }
    }

5.4 =》LoginController.cs

    public class LoginController : Controller
    {
        // GET: Login
        public ActionResult Index()
        {
            return View();
        }
        [HttpGet]
        public ActionResult UserLogin(UserInfo user)
        {
            SchoolDbContext schoolDbEntities = new SchoolDbContext();
            var userList = schoolDbEntities.UserInfo.ToList();
            var loginUser = schoolDbEntities.UserInfo.Where(t => t.UName.Equals(user.UName) && t.UPwd.Equals(user.UPwd)).FirstOrDefault();

            if (loginUser == null)
            {
                return Content("用户名密码错误!");
            }
            else
            {
                Guid sessionid = Guid.NewGuid();
                Response.Cookies["sessionId"].Value = sessionid.ToString();
                string json = JsonConvert.SerializeObject(loginUser);//必须序列化以后才能存入
                MemcacheHelper.Set(sessionid.ToString(), json, DateTime.Now.AddMinutes(20));

                string userInfo = MemcacheHelper.Get(sessionid.ToString()).ToString();//从memcache中获取用户信息
                return Content("用户登录成功!当前登录用户的信息为:" + userInfo);
            }
        }
    }

5.5 =》MemcachedController.cs

    public class MemcachedController : BaseController
    {
        private static MemcachedClient mc;
        public ActionResult Index()
        {
            //通过客户端来进行memcached的集群配置,存入数据是使用一致的hash算法将key和value存入
            String[] serverList = {"127.0.0.1:11211" };
            //初始化Memcached的服务池
            SockIOPool pool = SockIOPool.GetInstance("test");
            //设置服务器列表
            pool.SetServers(serverList);
            //设置服务器之间的负载均衡比例
            pool.SetWeights(new int[]{ 1});
            pool.Initialize();
            //创建一个memcached的客户端对象
            mc = new MemcachedClient();
            mc.PoolName = "test";
            //是否启用压缩数据
            mc.EnableCompression = false;

            mc.Set("wangwei", "Hello World !", DateTime.Now.AddSeconds(5));
            pool.Shutdown();//关闭连接池

            return Content("OK");
        }
    }

6、运行结果,如图:
6.1 =》登录:
在这里插入图片描述
6.2 =》登陆成功:
在这里插入图片描述

到这儿,memcache的简单用法就结束了。欢迎评论吐槽!!!!!!

人生最困难的不是努力,也不是奋斗,而是做出正确的抉择。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在OpenStack中,Memcached是一种分布式缓存系统,用于存储临时数据以加快访问速度。它通常用于存储会话数据、API令牌等。 以下是在OpenStack中安装使用Memcached的步骤: 1. 安装Memcached 在Ubuntu上,可以使用以下命令安装Memcached: sudo apt-get install memcached python-memcache 在CentOS上,可以使用以下命令安装Memcached: sudo yum install memcached python-memcached 2. 配置Memcached 在Ubuntu上,Memcached配置文件位于/etc/memcached.conf。可以使用以下命令打开它: sudo nano /etc/memcached.conf 在该文件中,可以配置Memcached绑定的IP地址和端口号。默认情况下,Memcached绑定到localhost和端口号11211。如果要允许其他主机访问Memcached,则可以将IP地址更改为0.0.0.0。 在CentOS上,Memcached配置文件位于/etc/sysconfig/memcached。可以使用以下命令打开它: sudo nano /etc/sysconfig/memcached 在该文件中,可以配置Memcached绑定的IP地址和端口号。默认情况下,Memcached绑定到localhost和端口号11211。如果要允许其他主机访问Memcached,则可以将IP地址更改为0.0.0.0。 3. 启动Memcached 在Ubuntu上,可以使用以下命令启动Memcached: sudo service memcached start 在CentOS上,可以使用以下命令启动Memcached: sudo systemctl start memcached 4. 使用Memcached 在OpenStack中,可以使用Memcached存储会话数据、API令牌等。以下是一些示例: 存储数据: import memcache mc = memcache.Client(['127.0.0.1:11211'], debug=0) mc.set('key', 'value') 检索数据: import memcache mc = memcache.Client(['127.0.0.1:11211'], debug=0) value = mc.get('key') 删除数据: import memcache mc = memcache.Client(['127.0.0.1:11211'], debug=0) mc.delete('key') 以上是在OpenStack中安装使用Memcached的基本步骤。请注意,Memcached的配置和使用可能因OpenStack版本和配置而异。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值