Memcache+Cookie解决分布式系统共享登录状态------------------------------Why Memcached?
2013-07-13 11:40
246 查看
每个用户请求向IIS发送一个请求,但IIS服务器的请求数有限,cpu支持的线程数有限,如果一秒钟向这台服务器发送10000次,那么则一般就会有问题,考虑集群,
请求数据分流,几台服务器共同对应一个公共的IP向外部公开。
如三台服务器
一个用户登录到服务器,可以把用户的登录信息,session记录(三种方式寄存:1 InProc:进程存储 2 状态服务器方式存储,3 sessio数据据库中)
状态服务器方式存储,分布式缓存:memcached redies 主要流行两种,所以一般不选用第三种方案。
Why
l 高并发访问数据库的痛楚:死锁!
l 磁盘IO之痛:本机:AspNet:HttpRuntime.Cache(这个东档是microsoft做的不错折缓存)
l 多客户端共享缓存
l Net + Memory >> IO (一般速度是这样)
l 读写性能完美 Redies:Mm, 1s:读取可以1w次。 写:10w
l 超简单集群搭建 Cluster
l 开源 Open Source
l 没有提供主从赋值功能,也没提供容灾等功能,所以所有的代码基本都只是考虑性能最佳。
l 学习成本非常低,入门非常容易
l 丰富的成功的案例
原理:
l Socket 服务器端
l 数据:键值对存储
l 内存处理的算法:
• 本质就是一个大的哈希表。key最大长度是255个字符。
• 内存模型:Memcache预先将可支配的内存空间进行分区(Slab),每个分区里再分成多个块(Chunk)最大1MB,但同一个分区里:块的长度(bytes)是固定的。
• 插入数据:查找适合自己长度的块,然后插入,会有内存浪费。
• LRU,闲置>过期 >最少访问
• 惰性删除:它并没有提供监控数据过期的机制,而是惰性的,当查询到某个key数据时,如果过期那么直接抛弃。
l 集群搭建原理:
• Memcache服务器端并没有提供集群功能,但是通过客户端的驱动程序实现了集群配置。
• 客户端实现集群的原理:首先客户端配置多台集群机器的ip和端口的列表。然后客户端驱动程序在写入之前,首先对key做哈希处理得到哈希值后对总的机器的个数进行取余然后就选择余数对应的机器。
memcached的安装
l 下载Memcache:http://code.jellycan.com/Memcache/
l 将服务程序拷贝到一个磁盘上的目录
l 安装服务:cmd→Memcached.exe -d install 打开服务监控窗口可以查看服务是否启动。
l 启动服务:cmd→Memcached.exe -d start(restart重启,stop关闭服务)
l 检查服务是否启动:连接到Memcache控制台:telnet ServerIP 11211 输入命令:stats检查当前服务状态。
l 卸载服务:Memcached.exe -d uninstall
l 遇到问题:win8下安装服务。无法启动此程序,因为计算机中丢失 MSVCR71.dll。尝试重新安装该程序以解决此问题。下载dll地址:http://www.dll-files.com/dllindex/dll-files.shtml?msvcr71
向里面加一条数据
add k1 0 0 5 (说明,k1 key 第一个0占位,第二个是时间,无线缓存,第三个是长度)
说明如下:
将Memcache.exe安装为Windows服务:Memcache.exe -d install
启动Memcache服务:Memcache.exe -d start
启动Memcache服务(windows命令):net start "Memcache Server"
停止Memcache服务(windows命令):net stop "Memcache Server"
连接到Memcache控制台:telnet ServerIP 11211
打印当前Memcache服务器状态:stats
打印当前Memcache服务器Items(记录)的统计信息:stats items
打印当前Memcache服务器Slab(分区)及Chunk(块)的统计信息:stats slabs
打印指定Slab中的KEY列表(可用于遍历items,但效率较低,慎用!):stats cachedump SlabId Limit_num。显示结果:ITEM KeyName [ValueByteLength b; LastAccessTime s]。值得注意的是,经过测试确认:那个LastAccessTime并不是记录到期时间,而是最后一次的get时间,并且get之后,也不会自动延长expiry(到期时间)。
添加新记录:add KeyName 0 0 ValueByteLength [回车] ValueContent
删除记录 : delete KeyName
添加或更新记录 : set KeyName 0 0 ValueByteLength [回车] ValueContent
更新记录 : replace KeyName 0 0 ValueByteLength [回车] ValueContent
参考:http://www.cnblogs.com/lost-1987/articles/3069460.html
http://wenku.baidu.com/view/e30db586ec3a87c24028c401.html
也可以图形化监控 Memcached 的运行状态
http://livebookmark.net/journal/2008/05/21/memcachephp-stats-like-apcphp/
在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached Server 下面找到一个 ImagePath 的字符串项,正好是服务的执行路径的字符串,双击该串,在后面加入 -l 192.168.1.135 -m 45 -p 12345 (访问ip为:192.168.1.135 使用45M内存,12345为端口),再启动服务。
客户端来配置服务器的集群,而不是在服务器端来操作。只要在前端配置服务器的地址就可以了。
请求数据分流,几台服务器共同对应一个公共的IP向外部公开。
如三台服务器
一个用户登录到服务器,可以把用户的登录信息,session记录(三种方式寄存:1 InProc:进程存储 2 状态服务器方式存储,3 sessio数据据库中)
状态服务器方式存储,分布式缓存:memcached redies 主要流行两种,所以一般不选用第三种方案。
Why
l 高并发访问数据库的痛楚:死锁!
l 磁盘IO之痛:本机:AspNet:HttpRuntime.Cache(这个东档是microsoft做的不错折缓存)
l 多客户端共享缓存
l Net + Memory >> IO (一般速度是这样)
l 读写性能完美 Redies:Mm, 1s:读取可以1w次。 写:10w
l 超简单集群搭建 Cluster
l 开源 Open Source
l 没有提供主从赋值功能,也没提供容灾等功能,所以所有的代码基本都只是考虑性能最佳。
l 学习成本非常低,入门非常容易
l 丰富的成功的案例
原理:
l Socket 服务器端
l 数据:键值对存储
l 内存处理的算法:
• 本质就是一个大的哈希表。key最大长度是255个字符。
• 内存模型:Memcache预先将可支配的内存空间进行分区(Slab),每个分区里再分成多个块(Chunk)最大1MB,但同一个分区里:块的长度(bytes)是固定的。
• 插入数据:查找适合自己长度的块,然后插入,会有内存浪费。
• LRU,闲置>过期 >最少访问
• 惰性删除:它并没有提供监控数据过期的机制,而是惰性的,当查询到某个key数据时,如果过期那么直接抛弃。
l 集群搭建原理:
• Memcache服务器端并没有提供集群功能,但是通过客户端的驱动程序实现了集群配置。
• 客户端实现集群的原理:首先客户端配置多台集群机器的ip和端口的列表。然后客户端驱动程序在写入之前,首先对key做哈希处理得到哈希值后对总的机器的个数进行取余然后就选择余数对应的机器。
memcached的安装
l 下载Memcache:http://code.jellycan.com/Memcache/
l 将服务程序拷贝到一个磁盘上的目录
l 安装服务:cmd→Memcached.exe -d install 打开服务监控窗口可以查看服务是否启动。
l 启动服务:cmd→Memcached.exe -d start(restart重启,stop关闭服务)
l 检查服务是否启动:连接到Memcache控制台:telnet ServerIP 11211 输入命令:stats检查当前服务状态。
l 卸载服务:Memcached.exe -d uninstall
l 遇到问题:win8下安装服务。无法启动此程序,因为计算机中丢失 MSVCR71.dll。尝试重新安装该程序以解决此问题。下载dll地址:http://www.dll-files.com/dllindex/dll-files.shtml?msvcr71
向里面加一条数据
add k1 0 0 5 (说明,k1 key 第一个0占位,第二个是时间,无线缓存,第三个是长度)
说明如下:
将Memcache.exe安装为Windows服务:Memcache.exe -d install
启动Memcache服务:Memcache.exe -d start
启动Memcache服务(windows命令):net start "Memcache Server"
停止Memcache服务(windows命令):net stop "Memcache Server"
连接到Memcache控制台:telnet ServerIP 11211
打印当前Memcache服务器状态:stats
打印当前Memcache服务器Items(记录)的统计信息:stats items
打印当前Memcache服务器Slab(分区)及Chunk(块)的统计信息:stats slabs
打印指定Slab中的KEY列表(可用于遍历items,但效率较低,慎用!):stats cachedump SlabId Limit_num。显示结果:ITEM KeyName [ValueByteLength b; LastAccessTime s]。值得注意的是,经过测试确认:那个LastAccessTime并不是记录到期时间,而是最后一次的get时间,并且get之后,也不会自动延长expiry(到期时间)。
添加新记录:add KeyName 0 0 ValueByteLength [回车] ValueContent
删除记录 : delete KeyName
添加或更新记录 : set KeyName 0 0 ValueByteLength [回车] ValueContent
更新记录 : replace KeyName 0 0 ValueByteLength [回车] ValueContent
参考:http://www.cnblogs.com/lost-1987/articles/3069460.html
http://wenku.baidu.com/view/e30db586ec3a87c24028c401.html
也可以图形化监控 Memcached 的运行状态
http://livebookmark.net/journal/2008/05/21/memcachephp-stats-like-apcphp/
在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached Server 下面找到一个 ImagePath 的字符串项,正好是服务的执行路径的字符串,双击该串,在后面加入 -l 192.168.1.135 -m 45 -p 12345 (访问ip为:192.168.1.135 使用45M内存,12345为端口),再启动服务。
客户端来配置服务器的集群,而不是在服务器端来操作。只要在前端配置服务器的地址就可以了。
相关文章推荐
- MVC使用Memcache+Cookie解决分布式系统共享登录状态学习笔记6
- MVC使用Memcache+Cookie解决分布式系统共享登录状态学习笔记6
- Android Cookie共享到WebView避免再次登录(保持登录状态)
- Android Cookie共享到WebView避免再次登录(保持登录状态)
- Android Cookie共享到WebView避免再次登录(保持登录状态)
- js fetch函数请求数据时带上cookie以解决请求数据时server端返回"请登录"的状态
- 关于用户登录状态存session,cookie还是数据库或者memcache的优劣
- Android Cookie共享到WebView避免再次登录(保持登录状态)
- laravel 实现不同域名cookie共享 一个域名下登录 另一个域名下保持登录状态
- Android Cookie共享到WebView避免再次登录(保持登录状态)
- 关于用户登录状态存session,cookie还是数据库或者memcache的优劣
- Android Cookie共享到WebView避免再次登录(保持登录状态)
- session理论以及解决分布式系统下的session共享问题
- 使用 HttpModel与现有基于共享登录信息( Cookie )的网站进行集成
- linux下为php添加memcache扩展=>解决服务器集群session共享问题
- 服务器:消息18456,级别16,状态1 用户‘sa’登录失败解决方法
- Ubuntu16.04进入无限登录状态的解决办法
- php实现单点登录,顶级域名与子域名间共享Cookie实现单点登录原理。
- IE8多帐户登录的问题,不共享Cookie的方法
- session、cookie与“记住我的登录状态”的功能的实现