当前位置: 代码网 > it编程>编程语言>Java > SpringBoot集成Redis之配置、序列化与持久化方式

SpringBoot集成Redis之配置、序列化与持久化方式

2024年11月25日 Java 我要评论
一、简介什么是redisredis是一个开源的、基于内存的高性能键值对存储数据库,支持多种数据结构如字符串、哈希、列表、集合等。它以其卓越的性能、高可用性和持久性而广受欢迎。为什么要使用redisre

一、简介什么是redis

redis是一个开源的、基于内存的高性能键值对存储数据库,支持多种数据结构如字符串、哈希、列表、集合等。

它以其卓越的性能、高可用性和持久性而广受欢迎。

为什么要使用redis

redis的使用可以解决以下问题:

  1. 低延迟读写:提升用户体验。
  2. 支撑海量数据和流量:适用于大数据和高流量的应用。
  3. 大规模集群管理:简化分布式应用的部署和管理。
  4. 成本考量:降低硬件、软件和人力成本。

二、常用redis类型及操作

1. string类型

介绍:最基本的数据存储类型,用于存储单个数据。

基本操作

  • 添加/修改数据:set key value
  • 获取数据:get key
  • 删除:del key

2. hash类型

介绍:存储键值对集合,适用于存储对象。

基本操作

  • 添加/修改数据:hset key field value
  • 获取数据:hget key field
  • 删除数据:hdel key field

3. list类型

基本概念:存储有序的数据集合。

基本操作

  • 添加/修改数据:lpush key value(左侧添加),rpush key value(右侧添加)
  • 获取数据:lrange key start stop
  • 获取并移除数据:lpop key(左侧移除),rpop key(右侧移除)

4. set类型

基本介绍:存储不重复的集合。

基本操作

  • 添加数据:sadd key member
  • 获取数据:smembers key
  • 删除数据:srem key member

5. sorted set (zset)

概念:存储可排序的集合。

基本操作

  • 添加数据:zadd key score member
  • 获取全部数据:zrange key start stop
  • 删除数据:zrem key member

三、spring boot整合redis

引入依赖

pom.xml中添加以下依赖:

<dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-data-redis</artifactid>
</dependency>
<dependency>
    <groupid>org.apache.commons</groupid>
    <artifactid>commons-pool2</artifactid>
    <version>2.6.0</version>
</dependency>

配置yaml

application.yml中配置redis连接信息:

spring:
  redis:
    host: 自己的ip
    port: 自己的端口号  # 默认 6379
    database: 0  # redis使用的数据库
    timeout: 18000  # 连接超时事件毫秒
    password: yourpassword  # 密码(如果需要)
    lettuce:
      pool:
        max-active: 20  # 连接池最大连接数
        max-idle: 5  # 最大阻塞等待时间
        min-idle: 0  # 连接池最小空闲连接

redistemplate模版序列化配置

配置redistemplate以使用json序列化:

import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;
import org.springframework.data.redis.connection.lettuce.lettuceconnectionfactory;
import org.springframework.data.redis.core.redistemplate;
import org.springframework.data.redis.serializer.genericjackson2jsonredisserializer;
import org.springframework.data.redis.serializer.stringredisserializer;

import java.util.arrays;

@configuration
public class redisconfig {
    @bean
    public redistemplate<string,object> redistemplate(lettuceconnectionfactory lettuceconnectionfactory){
        redistemplate<string, object> redistemplate = new redistemplate<>();
        redistemplate.setconnectionfactory(lettuceconnectionfactory);
        redistemplate.setkeyserializer(new stringredisserializer());
        redistemplate.setvalueserializer(new genericjackson2jsonredisserializer());
        redistemplate.sethashkeyserializer(new stringredisserializer());
        redistemplate.sethashvalueserializer(new genericjackson2jsonredisserializer());
        redistemplate.afterpropertiesset();
        return redistemplate;
    }
}

redis的demo案例

以下是一个简单的测试案例,展示如何使用redistemplate

import org.junit.jupiter.api.test;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.boot.test.context.springboottest;
import org.springframework.data.redis.core.redistemplate;
import java.util.hashmap;
import java.util.map;
import java.util.concurrent.timeunit;

@springboottest
public class redistest {
    @autowired
    redistemplate<string, object> redistemplate;

    @test
    public void teststring() {
        string key = "name";
        string name = "dession";
        redistemplate.opsforvalue().set(key, name);
        redistemplate.expire(key, 1, timeunit.days);
        system.out.println("retrieved from redis: " + redistemplate.opsforvalue().get(key));
    }

    @test
    public void testhash() {
        string key = "users";
        redistemplate.opsforhash().put(key, "name", "zhangsan");
        redistemplate.expire(key, 1, timeunit.days);
        map<string, object> map = new hashmap<>();
        map.put("age", 12);
        map.put("sex", "男");
        redistemplate.opsforhash().putall(key, map);
        object name = redistemplate.opsforhash().get(key, "name");
        system.out.println("name from hash: " + name);
    }
}

四、高级特性与安全性

高级特性

  • 持久化:redis支持rdb和aof两种持久化方式,确保数据的安全性。
  • 复制:通过主从复制,可以提高数据的可用性和读取性能。
  • 哨兵模式:用于实现高可用性,自动故障转移。
  • 集群:支持数据分片,提高存储和处理大规模数据集的能力。

安全性

  • 密码认证:配置requirepass指令设置密码,确保只有授权用户可以访问redis。
  • 网络隔离:将redis部署在内网中,避免直接暴露在公网上。
  • tls/ssl:使用tls/ssl加密数据传输,保护数据在传输过程中的安全。

五、性能优化

  • 选择合适的数据类型:根据使用场景选择合适的数据类型,可以提高性能和降低内存使用。
  • 调整内存使用策略:通过配置maxmemory-policy,可以控制内存使用和数据淘汰策略。
  • 监控和调优:使用redis自带的监控工具或第三方工具,如redisson、spring boot actuator等,监控redis性能并进行调优。

六、测试与部署

  • 测试:在开发和测试环境中充分测试redis的集成,确保功能正确性和性能满足要求。
  • 部署:在生产环境中部署redis时,考虑使用容器化技术如docker,以便于管理和扩展。

七、数据一致性

  • 缓存与数据库同步:确保缓存数据与数据库数据的一致性,可以使用延迟双删策略或消息队列来实现。

八、版本更新

  • 平滑升级:定期检查redis的新版本,按照官方文档进行平滑升级,以利用新特性和性能改进。

你可以在spring boot项目中成功集成redis,并使用其强大的数据结构来优化你的应用程序。redis的高级特性和最佳实践还需要你进一步探索和学习。希望这篇文章能帮助你更好地理解和使用redis。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com