服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Redis - 在项目中使用redis做缓存的一些思路

在项目中使用redis做缓存的一些思路

2021-11-14 20:40麦田小猪 Redis

这篇文章主要介绍了在项目中使用redis做缓存的一些思路,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

在项目中redis做缓存的一些思路

首先,缓存的对象有三种

1、数据库中单条的的数据(以表名跟id作为key永久保存到redis),在有更新的地方都要更新缓存(不适用于需要经常更新的数据);

2、对于一些不分页,不需要实时(需要多表查询)的列表,我们可以将列表结果缓存到redis中,设定一定缓存时间作为该数据的存活时间。用获取该列表的方法名作为key,列表结果为value;这种情况只试用于不经常更新且不需要实时的情况下。

3、不需要实时的,需要分页的列表:可以把分页的结果列表放到一个map(key为分页标识,value为分页结果)中,然后将该map存到redis的list中(用该方法名为key)。然后给该list设置一个缓存存活时间(用expire)。这样通过方法名lrange出来就能获取存有分页列表的数据,遍历该list,通过遍历list中map的key判断该分页数据是否在缓存内,是则返回,不存在则rpush进去。这种做法能解决比如1-5页的数据已经重新加载,而6-10页的数据依然是缓存的数据而导致脏数据的情况。

本人走过的一些弯路

1、对于数据缓存不是所有东西都缓存到redis就是好的,而是要针对一些改动不大或者访问率大的数据进行缓存来减少关系型数据库的压力。

2、不要试图在拦截器或者过滤器中判断是否有缓存的存在,因为每个请求(不管该请求对应的方法是否做了缓存)它都会去redis中请求数据并判断,这样会浪费一定的内存资源跟响应时间。所以应该针对需要缓存的方法进行判断。

3、一个方法中使用多个get或者set的方法,我们需要尽可能的减少去jedispool中获取jedis对象,所以在一个方法中应该只获取一次jedis对象,在方法结束的时候把该对象return还给连接池,这样才能做到尽可能的高效。

4、在设置连接池中参数的时候要考虑到自身系统需求,不然会经常出现连接池中无可用对象获取,spring时不时发起连接请求到redis等不必要的错误和资源浪费。

为什么没用Redis做缓存

都知道用Redis作缓存非常的快,但事实上有些时候我们并没有使用Redis来做缓存,而是采用本地缓存的方式。就比如我所接触的一个项目,就没有采用Redis作缓存,而是使用谷歌工具包中的Table来作的缓存。

这个Table其实就是一个数据结构,你可以把它当做Map来看待。现在我们来画两幅图,分别是使用Table做缓存和使用Redid做缓存的两种情况

使用Table作本地缓存

在项目中使用redis做缓存的一些思路

使用Redis作缓存

在项目中使用redis做缓存的一些思路

公司采用本地缓存的方式,那么为什么没有采用Redis呢

让我们来思考一下下面几个问题

1、访问本地服务缓存快还是远程服务Redis快?

毫无疑问是访问本地服务的缓存要更快一些,Redis毕竟是在远程服务上。假设我们访问本地服务缓存的延迟为50ms,那么访问远程Redis的验证可能会达到58ms。这是使用本地缓存服务的优势所在

2、Reids事务

在Redis中,虽然Redis的操作都能够保证原子性,但是Redis中的事务不能够保证原子性。比如说A用户想B用户转账,怎么保证它的事务呢

3、Redis会多一次IO

尽管Redis数据存放在内存上,但Redis持久化操作还是会将数据写在磁盘上,IO操作会增加耗时。而本地缓存使用的只是一个数据结构来存储数据,不存在IO

那么使用本地缓存的问题是什么呢?

比如说A用户的数据存放在exchange1节点上,而B用户的数据存放在exchange2节点上。现在A用户想向B用户转账,那么就会比较麻烦,要做一些其他的操作,这是使用本地缓存的一个很大的弊端

什么时候使用Redis?

由于公司的项目是一个证券交易所,对延迟的要求比较高,想尽可能的做到低延迟,所以最终舍弃使用Redis。对于一些不太注重延迟的项目,使用Redis做缓存是非常不错的

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/wang_keng/article/details/51760806

延伸 · 阅读

精彩推荐
  • RedisRedis集群的5种使用方式,各自优缺点分析

    Redis集群的5种使用方式,各自优缺点分析

    Redis 多副本,采用主从(replication)部署结构,相较于单副本而言最大的特点就是主从实例间数据实时同步,并且提供数据持久化和备份策略。...

    优知学院4082021-08-10
  • Redis如何使用Redis锁处理并发问题详解

    如何使用Redis锁处理并发问题详解

    这篇文章主要给大家介绍了关于如何使用Redis锁处理并发问题的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Redis具有一定的参考学习...

    haofly4522019-11-26
  • Redis《面试八股文》之 Redis十六卷

    《面试八股文》之 Redis十六卷

    redis 作为我们最常用的内存数据库,很多地方你都能够发现它的身影,比如说登录信息的存储,分布式锁的使用,其经常被我们当做缓存去使用。...

    moon聊技术8182021-07-26
  • Redis关于Redis数据库入门详细介绍

    关于Redis数据库入门详细介绍

    大家好,本篇文章主要讲的是关于Redis数据库入门详细介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览...

    沃尔码6982022-01-24
  • Redis详解三分钟快速搭建分布式高可用的Redis集群

    详解三分钟快速搭建分布式高可用的Redis集群

    这篇文章主要介绍了详解三分钟快速搭建分布式高可用的Redis集群,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,...

    万猫学社4502021-07-25
  • RedisRedis 6.X Cluster 集群搭建

    Redis 6.X Cluster 集群搭建

    码哥带大家完成在 CentOS 7 中安装 Redis 6.x 教程。在学习 Redis Cluster 集群之前,我们需要先搭建一套集群环境。机器有限,实现目标是一台机器上搭建 6 个节...

    码哥字节15752021-04-07
  • Redisredis缓存存储Session原理机制

    redis缓存存储Session原理机制

    这篇文章主要为大家介绍了redis缓存存储Session原理机制详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    程序媛张小妍9252021-11-25
  • RedisRedis Template实现分布式锁的实例代码

    Redis Template实现分布式锁的实例代码

    这篇文章主要介绍了Redis Template实现分布式锁,需要的朋友可以参考下 ...

    晴天小哥哥2592019-11-18