Redis学习秘籍(四)

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容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
目录
相关文章
|
1月前
|
NoSQL 数据可视化 Linux
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
本文介绍了Redis的两个可视化管理工具:付费的Redis Desktop Manager和免费的Another Redis DeskTop Manager,包括它们的下载、安装和使用方法,以及在使用Another Redis DeskTop Manager连接Redis时可能遇到的问题和解决方案。
111 1
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
|
5月前
|
存储 NoSQL Redis
Redis系列学习文章分享---第十六篇(Redis原理1篇--Redis数据结构-动态字符串,insert,Dict,ZipList,QuickList,SkipList,RedisObject)
Redis系列学习文章分享---第十六篇(Redis原理1篇--Redis数据结构-动态字符串,insert,Dict,ZipList,QuickList,SkipList,RedisObject)
82 1
|
1月前
|
NoSQL Linux Redis
Docker学习二(Centos):Docker安装并运行redis(成功运行)
这篇文章介绍了在CentOS系统上使用Docker安装并运行Redis数据库的详细步骤,包括拉取Redis镜像、创建挂载目录、下载配置文件、修改配置以及使用Docker命令运行Redis容器,并检查运行状态和使用Navicat连接Redis。
218 3
|
1月前
|
NoSQL Java Redis
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
这篇文章介绍了如何使用Spring Boot整合Apache Shiro框架进行后端开发,包括认证和授权流程,并使用Redis存储Token以及MD5加密用户密码。
24 0
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
|
1月前
|
存储 Prometheus NoSQL
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
22 3
|
5月前
|
NoSQL Java Redis
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
83 0
|
5月前
|
存储 消息中间件 缓存
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
96 0
|
5月前
|
存储 NoSQL 算法
Redis系列学习文章分享---第十篇(Redis快速入门之附近商铺+用户签到+UV统计)
Redis系列学习文章分享---第十篇(Redis快速入门之附近商铺+用户签到+UV统计)
39 0
|
5月前
|
存储 NoSQL Redis
Redis系列学习文章分享---第九篇(Redis快速入门之好友关注--关注和取关 -共同关注 -Feed流实现方案分析 -推送到粉丝收件箱 -滚动分页查询)
Redis系列学习文章分享---第九篇(Redis快速入门之好友关注--关注和取关 -共同关注 -Feed流实现方案分析 -推送到粉丝收件箱 -滚动分页查询)
60 0
|
5月前
|
消息中间件 负载均衡 NoSQL
Redis系列学习文章分享---第七篇(Redis快速入门之消息队列--List实现消息队列 Pubsub实现消息队列 stream的单消费模式 stream的消费者组模式 基于stream消息队列)
Redis系列学习文章分享---第七篇(Redis快速入门之消息队列--List实现消息队列 Pubsub实现消息队列 stream的单消费模式 stream的消费者组模式 基于stream消息队列)
71 0