零、介绍:点击打开链接
缓存框架市场情况
1) Ehcache 最早出现成型的缓存框架,它是所有框架最爱选择的内部集成默认框架hibernate,spring,mybaits(有个弱点是单机,目前不知道是否支持分布式,现在很少用)
2) Memcache产品非常棒,使用10多年,现在很多公司产品仍然在使用这个产品(分布式)大型项目构建都使用它。致命缺点:不落地(内存有限,一旦掉电以辛苦存的数据就瞬间丢失了)。支持数据结构kv string。多线程
3) Redis替代MemCache,改善了两个方面。a.落地、b.掉电以后可以快速回复现场,它每秒落地一次,所以即使掉电丢失也只丢失1s的数据。数据结构支持更多b.string/hash/list/set/orderedset(在百万的级别,redis和memcache性能伯仲之间,业务慢)单线程+多实例(单机多实例)
Redis用c语句写。Jvm中有native区(该区是c语言的地盘)
缓存的数据是可以丢失的,丢失了可以再从数据库获取。
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
也叫做非结构化数据。nosql典型代表。not only sql。spark SQL
nginx性能高 5w/s
Redis性能高 5w/s
一、安装
3个节点
两个物理机(虚拟机),在一台物理机(虚拟机)创建2个实例
默认redis有16个数据库,数据库名称不能更改,默认是0到15
incr/decr网站统计值都用它来自加,自减。c语言,redis命令
MemCache string 几百k。Redis string512m
虚拟机复制后,新的redis中有无数据?
重启redis,之前数据是存在的。
复制redis,也有数据。需要flushall先把脏数据清除。
二、问题和解决
使用自己的redis客户端(shell)连接redis服务器
1.查看防火墙策略有策略删掉策略
2.打开redis服务器的远程访问
问题
解决
3.关闭redis的保护模式
问题:
解决:
4.命令
(1)开启命令:redis-server 配置文件 &
(2)查看redis是否是启动的:ps -ef | grep redis
(3)登录客户端:redis-cli -h ip地址 -p 端口号
(4)查看某个key中的数据:Lrange key start end
(5)进入redis:设置口令
api中也要登录才行
三、使用
1.分片:将多个redis的内存合为一个整体使用
(1)安装三个redis
(2)编程jedis来讲三个redis来结合起来
引入jedis的jar包:
<!-- jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.6.0</version>
</dependency>
编程:
public void test02(){
List<JedisShardInfo> list = new ArrayList<JedisShardInfo>();
JedisShardInfo jedisShardInfo1 = new JedisShardInfo("192.168.239.129", 6379);
list.add(jedisShardInfo1);
JedisShardInfo jedisShardInfo2 = new JedisShardInfo("192.168.239.130", 6379);
list.add(jedisShardInfo2);
JedisShardInfo jedisShardInfo3 = new JedisShardInfo("192.168.239.130", 6380);
list.add(jedisShardInfo3);
ShardedJedis shardedJedis = new ShardedJedis(list);
String string = shardedJedis.get("f5efb82a4fe18e09406b1b57cc0d2e55");
System.out.println(string);
shardedJedis.set("china", "北京");
String string1 = shardedJedis.get("china");
System.out.println(string1);
for(int i=0;i<100;i++){
shardedJedis.set("n"+i, ""+i);
}
}
(3)问题
先是两个节点分片,然后又新增一个服务器,将分片扩充到三个节点
有无效数据(僵尸数据)
新扩充节点,法则 hash(key)% n来分布数据,获取数据也是从放的地方获取
所以不用处理僵尸数据:自动删除过期数据策略,默认策略LRU(最近最久未使用)
开发人员根本不关心
2.主从复制,实时备份
(1)设置三个配置文件
(2)将master和两个slave关联
在slave节点上执行slaveof master-host port
info查看主 role:master,看slave数量
(3)操作
1)当从挂接到主上时,自动同步数据,success
2)挂接完成,当主的信息新增,修改,删除变化动作,从上就会也执行相应语句。
3.集群高可用(哨兵sentinel)
(1)介绍
redis提供两种高可用,哨兵,集群
哨兵 sentinel.conf,redis3.0之后才实现
启用哨兵,必须两个以上
它类似zookeeper管理整个集群,心跳,如果某个服务器不回应。宣布死亡,要从节点的所有从节点中选举一个服务器作为新的继任者。
切换过程不是立即,尝试1分钟。如果这个时间内,主master又重启加入集群,继续。
(2)配置setinel.conf
1)修改端口
2)sentinel.conf中如下配置在变动,表示哨兵管理的集群的主节点,这样哨兵和管理的集群就联系起来了
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel monitor mymaster 127.0.0.1 6380 2
(3)启动
redis-sentinel sentinel.conf