JAVA开发(Redis的使用,session共享)

 在分布式系统中,session的共享是不得不处理的事情,幸好springboot框架给我们集成了这个功能,它对应业务应用层完全是透明的,就是所谓的开箱即用,使我们用的毫无知觉。

maven依赖,

 
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.session</groupId>
        <artifactId>spring-session-data-redis</artifactId>
    </dependency>

在pom文件中只要引入了redis session插件,然后配上redis连接信息

redis连接信息配置:

spring:
  redis:
    host: 148.70.153.63
    port: 6379
    password: redis&%%$42
    maxIdle: 20
    minIdle: 10
    maxTotal: 100
    database: 2
    busiDb: 9
    boeDb: 2
    eximportDb: 5
    session:
      store-type: redis
  cache:
    type: redis

测试验证:

通过访问不同机器上的同一个服务。验证分布式session

@RestController
public class SessionController {
    @RequestMapping("/getSessionId")
    public String getSessionId(HttpServletRequest request) {
        String sessionId = request.getSession().getId();
        return sessionId;
    }
}

还可以设置session的过期时间

需要通过在启动类添加注解@EnableRedisHttpSession来指定Session过期时间。

如:

@SpringBootApplication
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 3600)
public class TestApplication {
    public static void main(String[] args) {
        SpringApplication.run(TestApplication .class, args);
    }
}

Redis详解

Redis(Remote Dictionary Server)是一个开源的、基于内存的键值对存储系统,提供了丰富的数据类型和操作,用于构建高性能、高可用的应用。以下是关于Redis的详解。

一、Redis的基本概念

  1. 数据类型:Redis支持多种数据类型,包括字符串、哈希表、列表、集合和有序集合。这些数据类型使得Redis可以用于多种应用场景,如缓存、消息队列、排行榜等。
  2. 键值对:Redis以键值对的形式存储数据,每个键对应一个唯一的数据值。键是字符串类型,值可以是不同数据类型的实例,如字符串、哈希表、列表等。
  3. 持久化:Redis支持将数据持久化到磁盘中,以便在系统重启或故障时恢复数据。持久化可以通过RDB(Redis DataBase)和AOF(Append Only File)两种方式实现。
  4. 事务:Redis支持事务功能,通过MULTI、EXEC和DISCARD命令来执行事务。事务可以确保多个命令的原子性执行,并且可以通过watch命令实现乐观锁机制。
  5. 发布/订阅模式:Redis支持发布/订阅模式,允许开发者实现实时消息系统、实时排行榜等功能。通过使用Pub/Sub命令,可以将消息发布到指定的频道,并由订阅该频道的客户端接收。

二、Redis的安装与配置

  1. 安装:Redis可以通过源码编译安装或者使用包管理器进行安装。常见的安装方式包括在Linux上使用apt-get或yum命令安装,在Windows上使用MSI安装程序安装等。
  2. 配置:Redis的配置文件通常位于redis.conf,其中包含了各种参数的配置选项,如端口号、日志文件路径、密码等。开发者可以根据实际需求进行配置调整。

三、Redis的应用场景

  1. 缓存:Redis作为内存数据库,可以作为缓存系统使用,提高应用的性能和响应速度。通过合理设置缓存过期时间和缓存策略,可以实现高效的缓存更新和替换机制。
  2. 消息队列:Redis的列表数据类型可以作为消息队列使用,实现异步消息处理和分布式系统中的消息传递。通过使用LPUSH和RPOP命令,可以实现消息的生产者和消费者模式。
  3. 排行榜:Redis的有序集合数据类型可以用于实现排行榜功能,如游戏排名、热门商品等。通过ZADD命令添加分数,ZRANGEBYSCORE和ZREVRANGEBYSCORE命令获取排名结果。
  4. 会话管理:Redis可以作为会话管理系统,存储用户会话数据,提高系统安全性和可靠性。通过将用户会话数据存储在Redis中,可以实现会话劫持保护和跨节点会话同步等功能。
  5. 分布式锁:Redis的原子性操作和事务功能可以用于实现分布式锁机制,确保多个节点之间的操作一致性和安全性。通过SETNX命令实现分布式锁的加锁操作,并通过定时任务或监听机制实现锁的自动释放和重试机制。

四、Redis的性能优化

  1. 内存优化:合理配置Redis的内存大小和数据存储方式,避免过高的内存占用和频繁的磁盘I/O操作。根据实际需求调整键值对的存储方式和数据结构的使用。
  2. 连接池:使用连接池可以减少创建和销毁连接的开销,提高系统的并发处理能力。合理配置连接池的大小和连接超时时间等参数。
  3. 异步处理:对于非实时要求的操作,可以采用异步处理方式,提高系统的响应速度和吞吐量。例如使用Redis的发布/订阅模式实现异步消息处理。
  4. 缓存策略:根据实际需求选择合适的缓存策略,如LRU(Least Recently Used)策略或TTL(Time To Live)策略等。通过合理设置缓存过期时间和缓存替换机制,提高缓存利用率和性能。
  5. 压缩数据:对于存储的数据进行压缩处理,可以减少内存占用和提高网络传输效率。Redis支持对字符串类型的数据进行压缩存储。
  6. 持久化优化:根据实际需求选择合适的持久化方式(RDB或AOF),并调整相关参数如持久化频率和同步策略等,以平衡数据安全性和性能。
  7. 多线程处理:在一些高并发场景下,可以考虑使用多线程处理来提高系统的吞吐量。但需要注意的是,Redis本身是单线程模型,多线程处理主要应用于客户端或代理层的优化。
  8. 监控与调优:定期监控Redis的性能指标如CPU使用率、内存占用、QPS等,并根据实际情况进行调整和优化。同时可以借助第三方工具如Redis Exporter、Prometheus等来实现更全面的监控和告警功能。
  9. 安全与防护:确保Redis的安全性,采取措施如密码验证
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋力向前123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值