• 学习笔记47_关于Session局限性问题,Memcache


    三大问题:

    1.Session性能问题

    2.不能稳定输出。考虑使用进程外Session

    3.组成集群,登录数据进行共享

    (比如说像百度,百度网盘,百度文库等是使用不同的服务机器的,怎样避免使用的时候不用重复登录)

    为解决此类问题,将使用一台专门的机器,来负责处理公共缓存

    一个分布式缓存系统:Memcache

    情景:

    有三台机器,每台机器都部署IIS,以及OA系统

    如果使用本地Session的话,那么如果访问的机器1,那么只会在机器1有用户信息

    这时要使用其他功能模块,用到机器2,那么只能重新登录,不能获得机器1的用户信息

    分布式系统:Memcache

    分布式缓存存储方式:Cache: key - value

    //补充:Session运行机制是,在用户首次请求时,会申请一个GUID作为SessionId,返回时在cookie中放SessionId,发给用户,同时在本机缓存中,放置SessionId-Session值;之后,用户在每次请求将含SessionId的cookie发给服务器,服务就能使用key-value方法,获取当前请求用户的Session值了

    分布式系统也是这样,只是不是放在本地中而已。

    ***同一个域名,如何能分发到3个不同的服务器去处理?

    关键字:LVS集群;Windows:NLB网络负载均衡,Server操作系统;F5电信(硬件),分发请求

    使用Memcache原因:

    1.高并发时产生的数据库死锁

    2.磁盘IO读写死锁

    3.多客户端共享缓存

    4.简单的集群搭建

    5.成功案例丰富

    Memcache原理:

    1.它是一个程序,进程

    2.它将内存分块

    ***********************************************************************************

    Memcache使用:下载memcached解压

    里头只有一个 memcached.exe ,msvcr71.dll,非常小的程序

    理论上,只要双击 memcached.exe就可以运行了,但是,要让应用程序变为操作系统的服务

    在“服务” 那里可以看到。

    卸载服务:

    使得应用程序变为系统服务:

     那么就会在“服务”中看到 memcached Server服务。并且启用

    2.在启动或关闭Windows功能中,启用Telnet客户端功能来测试memcached Server服务

    测试是否能插入数据;

    key1(为键),0为标志(网上查),0为超时设置(0代表永不超时), 4(为长度)

    aaaa (数据)

    3.用C#来操作memcached,根据IP,往指定的机器进行增删改键值对

    //

     mmcache集群原理,是通过客户端驱动实现集群。(Redis,MonogoDb通过服务器端实现集群)

    初始化驱动的时候可以给定一个集合:mm服务器所在的机器的ip和端口。(所以只能在内部使用,不然被外边客户端挤爆)

     好处: 机器满了只需要加机器,就可以无限缓存,因为缓存办法是根据机器的个数,来决定存到哪台机器上。

    *************************************分割线*********************************************

    C#使用memcached示例:

    1. 启动memcached服务,如上;

    2.使用C#代码来调用memcached服务,其实类似于启用Telnet客户端功能来测试memcached Server服务

     需要引用几个dll:

    Commons.dll

    ICSharpCode.SharpZipLib.dll

    log4net.dll

    Memcached.ClientLibrary.dll

    3.调用

    // 分布Memcachedf服务IP 端口 

    string[] servers = {"192.168.1.100:11211","192.168.1.118:11211"};//意思是可以将数据放到两台电脑当中

    //初始化池

    SockIOPool pool = SockIOPool.GetInstance();

    pool.SetServers(servers);

    pool.InitConnections = 3;

    pool.MinConnections = 3;

    pool.MaxConnections = 5;

    pool.SocketConnectTimeout = 1000;

    pool.SocketTimeout = 3000;

    pool.MaintenancelSleep = 30;

    pool.Failover = true;

    pool.Nagle = false;

    pool.Initialize();

    //客户端实例化

    MemcachedClient mc = new MemcacheClient();

    mc.EnableCompression = false;

    mc.Add("keyddd","sssssssssss"); //进行哈希算法,以决定存到哪台机器上

     *********************************************分割线******************************************************

    mm优缺点:

    1.不能为持久化保存;

    2.存储数据有限制:1M【大于1M,认为进行分割】

    3.mm存储数据只能key-value

    4.集群数据没有复制和同步机制。【崩溃不会影响程序,没有主从复制机制。】

    5.内存回收不很及时。LRU:优先使用未使用内存---->过期内存----->最近最少使用内存,惰性删除

  • 相关阅读:
    JQuery常用的api[最好是系统地学习一下《锋利的JQuery》]
    soapui icon以及resource的理解
    《Effective C++ 》学习笔记——条款02
    android移植pppoe拨号上网的全过程
    tomcat dbcp 基于jndi当配置java.sql.SQLException: Already closed
    【iOS】文件下载小记
    Amazon S3数据一致性模型
    ARM裸编程系列---UART
    如何做程序猿SOHO它定购家庭赚外快?
    HDU 4940(杭电更多的学校#7 1006) Destroy Transportation system(到处乱混)
  • 原文地址:https://www.cnblogs.com/pylblog/p/7417228.html
Copyright © 2020-2023  润新知