三大问题:

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:优先使用未使用内存---->过期内存----->最近最少使用内存,惰性删除

学习笔记47_关于Session局限性问题,Memcache的更多相关文章

  1. openresty 学习笔记六:使用session库

    openresty 学习笔记六:使用session库 lua-resty-session 是一个面向 OpenResty 的安全和灵活的 session 库,它实现了 Secure Cookie Pr ...

  2. Beego 学习笔记14:Session控制

    Session控制 1>     Session常用来作为全局变量使用,比如记录当前登录的用户,或者页面之间传递数据使用. 2>     Beego框架内置了 session 模块,目前 ...

  3. [原创]java WEB学习笔记34:Session 案例 之 解决表单重复提交

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  4. [原创]java WEB学习笔记33:Session 案例 之 购物车

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  5. Javaweb学习笔记5—Cookie&Session

    今天来讲javaweb的第五阶段学习. Cookie和Session同样是web开发常用到的地方. 老规矩,首先先用一张思维导图来展现今天的博客内容. ps:我的思维是用的xMind画的,如果你对我的 ...

  6. PHP学习笔记:使用session来存储用户的登录信息

    session可以用来存储多种类型的数据,因此具有很多的用途,常用来存储用户的登录信息,购物车数据,或者一些临时使用的暂存数据等. 用户在登录成功以后,通常可以将用户的信息存储在session中,一般 ...

  7. PHP学习笔记14-操作session

    PHP会话管理图: 创建index: <?php /** * Created by PhpStorm. * User: Administrator * Date: 2015/7/2 * Time ...

  8. node学习笔记9——cookie,session相关操作

    下面讲的都是基Express及相关的包.所以在实践本篇文章之前,通过npm安装好Express, cookie-parser, cookie-session这三个安装包. 先简单说一下,如何用Expr ...

  9. Python Web学习笔记之Cookie,Session,Token区别

    一.Cookie,Session,Token简介 # 这三者都解决了HTTP协议无状态的问题 session ID or session token is a piece of data that i ...

随机推荐

  1. vue-cli搭建项目引入jquery和jquery-weui步骤详解

    vue简介 Vue.js 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用. Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合 ...

  2. python 对excel进行截图

    工作中需要对excel的单元格区域进行截图,以前是调用vba进行(走了很多弯路,虽然能实现,但比较low),后来逐步发现python的win32com与vba师出同门,很多方法操作都是类似的. 可以对 ...

  3. 记一次linux Docker网络故障排除经历

    背景: 之前做了一个项目,需要在容器内访问宿主机提供的Redis 服务(这是一个比较常见的应用场景哈), 常规方案: ①   主机网络(docker run --network=host): 完全应用 ...

  4. Go中使用seed得到相同随机数的问题

    1. 重复的随机数 废话不多说,首先我们来看使用seed的一个很神奇的现象. func main() { for i := 0; i < 5; i++ { rand.Seed(time.Now( ...

  5. 快学Scala 第一课 (变量,类型,操作符)

    Scala 用val定义常量,用var定义变量. 常量重新赋值就会报错. 变量没有问题. 注意:我们不需要给出值或者变量的类型,scala初始化表达式会自己推断出来.当然我们也可以指定类型. 多个值和 ...

  6. 使用 Docker 让部署 Django 项目更加轻松

    作者:HelloGitHub-追梦人物 文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 之前一系列繁琐的部署步骤让我们感到痛苦.这些痛苦包括: 要去服务器上执行 n 条命令 ...

  7. springboot使用百度富文本UEditor遇到的问题一览(springboot controller中request.getInputStream无法读取)

    先吐槽一下UEditor作为一个前端的js类库,非要把4种后端的代码给出来,而实际生产中用的框架不同,其代码并不具有适应性.(通常类似其它项目仅仅是给出数据交互的规范.格式,后端实现就可以自由定制) ...

  8. 从零开始的 phpstorm+wamp 组合下的debug环境搭建(纯小白向)

    本文主要是为了帮自己记住每次重装系统后需要干点啥,如果能帮到你,烦请给个好评 环境说明: 1. windows10 64bit 2. wampservers 3.0.6(x86) apache2.4. ...

  9. 为什么一个Http Header中的空格会被骇客利用 - HTTP request smuggling

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

  10. zoj 3886 Nico Number

    中文题面: 问题描述] 我们定义一个非负整数是“好数”,当且仅当它符合以下条件之一: 1. 这个数是0或1 2. 所有小于这个数且与它互质的正整数可以排成一个等差数列 例如,8就是一个好数,因为1,3 ...