学习笔记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:优先使用未使用内存---->过期内存----->最近最少使用内存,惰性删除
学习笔记47_关于Session局限性问题,Memcache的更多相关文章
- openresty 学习笔记六:使用session库
openresty 学习笔记六:使用session库 lua-resty-session 是一个面向 OpenResty 的安全和灵活的 session 库,它实现了 Secure Cookie Pr ...
- Beego 学习笔记14:Session控制
Session控制 1> Session常用来作为全局变量使用,比如记录当前登录的用户,或者页面之间传递数据使用. 2> Beego框架内置了 session 模块,目前 ...
- [原创]java WEB学习笔记34:Session 案例 之 解决表单重复提交
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- [原创]java WEB学习笔记33:Session 案例 之 购物车
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- Javaweb学习笔记5—Cookie&Session
今天来讲javaweb的第五阶段学习. Cookie和Session同样是web开发常用到的地方. 老规矩,首先先用一张思维导图来展现今天的博客内容. ps:我的思维是用的xMind画的,如果你对我的 ...
- PHP学习笔记:使用session来存储用户的登录信息
session可以用来存储多种类型的数据,因此具有很多的用途,常用来存储用户的登录信息,购物车数据,或者一些临时使用的暂存数据等. 用户在登录成功以后,通常可以将用户的信息存储在session中,一般 ...
- PHP学习笔记14-操作session
PHP会话管理图: 创建index: <?php /** * Created by PhpStorm. * User: Administrator * Date: 2015/7/2 * Time ...
- node学习笔记9——cookie,session相关操作
下面讲的都是基Express及相关的包.所以在实践本篇文章之前,通过npm安装好Express, cookie-parser, cookie-session这三个安装包. 先简单说一下,如何用Expr ...
- Python Web学习笔记之Cookie,Session,Token区别
一.Cookie,Session,Token简介 # 这三者都解决了HTTP协议无状态的问题 session ID or session token is a piece of data that i ...
随机推荐
- yum install php-gd 安装php gd库报错Error: php56w-common conflicts with php-common-5.3.3-48.el6_8.x86_64 大
yum install php-gd安装php gd库报错Error: php56w-common conflicts with php-common-5.3.3-48.el6_8.x86_64大概的 ...
- Windows Error的错误代码
时不时会用到,记录下 0操作成功完成. 1功能错误. 2系统找不到指定的文件. 3系统找不到指定的路径. 4系统无法打开文件. 5拒绝访问. 6句柄无效. 7存储控制块被损坏. 8存储空间不足,无法处 ...
- 四 mysql之单表查询
目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 1. 什么是分组?为什么要分组? 2. ONLY_FULL_GROUP_BY ...
- redis查找大key
redis中查找出比较大的key 下面直接上代码 (请在测试机上测试) #!/usr/bin/env python import sys import redis def check_big_key( ...
- Vue入门教程 第三篇 (条件与循环)
v-if语法(条件) 符合条件时显示(渲染)某一元素. <div id="app"> <div v-if="ok"> <h1> ...
- Java并发——线程间的等待与通知
前言: 前面讲完了一些并发编程的原理,现在我们要来学习的是线程之间的协作.通俗来说就是,当前线程在某个条件下需要等待,不需要使用太多系统资源.在某个条件下我们需要去唤醒它,分配给它一定的系统资源,让它 ...
- HDU 1428漫步校园
漫步校园 Problem Description LL最近沉迷于AC不能自拔,每天寝室.机房两点一线.由于长时间坐在电脑边,缺乏运动.他决定充分利用每次从寝室到机房的时间,在校园里散散步.整个HDU校 ...
- Java序列化总结(最全)
概念 实现 Serializable 接口, 它只是一个标记接口,不实现也能够进行序列化 RMI: 远程方法调用 RPC: 远程过程调用 序列化ID 解决了序列化与反序列出现代码不一致的问题, 不一致 ...
- windows上gedit 安装
1. 用浏览器打开https://wiki.gnome.org/Apps/Gedit 下载并安装 gedit 文本编辑器.这个操作无需管理员权限. 2. 把 gedit 放到桌面或者快速启动栏,这样你 ...
- 虚拟机桥接模式下将虚拟IP设为静态IP
一:虚拟机设置桥接模式 1.进入虚拟机设置中将网络适配器设置成桥接模式,如下图 2.编辑--虚拟网络编辑器--选择桥接 3.如上图中桥接模式下的桥接到--将自动改成与本机匹配的虚拟网卡,本机虚拟网卡查 ...