无论是客户端还是服务端,缓存都是必不可少的一种提升用户体验的策略,大家在平时开发中,有意无意都会用到缓存,比如说 Android 开发的同学们,所有的图片框架,基本都有用到缓存技术,服务端那就完全不用说了。

说说通用的缓存策略,有两种,下面来点图,这个是我司内部分享的图,我盗用下

第一种方案,客户端使用的比较多,缓存和 DB(或者文件)同步更新,服务端一般都是用第二种方案,现在服务端的一些框架已经比较成熟了,像 spring 的@Cachable 注解,就搞定了很多事情,客户端的缓存相对来说简单一些,这期重点来说说服务端的缓存应用,再确定一点,我们来说说 Redis 这个有趣的东西。

为什么要用Redis举例呢,因为我认为Redis服务是缓存框架的集大成者,除了一般的内存缓存外,还可以缓存持久化,做任务队列等。我就来说说Redis的几种典型用法吧

  1. 传统的key-value存储,这个就不用说了吧,所有缓存框架必备的功能

  2. hash功能,在传统kv之外,提供了一个类似hashmap的对应关系,一个key可以对应许多hashkey和value,比如存储商品以及购买人的数量上,key为商品id,hashkey为购买人的userID,value为购买的数量

  3. list功能,和Java的List类似,push(key,List)这样,某个key对应一个队列,可以存储List数据,这种用法可以用来做简单的任务队列,需要加数据时就push到队列里面,然后消费者用一个1秒的定时任务,去这个队列里面取东西(这个只是简单的任务队列做法,Redis还提供了一种即时的回调,监听机制的消息队列做法,更专业点)

  4. Set功能,和Java的Set类似,用法和上面一样,唯一不同的就是数据是不能重复的

  5. Sorted Set,也就是zset,member/score功能,member是成员,socre是得分,这种结构通常用于排行榜,member为userID,score为得分,比如说100分,99分这样,用这种数据结构可以根据score来自动排序

  6. 最后一点就是批量操作啦,常用的有批量和管道,批量操作可以看做是对同一个数据格式的批量操作,比如设置100key,以及对应的value,一个批量动作搞定。管道的范围更大一些,可以看做是无数的操作放到一起执行,比如你要100个kv操作,100个hash操作,100个zset操作,都可以放到一个管道里面

Redis3.0之后加入了Redis Cluster的集群功能,之前的各种东西现在用起来会有点问题,脚本啊,管道啊,和单点的操作不一样,这边先列举几个我踩过的坑,希望能起到抛砖引玉的作用

1.不支持普通的管道操作,redistemplate.excutepipeline这么执行,需自己封装管道操作类,不能支持同一个管道操作,里面有多种找错。比如说又有kv,又又hash-kv

2.zset的一些操作也无法redistemplate直接使用,得自己封装

3.配置集群中的某一台和配置全部机器的效果是一样的

4.不支持任意的脚本操作,比如Java代码调用lua脚本的操作,有可能这个脚本就没法执行,需要考虑这个脚本在redis集群上能否执行

我司做了一些简单的封装,主要就是根据key算出是哪个slot,再根据slot算出在集群中的哪一台机器上,然后同一台机器上的操作放到一台管道操作上。

大家有兴趣的话可以关注我的公众号:大土豆爱开发,分享我的技术,生活

说说缓存,说说Redis的更多相关文章

  1. 再谈缓存和Redis

    自从上次分享<Redis到底该如何利用?>已经有1年多了,这1年经历了不少.从码了我们网站的第一行开始到现在,我们的缓存模块也不断在升级,这之中确实略有心得,最近也有朋友探讨缓存,觉得可以 ...

  2. (转)高性能网站架构之缓存篇—Redis集群搭建

    看过 高性能网站架构之缓存篇--Redis安装配置和高性能网站架构之缓存篇--Redis使用配置端口转发 这两篇文章的,相信你已经对redis有一定的了解,并能够安装上,进行简单的使用了,但是在咱们的 ...

  3. 分布式缓存技术redis学习系列

    分布式缓存技术redis学习系列(一)--redis简介以及linux上的安装以及操作redis问题整理 分布式缓存技术redis学习系列(二)--详细讲解redis数据结构(内存模型)以及常用命令 ...

  4. 缓存数据库-redis数据类型和操作(list)

    转: 狼来的日子里! 奋发博取 缓存数据库-redis数据类型和操作(list) 一:Redis 列表(List) Redis列表是简单的字符串列表,按照插入顺序排序.你可以添加一个元素导列表的头部( ...

  5. spring(三、spring中的eheche缓存、redis使用)

    spring(三.spring中的eheche缓存.redis使用) 本文主要介绍为什么要构建ehcache+redis两级缓存?以及在实战中如何实现?思考如何配置缓存策略更合适?这样的方案可能遗留什 ...

  6. Spring Boot 揭秘与实战(二) 数据缓存篇 - Redis Cache

    文章目录 1. Redis Cache 集成 2. 源代码 本文,讲解 Spring Boot 如何集成 Redis Cache,实现缓存. 在阅读「Spring Boot 揭秘与实战(二) 数据缓存 ...

  7. 构建高性能数据库缓存之redis主从复制

    一.什么是redis主从复制? 主从复制,当用户往Master端写入数据时,通过Redis Sync机制将数据文件发送至Slave,Slave也会执行相同的操作确保数据一致:且实现Redis的主从复制 ...

  8. 构建高性能数据库缓存之redis(二)

    一.概述 在构建高性能数据库缓存之redis(一)这篇文档中,阐述了Redis数据库(key/value)的特点.功能以及简单的配置过程,相信阅读过这篇文档的朋友,对Redis数据库会有一点的了解,此 ...

  9. 谈缓存和Redis

    自从上次分享<Redis到底该如何利用?>已经有1年多了,这1年经历了不少.从码了我们网站的第一行开始到现在,我们的缓存模块也不断在升级,这之中确实略有心得,最近也有朋友探讨缓存,觉得可以 ...

  10. 缓存数据库redis

    什么是Redis? Redis是一个TCP服务器,支持请求/响应协议. 在Redis中,请求通过以下步骤完成: 客户端向服务器发送查询,并从套接字读取,通常以阻塞的方式,用于服务器响应. 服务器处理命 ...

随机推荐

  1. KDevelop使用笔记【中文】

    师从官方文档: https://userbase.kde.org/KDevelop4/Manual https://docs.kde.org/trunk5/en/extragear-kdevelop/ ...

  2. 逆向知识第一讲,IDA的熟悉使用,以及TEB,PEB结构

    逆向知识第一讲,IDA的熟悉使用,以及TEB,PEB结构 一丶熟悉IDA,以及手工制作sig文件. IDA,静态分析工具,网上随便找一个即可下载. 首先,我们写一个可执行EXE,最简单的 使用IDA打 ...

  3. 【NOIP2015资源+题解】

    数据下载(含cena配置文件+一套自己写的代码) 试题下载(pdf版) Day1 T1 Day1 T2 Day1 T3 Day2 T1 Day2 T2 Day3 T3

  4. [译]ASP.NET Core 2.0 全局配置项

    问题 如何在 ASP.NET Core 2.0 应用程序中读取全局配置项? 答案 首先新建一个空项目,并添加两个配置文件: 1. appsettings.json { "Section1&q ...

  5. MySQL常用配置参数

    基本配置: datadir:指定mysql的数据目录位置,用于存放mysql数据库文件.日志文件等. 配置示例:datadir=D:/wamp/mysqldata/Data default-chara ...

  6. Linux系统Shell脚本编程

    1. shell脚本概念:C语言编写的.命令解释器.编程语言. 是用户使用linux的桥梁. shell脚本语言非常擅长处理文本类型的数据. 2. shell脚本作用:自动化管理.监控管理.日志数据处 ...

  7. Acitiviti笔记(一)

    一.核心组件 ProcessEngine:流程引擎的抽象,对于开发者来说,它是我们使用Activiti的facade,通过它可以获得我们需要的一切服务.类似于一个容器工厂,来保存创建的ProcessE ...

  8. C语言(记录)——内存相关_2:内存的编址与管理

    本文是基于嵌入式的C语言 --------------------------------------------------------------------------------------- ...

  9. JS框架设计读书笔记之-选择器引擎01

    选择符 选择符是指CSS样式规则最左边的部分,例如 p{},#id{},.class{},p.class{} 等等 总共可以分为四大类: 并联选择器 => 逗号 => $('div,spa ...

  10. C++ 空间配置器(allocator)

    C++ 空间配置器(allocator) 在STL中,Memory Allocator 处于最底层的位置,为一切的 Container 提供存储服务,是一切其他组件的基石.对于一般使用 STL 的用户 ...