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

概述

利用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 "";
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值