大数据学习20:MemCached

1、NoSQL数据库:Redis基于内存NoSQL数据库
前身是MemCached

2、大数据的实时计算:Apache Storm
集成Storm和Redis

一、为什么要把数据存入内存?

1、原因:快
2、举例:在B/S如何从架构的角度上,提高性能
3、常见的内存数据库
	(*)MemCached:严格来说,不是数据库,只能叫缓存,因为不支持持久化
	(*)Redis:支持持久化(RDB、AOF)
	(*)Oracle TimesTen
	(*)SAP HANA

二、MemCached

1、体系架构和基本原理
	(*) 就是在内存中,维护一张巨大Hash表,基于<key value>
	(*) 由客户端实现路由算法,来决定数据到底保存到哪一个MemCached实例
	
	(*)补充:路由功能(负载均衡)  有两种方式
			(1)由服务器端实现 :nginx
			(2)由客户端实现:MemCached,Spring Cloud(微服务)

	(*)需要有gcc的编译器
	
	(*)安装libevent
		(1) 确定是否已经安装?
			rpm -qa|grep libevent
				libevent-2.0.21-4.el7.x86_64  ----> 已经装好
		    删除原来的
			    rpm -e libevent-2.0.21-4.el7.x86_64 --nodeps (不要删除依赖库)
			
		(2) 安装Libevent  
			tar -zxvf libevent-2.0.21-stable.tar.gz
			安装到  /root/training/libevent
				./configure --prefix=/root/training/libevent
				make
				make install
	
	(*)安装MemCached
			tar -zxvf memcached-1.4.25.tar.gz
			./configure --prefix=/root/training/memcached --with-libevent=/root/training/libevent
			make
			make install
		
	(*)启动
			bin/memcached -u root -d -m 128  ----> 默认端口:11211
			bin/memcached -u root -d -m 128 -p 11212
			bin/memcached -u root -d -m 128 -p 11213

3、操作MemCached
	(1) 命令行:MemCached没有命令行工具
	            使用telnet作为MemCached命令行
		(*)安装telnet工具
				挂载光盘 mount /dev/cdrom /mnt
				rpm -ivh telnet-0.17-64.el7.x86_64.rpm
				
		(*)连接MemCached
		      telnet 127.0.0.1 11211
			  
		(*)插入数据 set、add
				set:如果key存在,用新值替换原来的值
				add:如果key存在,出错
				
				举例:set key1 0 0 4
				          第一个0:标志位
						  第二个0:数据过期的时间,0表示永远不过期
						  4表示:插入数据的长度
						  
		       统计信息的命令:
				stats 
				stats items
				stats slabs
				
			退出telnet:ctrl + ]
			            quit

	(2) Java

4、MemCached路由算法:由客户端实现
	MemCached路由算法:由客户端实现分布式存储
		   类似:Redis中的Cluster(分布式存储)----> 由服务端实现
		   (1)求余数
				缺点:如果需要扩容或者有宕机的情况,数据的丢失会比较严重
				
				举例:
				数据:1   2    3    4    5    6    7    8     9    10
	三台MemCached     1   2    0    1    2    0    1    2     0     1
	扩容:4台         1   2    3    0    1    2    3    0     1     2
		   
		   
		   (2)一致性Hash算法 -------> 类似Redis
				在一定程度上,解决求余数的路由算法的缺点
				扩容或者有宕机的情况,把数据的丢失减少到最小
		   
		   参考讲义:P6页	



5、MemCached主主复制:日本工程师改写
	tar -zxvf memcached-1.2.8-repcached-2.2.tar.gz
	./configure --prefix=/root/training/memcached_replication --with-libevent=/root/training/libevent --enable-replication
	
	参考讲义P8
	
	建立软连接
	32位:ln -s /root/training/libevent/lib/libevent-2.0.so.5 /usr/lib/libevent-2.0.so.5
	64位:ln -s /root/training/libevent/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5
	
	注意:停止原来在11211上的memcached

三、Redis

1、Redis简介和特点
	(*) 前身:MemCached
	(*) 区别:支持持久化:RBD、AOF
	          丰富的数据类型

2、安装配置Redis:需要gcc
	tar -zxvf redis-3.0.5.tar.gz 
	make 
	make PREFIX=/root/training/redis install
	
	命令脚本
	redis-benchmark   压力测试工具(测试AOF日志重写会用到)
	redis-check-aof   检查AOF日志文件
	redis-check-dump  检查RDB快照文件
	redis-cli         客户端
	redis-sentinel    哨兵,实现主从复制的HA(版本:2.4+)
	redis-server      启动和停止Redis Server
	
	核心的配置文件:需要从源码中拷贝
	cp ~/tools/redis-3.0.5/redis.conf conf/

	参数
	daemonize no  是否以后台运行的方式启动Redis,建议yes
	port 6379     端口号
	
	启动 
	bin/redis-server conf/redis.conf 


	[root@bigdata111 redis]# bin/redis-server --help
	Usage: ./redis-server [/path/to/redis.conf] [options]
		   ./redis-server - (read config from stdin)
		   ./redis-server -v or --version
		   ./redis-server -h or --help
		   ./redis-server --test-memory <megabytes>

	Examples:
		   ./redis-server (run the server with default conf)
		   ./redis-server /etc/redis/6379.conf
		   ./redis-server --port 7777
		   ./redis-server --port 7777 --slaveof 127.0.0.1 8888
		   ./redis-server /etc/myredis.conf --loglevel verbose

	Sentinel mode:
		   ./redis-server /etc/sentinel.conf --sentinel


	bin/redis-cli --help
上一篇:ubuntu 编译安装libevent


下一篇:libevent 源码学习九 —— 集成定时器事件