开发者社区> libin9iOak> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Redis学习秘籍(四)

简介: 数据库:放数据 增删改查 特点:非关系型数据库 NoSql(没有sql) 内存型数据库 key,value
+关注继续查看

11.3 使用StringRedisTemplate和RedisTemplate


两者的关系是StringRedisTemplate继承RedisTemplate。


两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。


SDR默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略。


StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。


RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。


@Autowired
private StringRedisTemplate stringRedisTemplate;  //对字符串支持比较友好,不能存储对象
@Autowired
private RedisTemplate redisTemplate;  //存储对象

@Test
public void testRedisTemplate(){
    System.out.println(redisTemplate);
    //设置redistemplate值使用对象序列化策略
    redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());//指定值使用对象序列化
    //redisTemplate.opsForValue().set("user",new User("21","小黑",23,new Date()));
    User user = (User) redisTemplate.opsForValue().get("user");
    System.out.println(user);
}


11.4.opsForXXX和boundXXXOps区别


//key的绑定操作 如果日后对某一个key的操作及其频繁,可以将这个key绑定到对应redistemplate中,日后基于绑定操作都是操作这个key

//boundValueOps 用来对String值绑定key

//boundListOps 用来对List值绑定key

//boundSetOps 用来对Set值绑定key

//boundZsetOps 用来对Zset值绑定key

//boundHashOps 用来对Hash值绑定key


@Test
public void test(){

    ValueOperations<String, String> valueOperations = stringRedisTemplate.opsForValue();
    valueOperations.set("name","zhangsan");
    valueOperations.append("name","this is good man");
    valueOperations.size("name");

    //String
    //stringRedisTemplate.boundValueOps()
    BoundValueOperations<String, String> nameOperations = stringRedisTemplate.boundValueOps("name");
    nameOperations.set("xiaochen");
    nameOperations.append("this is good man");
    nameOperations.size();

    //list
    ListOperations<String, String> listOperations = stringRedisTemplate.opsForList();
    listOperations.leftPush("lists","zhangsan");
    listOperations.size("lists");
    listOperations.range("lists",0,-1);

    BoundListOperations<String, String> listsOperations = stringRedisTemplate.boundListOps("lists");
    listsOperations.leftPush("zhangsan");
    listsOperations.leftPush("xiaozhang");
    listsOperations.size();
    listsOperations.range(0,-1);

    //stringRedisTemplate.boundSetOps()
    //stringRedisTemplate.boundZsetOps()
    //stringRedisTemplate.boundHashOps()
}


12. Redis 主从复制


40.jpg


5.x版本之后不支持


12.1 主从复制


主从复制架构仅仅用来解决数据的冗余备份,从节点仅仅用来同步数据


无法解决: 1.master节点出现故障的自动故障转移


12.2 主从复制架构图


41.png


12.3 搭建主从复制

这里给大家演示Redis伪分布式的搭建


**1.准备三台机器 **


2.准备三个配置文件


mkdir master slave1 slave2


3.复制三份配置文件到指定目录


cp redis-4.0.10/redis.conf master/


cp redis-4.0.10/redis.conf slave1/


cp redis-4.0.10/redis.conf slave2/


4.修改配置文件


vim master/redis.conf


master 修改以下配置:

port 7001
bind 0.0.0.0


vim slave1/redis.conf

slave1 修改以下配置:

port 7002
bind 0.0.0.0
slaveof 10.15.0.5 7001


vim slave2/redis.conf

slave2 修改以下配置:

port 7003
bind 0.0.0.0
slaveof 10.15.0.5 7001


42.png


# 5.启动3台机器进行测试
- cd /usr/redis/bin
- ./redis-server /root/master/redis.conf
- ./redis-server /root/slave1/redis.conf
- ./redis-server /root/slave2/redis.conf


13. Redis哨兵(Sentinel)机制


43.jpg


13.1 哨兵Sentinel机制


Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。简单的说哨兵就是带有自动故障转移功能的主从架构。


无法解决: 1.单节点并发压力问题 2.单节点内存和磁盘物理上限


13.2 哨兵架构原理


43.png


13.3 搭建哨兵架构

1.创建sentinel启动配置文件


mkdir sentinel


touch sentinel/sentinel.conf 新建sentinel.conf文件,名字绝对不能错;


2.配置哨兵,在sentinel.conf文件中填入内容:


在sentinel.conf中加入以下配置:


vim sentinel/sentinel.conf


sentinel monitor 被监控数据库名字(自己起名字) ip port 1


eg:


sentinel monitor aa 10.15.0.5 7001 1


说明:这个后面的数字2,是指当有两个及以上的sentinel服务检测到master宕机,才会去执行主从切换的功能。

3.将哨兵的启动脚本文件复制到redis目录下


cp redis-4.0.10/src/redis-sentinel /usr/redis/


4.进入redis目录指定配置文件启动rendis-sentinel


./redis-sentinel /root/sentinel/sentinel.conf


5.测试哨兵能否自动的作主节点故障转移


13.4 通过springboot操作哨兵


# redis sentinel 配置
# master书写是使用哨兵监听的那个名称
spring.redis.sentinel.master=mymaster
# 连接的不再是一个具体redis主机,书写的是多个哨兵节点
spring.redis.sentinel.nodes=192.168.202.206:26379


注意:如果连接过程中出现如下错误:RedisConnectionException: DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions: 1) Just disable protected mode sending the command ‘CONFIG SET protected-mode no’ from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 2)

解决方案:在哨兵的配置文件中加入bind 0.0.0.0 开启远程连接权限


44.png




版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
redis哨兵
redis,哨兵,sentinel
1461 0
Redis 哨兵Sentinel 高可用(学习笔记九)
1、redis sentinel 2、 3、一主二从: 主: redis-6379.conf port 6379 daemonize yes logfile "6379.
853 0
Redis介绍
Redis初识 常用数据类型
785 0
redis 学习指南
一、介绍 Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、一个高性能的key-value数据库。并提供多种语言的API。说到Key-Value数据库NoSQL数据库可以想到MongoDB。
930 0
redis 学习指南
一、介绍 Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、一个高性能的key-value数据库。并提供多种语言的API。说到Key-Value数据库NoSQL数据库可以想到MongoDB。
764 0
+关注
322
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载