1、共同点:基于内存的NoSQL
2、Memcached看成Redis的前身
3、最大区别:MemCached(准确一点:不能叫数据库)---> 不支持持久化
4、了解:MemCached 参考讲义
memcached-1.4.25.tar.gz ----> 官方提供,但不具备复制功能
memcached-1.2.8-repcached-2.2.tar.gz ---> 日本工程师重写了官方版本,实现集群同步
二、Redis的安装与配置: hadoop111
1、安装Linux的rpm(Redis是C语言)
如果之前已经装了HUE,就有了
rpm -ivh libgomp-4.4.7-11.el6.i686.rpm
rpm -ivh libstdc++-devel-4.4.7-11.el6.i686.rpm
rpm -ivh kernel-headers-2.6.32-504.el6.i686.rpm
rpm -ivh glibc-headers-2.12-1.149.el6.i686.rpm
rpm -ivh glibc-devel-2.12-1.149.el6.i686.rpm
rpm -ivh ppl-0.10.2-11.el6.i686.rpm
rpm -ivh cloog-ppl-0.15.7-1.2.el6.i686.rpm
rpm -ivh mpfr-2.4.1-6.el6.i686.rpm
rpm -ivh cpp-4.4.7-11.el6.i686.rpm
rpm -ivh gcc-4.4.7-11.el6.i686.rpm
rpm -ivh gcc-c++-4.4.7-11.el6.i686.rpm
rpm -ivh telnet-0.17-48.el6.i686.rpm(对于Redis不需要,装MemCached才需要,作为MemCached的客户端)
2、
1.解压:tar -zxvf redis-3.0.5.tar.gz
2.编译:make
3.安装:make PREFIX=/root/training/redis install
4.Redis的配置文件:cp ~/tools/redis-3.0.5/redis.conf /root/training/redis/etc/
3、Redis提供的命令: bin目录
redis-benchmark 压力测试工具,如:模拟10000个客户端
redis-check-aof 检查AOF的备份文件
redis-check-dump(RDB) 检查RDB的备份文件
redis-cli Redis客户端
redis-sentinel Redis哨兵(实现Redis的HA)----> 监视:Master
redis-server Redis服务器
4、配置Redis
daemonize no: Redis是否以后天启动的方式启动 ---> yes
port 6379: 端口
(*)单机版
启动:bin/redis-server conf/redis_6379.conf
验证:ps -ef|grep redis
(*)集群
三、Redis的基本操作(跳过)----> 参考讲义
(*)Java API
(一)事务:transaction
Redis事务的本质:将一组操作放入一个队列
对比Oracle的事务和Redis的事务区别
Redis Oracle
语句: 操作命令 DML语句(增删改查)
本质: 放入队列 将DML操作成功写入日志文件
提交 exec commit
回滚 discard rollback
开启事务 multi 自动开启,以事务中第一条DML为标志。(MySQL:start transaction)
举例:转账
(1)没有事务
decrby tom 100
incrby mike 100
(2) 有事务
multi
decrby tom 100
incrby mike 100
exec
(二)事务中的锁:举例:买票
set ticket 1
set tom 1000
开启事务:
第一个客户端(人 tom)
multi
decrby ticket 1
decrby tom 100
exec
另外一个人:快
decrby ticket 1
(三)消息机制
1、消息的类型: Queue:队列(一对一)
Topic:主题(群发)
2、Redis只支持Topic,做一个聊天室,只支持字符串
3、消息的实现:(*)Redis和Kafka:只支持Topic
(*)JMS:Java Messaging Service,Java的消息服务,JavaEE标准之一
都支持:Queue和Topic
Weblogic,WebSphere,JBoss
4、Redis消息机制的结构
5、命令
?publish:发布消息
?格式:publish channel名称 “消息内容”
?subscribe: 订阅消息
?格式:subscribe channel名称
?psubscribe: 使用通配符定义消息
?格式:psubscribe channel*名称
1、RDB:快照(默认) ----> dump.rdb
(*)相当于定期给内存中的数据照一张照片
(*)相关参数
################################ SNAPSHOTTING ################################
从下往上看
时间
(秒) Key的个数
147 save 900 1 ----> 15分钟内,如果有1个key的value发生了变化,则执行RDB
148 save 300 10 ----> 300秒内,如果有10个key的value发生了变化,则执行RDB
149 save 60 10000 ----> 60秒内,如果有10000个key的value发生了变化,则执行RDB
其他参数:参考讲义P18页
(*)RDB问题:两次RDB之间,数据肯定会丢失
2、AOF:日志
(*)配置:默认禁用
509 appendonly yes
513 appendfilename "appendonly_6379.aof"
(*)测试:
(*)AOF产生的时机:什么时候记录日志?
# appendfsync always ---> 每个操作
appendfsync everysec ---> 每秒
# appendfsync no
(*)AOF日志的重写(overwrite): 使用压力测试
(*)当AOF超过64m时,发生重写
六、Redis的集群:功能:实现读写分离
1、Redis的集群:主从、实现读写分离(只能从主节点上写入)
从节点只读
2、体系结构和原理:参考讲义P20页
(*) 两种结构:星型模型、线型模型
3、配置星型模型
(*) cp redis_6379.conf redis_6380.conf
cp redis_6379.conf redis_6381.conf
(*) 修改主节点的配置文件
? 主节点:关闭rdb和aof即可
147 #save 900 1
148 #save 300 10
149 #save 60 10000
509 appendonly no
?从节点:slaveof 192.168.88.111 6379 ----> 我的主节点是谁
开启rdb和aof
6380:
50 port 6380
211 slaveof 192.168.88.111 6379
182 dbfilename dump_6380.rdb
514 appendfilename "appendonly_6380.aof"
6381:
50 port 6381
211 slaveof 192.168.88.111 6379
182 dbfilename dump_6381.rdb
514 appendfilename "appendonly_6381.aof"
启动:
[[email protected] redis]# bin/redis-server conf/redis_6379.conf
[[email protected] redis]# bin/redis-server conf/redis_6380.conf
[[email protected] redis]# bin/redis-server conf/redis_6381.conf