Redis学习秘籍(四)

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 数据库:放数据 增删改查 特点:非关系型数据库 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数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
5月前
|
存储 NoSQL Linux
小白带你学习linux的Redis基础(三十二)
小白带你学习linux的Redis基础(三十二)
76 0
|
4月前
|
存储 NoSQL Redis
redis源码学习
redis源码学习
|
5月前
|
存储 NoSQL Ubuntu
在Ubuntu上安装Redis并学习使用get、set和keys命令
在Ubuntu上安装Redis并学习使用get、set和keys命令
|
6月前
|
缓存 NoSQL Redis
【Redis 系列】redis 学习十六,redis 字典(map) 及其核心编码结构
【Redis 系列】redis 学习十六,redis 字典(map) 及其核心编码结构
|
6月前
|
NoSQL 算法 Redis
【Redis 系列】redis 学习十四,sorted_set 初步探究梳理
【Redis 系列】redis 学习十四,sorted_set 初步探究梳理
|
6月前
|
存储 NoSQL Redis
【Redis 系列】redis 学习十五,redis sds数据结构和底层设计原理
【Redis 系列】redis 学习十五,redis sds数据结构和底层设计原理
|
6月前
|
负载均衡 NoSQL Redis
【Redis 系列】redis 学习十,Redis 集群搭建和主从复制
【Redis 系列】redis 学习十,Redis 集群搭建和主从复制
|
4月前
|
NoSQL 中间件 API
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)(下)
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
86 2
|
4月前
|
NoSQL Java API
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)(上)
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
75 0
|
6月前
|
存储 NoSQL 算法
[Redis 系列]redis 学习 17,redis 存储结构原理 1
[Redis 系列]redis 学习 17,redis 存储结构原理 1