正好有时间,总结一下最近使用的一些技术,也算是为2016年画上一个完美的句号,回顾2016年,感受颇多,感恩那些帮助我的人。展望2017年,我相信一定会遇到一个更好的自己。附上自己喜欢的一张图片:
好了~~~装逼结束,下面开始说说如何实现分布式缓存在项目中的应用。
part2:先分析以下需求软件架构从单机到分布式遇到的问题(当然这是一个很深的问题,由于能力有限今天就说说如何实现用户信息的分布式存储的问题),也就是:走向分布式第一步:多台机器共享用户登录状态,该如何实现?例如:现在有三台机器组成了一个web的应用集群,其中一台机器用户登录,然后其他另外两台机器共享登录状态?具体请看下面的图示:
问题:如果有一个用户第一次登陆的时候,负载均衡把该用户分配到IIS1这台服务器上,该用户的信息就会被保留到IIS1这台服务器上,但是如果该用户再次访问其他的web资源的时候,被分配到IIS2上,这是IIS2中,没有改用户的信息,会发生什么?该怎么解决?该选用什么介质来保存状态比较合适?
从图中可以看出就是保存对应用户的信息,可能有人会用下面的几种方法:1)直接保存到进程内session中;2)使用ASP.Net进程外session;3)用数据库存储当前登录状态;4)微软的状态服务器
当然了,使用上面的三种方法不是不可以,但是从网站的整体性能上考虑,确实不太完美,影响系统性能。下面来一一分析这三种方法的缺点:
1)直接保存到进程内session中
缺点:IIS中由于有进程回收机制,系统繁忙的时候session回丢失,IIS重启也会造成session的丢失,这样用户就要重新登录或重新添加购物车、验证码等再放到session中。如果要是把重要敏感的数据放到session中,这是在作死的节奏~~~~
2)使用ASP.Net进程外session 3)用数据库存储当前登录状态
缺点:这两种方式效率会比较慢,性能也不是很好,而且无法捕获session的end事件。
4)微软的状态服务器
缺点:性能不好。
下面欢迎Memcached登场!1)高并发访问数据库的痛:死锁
2)磁盘IO之痛
3)读写性能完美
4)超简单的集群搭建Cluster
5)开源
6)性能最佳
7)丰富的成功案例
Memcached是一个高性能的支持分布式的内存存储系统。你可以把他看成一个巨大的hash表。形式入:
Key(键) Value(值)
唯一键值(String) 基本数据(整型, 浮点型,字串,布尔) ,复合类型 (数组, 对象) ,特殊类型(NULL, 不能存放资源), 二进制数据(图片,视频,音频)
注意:Redis在存入对象的时候,不能直接存入,而是要先序列化,然后再存入,使用的时候,再反序列化。
(1) 下载安装文件 memcached.exe
(2) 安装指令cmd>{%mem%}/memcached.exe -d install
(3) 使用cmd>{%mem%}/memcached -d start 【启动】
如果启动成功,我们可以使用
cmd>netstat -an
如果发现有一个 11211端口在监听则说明你的服务OK
补充:
我们也可以把memcached当做一个程序来使用,
cmd>{%mem%}/memcached.exe -p 端口号
(4) 使用telnet工具登录到Memcached 中进行操作
cmd>telnet 127.0.0.1 11211
注意:Memcached安装不成功的原因和解决
可能安装失败的原因分析
6.1 如果你是用win7,win8系统,他对安全性要求高,因此,需要大家使用管理员的身份来安装和启动. 具体是 程序开始===>所有程序==》附件==》cmd(单击右键,选择以管理员的身份来执行)
6.2 存放memcache.exe 目录不要有中文或者特殊字符
6.3 安装成功,但是启动会报告一个错误信息,提示缺少xx.dll ,你可以从别的机器拷贝该dll文件,然后放入到system32下即可,并执行【然后打开“开始-运行-输入regsvr32 /s MSVCR71.dll”,回车即可解决错误提示!】,这是因为有些电脑上装的操作系统是阉割版的。
6.4 如果上面三个方法都不可以,你可以直接这样启动mem
cmd>memcached.exe -p 端口 【这种方式不能关闭窗口】
首先要登录到mem上
cmd>telnet 127.0.0.1 11211
(1 ) 添加
举例
add key1 0 60 5
(2) 查询
get key
举例
get key1
(3) 修改
有两种
set key 0 效时间 数据大小
举例
set key1 0 60 5
replace key 0 效时间 数据大小
(4) 删除
delete key
举例
delete key1
还有一种方式:
flush_all
(1) 查看mem的使用状态
为了大家可以详细了解,再附上一张图片:
(2) 其它指令
1)基于c/s架构,协议简单:
c/s架构,此时memcached为服务器端,我们可以使用如PHP,c/c++等程序连接memcached服务器。
memcached的服务器客户端通信并不使用XML等格式,而使用简单的基于文本行的协议。因此,通过telnet也能在memcached上保存数据、取得数据。
2)内存处理的算法: