01.Redis中间件实战1

这篇具有很好参考价值的文章主要介绍了01.Redis中间件实战1。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Redis中间件实战1

Redis各种数据结构实战

字符串

需求:将用户信息存储至缓存中,实现每次前端请求获取用户个人详情时直接从缓存中获取。来演示字符串的写入与读取。
技术方案:为了实现这个需求,首先需要建立用户对象实体,里面包含用户个人的各种信息,包括ID、年龄、姓名、用户名及住址等,
然后采用RedisTemplate操作组件将这一用户对象序列化为字符串信息并写入缓存中,最后从缓存中读取即可。

public class Person implements Serializable {

    private int id;

    private int age;

    private String name;

    private String address;

    public Person() {

    }

    public Person(int id, int age, String name, String address) {
        this.id = id;
        this.age = age;
        this.name = name;
        this.address = address;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

创建controller

@RestController
@RequestMapping(value = "/string")
public class StringController {

    @Autowired
    private RedisTemplate redisTemplate;

    @Autowired
    private ObjectMapper mapper;

    private static Logger logger = LoggerFactory.getLogger(StringController.class);

    @GetMapping(value = "/one")
    public void one() throws Exception{
        Person p1 = new Person(95001,23,"孙悟空","花果山水帘洞");
        // 定义key与即将存入缓存中的value
        final String key = "redis:string:1";
        // JSON序列化
        String value = mapper.writeValueAsString(p1);
        // 写入缓存中
        logger.info("存入缓存中的用户实体对象信息为:{}",p1);

        //使用set命令写入缓存中
        redisTemplate.opsForValue().set(key,value);

        // 从缓存中获取用户的信息
        final Object object = redisTemplate.opsForValue().get(key);

        if (object != null) {
            Person p = mapper.readValue(object.toString(),Person.class);
            logger.info("从缓存中读取信息:{}",p);
        }
    }
    
    @GetMapping(value = "/get")
    public Person one(String key) throws Exception{
         // 从缓存中获取用户的信息
         final Object object = redisTemplate.opsForValue().get(key);
         if (object != null) {
             Person p = mapper.readValue(object.toString(),Person.class);
             logger.info("从缓存中读取信息:{}",p);
             return p;
         }
         return null;
    }
}

测试
http://localhost:9090/swagger-ui.html

列表

Redis的列表类型跟java的List类型很类似,用于存储一系列具有相同类型的数据。其底层对于数据的存储和读取
可以理解为一个数据队列,往List中添加数据的时候,即相当于往队列中的某个位置插入数据;而从List中
获取数据相当于从队列中某个位置获取数据。

需求:
将一组已经排好序的用户对象列表存储在缓存中,按照排名的先后顺序获取出来并输出到控制台上。
技术方案:
首先需要定义一个已经排好序的用户对象的列表,然后将其存储到Redis的List中,最后按照排名的先后顺序
将每个用户实体获取出来。
代码实现:
创建controller

@RestController
@RequestMapping(value = "/list")
public class ListController {
    @Autowired
    private RedisTemplate redisTemplate;
    @Autowired
    private ObjectMapper mapper;
    private static Logger logger = LoggerFactory.getLogger(ListController.class);
    @GetMapping(value = "/one")
    public void one() {
        List<Person> pList = new ArrayList<>();

        pList.add(new Person(1,20,"孙悟空","花果山水帘洞"));
        pList.add(new Person(1,30,"猪八戒","高老庄"));
        pList.add(new Person(1,40,"沙悟净","流沙河"));
        pList.add(new Person(1,50,"唐三藏","东土大唐"));

        logger.info("构造已经排好序的用户对象列表对象:{}",pList);

        // 将列表数据存储到Redis中的List中
        final String key = "redis:list:1";
        ListOperations listOperations = redisTemplate.opsForList();

        for (Person p:pList) {
            // 往列表中添加数据-从队尾添加
            listOperations.leftPush(key,p);
        }

        // 获取Redis列表中的数据-从队头中遍历获取,直到没有元素为止。
        logger.info("获取Redis中list的数据-从队头中获取");
        Object res = listOperations.rightPop(key);
        Person tmp = null;
        while (res != null) {
            tmp = (Person)res;
            logger.info("当前数据:{}",tmp.getName());
            res = listOperations.rightPop(key);
        }
    }
}

日志

2024-02-05 15:04:20.782  INFO 13724 --- [nio-9090-exec-1] c.a.redis.controller.ListController      : 构造已经排好序的用户对象列表对象:[com.airycode.redis.bean.Person@4900d96f, com.airycode.redis.bean.Person@2fe9acc6, com.airycode.redis.bean.Person@512f8c42, com.airycode.redis.bean.Person@32385a70]
2024-02-05 15:04:20.823  INFO 13724 --- [nio-9090-exec-1] c.a.redis.controller.ListController      : 获取Redis中list的数据-从队头中获取
2024-02-05 15:04:20.850  INFO 13724 --- [nio-9090-exec-1] c.a.redis.controller.ListController      : 当前数据:孙悟空
2024-02-05 15:04:20.853  INFO 13724 --- [nio-9090-exec-1] c.a.redis.controller.ListController      : 当前数据:猪八戒
2024-02-05 15:04:20.856  INFO 13724 --- [nio-9090-exec-1] c.a.redis.controller.ListController      : 当前数据:沙悟净
2024-02-05 15:04:20.859  INFO 13724 --- [nio-9090-exec-1] c.a.redis.controller.ListController      : 当前数据:唐三藏

总结:
在实际的应用场景中,Redis的列表类型特别适用于排名,排行榜,近期访问数据列表等业务场景
是一种很实用的存储类型

集合

Redis的集合类型跟高等数学中学习的集合类似,用于存储具有相同的类型或特性的不重复的数据
,即Redis中的集合Set存储的数据是唯一的,其底层的数据结构是哈希表&文章来源地址https://www.toymoban.com/news/detail-829107.html

到了这里,关于01.Redis中间件实战1的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 中间件redis的使用

    Java中的中间件配置体现在springboot的yml配置文件中。Springboot框架支持微服务和中间件和restful api远程服务的调用。中间件是Java web系统的中间层的服务系统的调用接口。Springboot的自动装配和约定大于配置机制初始化springcontext的容器空间和注册组件。使用容器管理服务注册对象

    2024年02月05日
    浏览(46)
  • 中间件: Redis安装与部署

    集群部署 启动6个redis节点 扩缩容 https://blog.csdn.net/lzb348110175/article/details/122168638 扩容: 添加两个节点, 第一个节点表示新节点,第二个节点表示集群中已有的任意一个节点 分配slot, 后面的节点是已有的节点 添加slave, 第一个为slave, 第二个为slave对应的master 缩容: 查看集

    2024年02月12日
    浏览(43)
  • 缓存中间件Redis必知必会

    作者: 逍遥Sean 简介:一个主修Java的Web网站游戏服务器后端开发者 主页:https://blog.csdn.net/Ureliable 觉得博主文章不错的话,可以三连支持一下~ 如有需要我的支持,请私信或评论留言! 前言: 本文是对redis的基本用法操作的整理。 如果需要在linux环境中搭建一个redis服务参考

    2024年02月11日
    浏览(49)
  • 深入理解Java消息中间件-组件-消息队列

    引言: 消息中间件在现代分布式系统中扮演着至关重要的角色,它解决了系统之间异步通信和解耦的需求。而在消息中间件的架构中,核心组件之一就是消息队列。本文将深入探讨消息队列的架构组件,帮助读者加深对消息中间件的理解和应用。 一、什么是消息队列 消息队列

    2024年04月27日
    浏览(47)
  • 深入了解 RabbitMQ:高性能消息中间件

    在现代分布式系统中,消息队列成为了实现系统间异步通信、削峰填谷以及解耦组件的重要工具。而RabbitMQ作为一个高效可靠的消息队列解决方案,已经成为许多企业广泛采用的选择。本文将介绍RabbitMQ的基本概念、主要特性以及常见应用场景。 RabbitMQ 是一个开源的高性能、

    2024年02月08日
    浏览(48)
  • 深入详解高性能消息队列中间件 RabbitMQ

      目录 1、引言 2、什么是 RabbitMQ ? 3、RabbitMQ 优势 4、RabbitMQ 整体架构剖析 4.1、发送消息流程 4.2、消费消息流程 5、RabbitMQ 应用 5.1、广播 5.2、RPC VC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...) https://blog.csdn.net/chenlycly/article/details/124272585 C++软件异常排查从入

    2024年02月05日
    浏览(72)
  • 架构师系列- 消息中间件(13)-kafka深入应用

    1)配置文件  2)启动信息 4.2.1 发送类型 KafkaTemplate调用send时默认采用异步发送,如果需要同步获取发送结果,调用get方法 详细代码参考:AsyncProducer.java 消费者使用:KafkaConsumer.java 1)同步发送 通过swagger发送,控制台可以正常打印send result swagger访问地址:http://localhost:808

    2024年04月29日
    浏览(38)
  • Go重写Redis中间件 - Go实现Redis集群

    这章的内容是将我们之前实现的单机版的Redis扩充成集群版,给Redis增加集群功能,在增加集群功能之前,我们先学习一下在分布式系统中引用非常广泛的技术一致性哈希,一致性哈希在我们项目里就应用在我们Redis集群的搭建这块 详解一致性哈希 Redis集群需求背景 单台服务

    2024年02月13日
    浏览(42)
  • 常用中间件redis,kafka及其测试方法

    一、中间件的使用场景 引入中间件的目的一般有两个: 1、提升性能 产品架构中的性能设计: 常用的中间件: 1) 高速缓存:redis 基于内存,所以比mysql块(存在磁盘io) 为什么查询速度快? 单进程+IO多路复用去提高性能 基于内存 做缓存,极大缓解了数据库压力 非常适合

    2024年04月11日
    浏览(50)
  • 【缓存中间件】Redis哈希槽的概念

    分布式数据库首先要解决把整个数据集按照分区规则映射到多个节点的问题,即把数据集划分到多个节点上,每个节点负责整体数据的一个子集。。 需要重点关注的是数据分区规则。常见的分区规则有哈希分区和顺序分区两种,哈希分区离散度好、数据分布业务无关、无法顺

    2024年02月13日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包