Redis应用流程

简介: Redis应用流程

Redis应用流程

展示流程: 先从缓存取 ,如果不存在 ,从数据库取出来,写入缓存,再返回页面;如果存在key ,直接从缓存中取出来,展示到页面。

同步缓存:当事务提交(更新,删除,插入)后,需要同步缓存,直接根据Key 删除redis的key(清空缓存) ,再展示时 由上边的流程展示。

20200401134307494.png同步缓存:

20200401134307494.png

package com.taotao.content.service.impl;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import com.taotao.common.pojo.TaotaoResult;
import com.taotao.common.utils.JsonUtils;
import com.taotao.content.jedis.JedisClient;
import com.taotao.content.service.ContentService;
import com.taotao.mapper.TbContentMapper;
import com.taotao.pojo.TbContent;
import com.taotao.pojo.TbContentExample;
import com.taotao.pojo.TbContentExample.Criteria;
@Service
public class ContentServiceImpl implements ContentService {
  @Autowired
  private JedisClient client;
  @Autowired
  private TbContentMapper mapper;
  @Value("${CONTENT_KEY}")
  private String CONTENT_KEY;
  @Override
  public TaotaoResult saveContent(TbContent content) {
    // 1.注入mapper
    // 2.补全其他的属性
    content.setCreated(new Date());
    content.setUpdated(content.getCreated());
    // 3.插入内容表中
    mapper.insertSelective(content);
    // 当需要添加内容是,需要情况此内容所属分类下的所有缓存
    try {
      client.hdel(CONTENT_KEY, content.getCategoryId() + "");
      System.out.println("当插入时,清空缓存!!!!!!!!!!");
    } catch (Exception e) {
      e.printStackTrace();
      // TODO: handle exception
    }
    return TaotaoResult.ok();
  }
  @Override
  public List<TbContent> getTbContentByCategoryId(Long categoryId) {
    // TODO Auto-generated method stub
    // 添加缓存不能影响正常的业务逻辑
    // 判断 是否redis中有数据 如果有 直接从redis中获取数据 返回
    try {
      String jsonstr = client.hget(CONTENT_KEY, categoryId + "");// 从redis数据库中获取内容分类下的所有的内容。
      // 如果存在,说明有缓存
      if (StringUtils.isNotBlank(jsonstr)) {
        System.out.println("这里有缓存啦!!!!!");
        return JsonUtils.jsonToList(jsonstr, TbContent.class);
      }
    } catch (Exception e1) {
      e1.printStackTrace();
    }
    // 根据cidchax
    TbContentExample example = new TbContentExample();
    // 设置查询条件
    Criteria createCriteria = example.createCriteria();
    createCriteria.andCategoryIdEqualTo(categoryId);
    // 执行查询
    List<TbContent> list = mapper.selectByExample(example);
    // 返回
    // 将数据写入到redis数据库中
    // 注入jedisclient
    // 调用方法写入redis key - value
    try {
      System.out.println("没有缓存!!!!!!");
      client.hset(CONTENT_KEY, categoryId + "", JsonUtils.objectToJson(list));
    } catch (Exception e) {
      e.printStackTrace();
    }
    return list;
  }
}

redis.properties

CONTENT_KEY=TBCONTENT_KEY
相关文章
|
10月前
|
消息中间件 缓存 NoSQL
Redis各类数据结构详细介绍及其在Go语言Gin框架下实践应用
这只是利用Go语言和Gin框架与Redis交互最基础部分展示;根据具体业务需求可能需要更复杂查询、事务处理或订阅发布功能实现更多高级特性应用场景。
523 86
|
canal NoSQL 关系型数据库
Redis应用—7.大Value处理方案
本文介绍了一种用于监控Redis大key的方案设计及其实现步骤。主要内容包括:方案设计、安装与配置环境、binlog数据消费者。
641 29
Redis应用—7.大Value处理方案
|
NoSQL 安全 测试技术
Redis游戏积分排行榜项目中通义灵码的应用实战
Redis游戏积分排行榜项目中通义灵码的应用实战
549 4
|
缓存 NoSQL Java
Redis应用—6.热key探测设计与实践
热key问题在高并发系统中可能导致数据层和服务层的严重瓶颈,如Redis集群瘫痪和用户体验下降。为解决此问题,京东开发了JdHotkey热key探测框架,具备实时性、准确性、集群一致性和高性能等特点。该框架由etcd集群、Client端jar包、Worker端集群和Dashboard控制台组成,通过分布式计算快速识别热key并推送至应用内存,有效减轻数据层负载,提升服务性能。JdHotkey适用于多种场景,安装部署简便,支持毫秒级热key探测和集群一致性维护。
869 61
Redis应用—6.热key探测设计与实践
|
10月前
|
存储 缓存 监控
Redis分区的核心原理与应用实践
Redis分区通过将数据分散存储于多个节点,提升系统处理高并发与大规模数据的能力。本文详解分区原理、策略及应用实践,涵盖哈希、范围、一致性哈希等分片方式,分析其适用场景与性能优势,并探讨电商秒杀、物联网等典型用例,为构建高性能、可扩展的Redis集群提供参考。
494 0
|
12月前
|
NoSQL Java Redis
Redis基本数据类型及Spring Data Redis应用
Redis 是开源高性能键值对数据库,支持 String、Hash、List、Set、Sorted Set 等数据结构,适用于缓存、消息队列、排行榜等场景。具备高性能、原子操作及丰富功能,是分布式系统核心组件。
829 2
|
NoSQL 网络协议 Java
【Azure Redis】Redis服务端的故障转移(Failover)导致客户端应用出现15分钟超时问题的模拟及解决
在使用 Azure Cache for Redis 服务时,因服务端维护可能触发故障转移。Linux 环境下使用 Lettuce SDK 会遇到超时 15 分钟的已知问题。本文介绍如何通过重启 Primary 节点主动复现故障转移,并提供多种解决方案,包括调整 TCP 设置、升级 Lettuce 版本、配置 TCP_USER_TIMEOUT 及使用其他 SDK(如 Jedis)来规避此问题。
444 1
|
缓存 NoSQL Java
Redis应用—8.相关的缓存框架
本文介绍了Ehcache和Guava Cache两个缓存框架及其使用方法,以及如何自定义缓存。主要内容包括:Ehcache缓存框架、Guava Cache缓存框架、自定义缓存。总结:Ehcache适合用作本地缓存或与Redis结合使用,Guava Cache则提供了更灵活的缓存管理和更高的并发性能。自定义缓存可以根据具体需求选择不同的数据结构和引用类型来实现特定的缓存策略。
1123 16
Redis应用—8.相关的缓存框架
|
缓存 NoSQL Java
Redis深度解析:解锁高性能缓存的终极武器,让你的应用飞起来
【8月更文挑战第29天】本文从基本概念入手,通过实战示例、原理解析和高级使用技巧,全面讲解Redis这一高性能键值对数据库。Redis基于内存存储,支持多种数据结构,如字符串、列表和哈希表等,常用于数据库、缓存及消息队列。文中详细介绍了如何在Spring Boot项目中集成Redis,并展示了其工作原理、缓存实现方法及高级特性,如事务、发布/订阅、Lua脚本和集群等,帮助读者从入门到精通Redis,大幅提升应用性能与可扩展性。
365 0
|
缓存 NoSQL Java
Redis应用—9.简单应用汇总
本文主要介绍了Redis的一些简单应用。
531 26