您的位置:首页 > 数据库 > Redis

spring-cloud微服务(6) redis-cluster cookie

2020-07-31 21:27 841 查看

文章目录

概述

利用redis来存储数据,优先访问redis,再访问数据库,提高查询效率。

  1. redis的存储规则是key-value的形式.如set name[key] zb[value]。
  2. 存储在内存中,效率高。

实际开发中有单节点,哨兵进程管理主从,两两相连的cluster.

redis-cluster的搭建

而redis-cluster是通过key连接槽道,槽道连接指定节点。若节点宕机,可以通过迁移槽道,做到key的迁移。
主节点和从节点做备份,集群各节点之前两两相连。

1.启动redis的集群脚本后,查看集群状态

进入任意节点,查看状态
]# redis-cli -c -h [host] -p [port] //进入指定节点
]# cluster nodes //获取节点状态

集群中有3个master,3个slave, 各节点之间两两相连。每个master有一个slave备份。
上述信息的含义是:
1.节点ID 2.节点IP:端口号 3.节点角色 4.当前主节点ID 5.创建时间 6.操作时间 7.在集群中的编号 8.状态 9.所属于的槽道

2.spring-cloud添加redis

application.properties添加配置:

# redis配置
# 单节点
#spring.redis.host=
#spring.redis.port=9000
# 哨兵集群
#spring.redis.sentinel.nodes=10.9.9.9:26379,10.10.0.0:26380
#spring.redis.sentinel.master=zbmaster
# redis-cluster集群
spring.redis.cluster.nodes=10.42.154.11:8000,10.42.154.11:8001,10.42.154.11:8002

pom.xml配置

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
</dependency>
<!--jedis依赖-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<!--springboot整合的redis依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
</dependency>

3.代码编写

编写一个登陆接口,将登陆信息存放在cookie和redis中,读取显示一下

controller
将ticket存入cookie

@RequestMapping("/user/manage/login")
public SysResult doLogin(User user, HttpServletRequest request, HttpServletResponse response) {
String ticker = iuser.doLogin(user);
if ("".equals(ticker) || ticker == null) {
return SysResult.build(201, "登录失败", null);
}else {
CookieUtils.setCookie(request, response, "EM_TICKER", ticker);
return SysResult.ok();
}
}

先查询redis是否已经存在key,存在则删除
再计算新的(ticket, 用户信息json)写入redis.

@Override
public String doLogin(User user) {
String ticket="";
//数据库中查询的操作忽略了,这里只是一个演示,不重要
ticket="EM_TICKET_"+user.getUser_name()+System.currentTimeMillis();

String loginKey="login_"+user.getUser_name();
if(template.hasKey(loginKey)){
//登录过,取ticket
String ticketLaster=template.opsForValue().get(loginKey);
//删除ticket记录
template.delete(ticketLaster);
}

try {
String userJson=mapper.writeValueAsString(user);
template.opsForValue().set(ticket,userJson,
60*60*2, TimeUnit.SECONDS);
template.opsForValue().set(loginKey,ticket,
60*60*2,TimeUnit.SECONDS);
return ticket;

} catch (JsonProcessingException e) {
e.printStackTrace();
return "";
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: