从Spring的角度看Memcached和Redis及操作

news2024/11/17 17:43:46

目录

Memcached和Redis的区别

适用场景

Memcached配置使用

Redis配置使用


        在SpringBoot的框架里,有直连Redis的SDK却没有Memcached的,可见相比地位。不过各有各的适应场景,Redis这个单线程模型确实非常强。

Memcached和Redis的区别

共同点:都是NoSQL类型, 都是高性能内存数据存储系统;
不同点:
        (1)数据类型上,Memcached只支持最简单的K-V即字符串和数字,而Redis支持丰富的数据类型如字符串、列表、集合、有序集合等等;
        (2)持久化,Memcached是存内存存储不支持持久化,意味着服务器重启或宕机时,数据会直接丢失,极不适合生产环境使用,Redis支持如RDB快照和AOF日志;
        (3)分布式支持,Memcached不支持服务器端的分布式功能,需依靠客户端往集群里分片写入数据,而Redis支持分布式存储,如主从复制和集群功能,更好满足大规模应用;
        (4)功能上,Redis支持更多功能,如发布订阅模型、事务和Lua脚本等,而Memcached不支持。

适用场景


Memcached适合:
        (1)只需简单的缓存技术,Memcached是个轻量级高性能的解决方案;
        (2)读取密集型应用,Memcached处理高并发读取能力极强,如博客、新闻网站;
        (3)会话存储,Memcached可做会话缓存,用户登录数据,购物车等短期数据;
        (4)持久性要求不高场景,毕竟不能持久化。

Redis适合:
        (1)需复杂数据结构,String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合)、 BitMap(2.2 版新增)、HyperLogLog(2.8 版新增)、GEO(3.2 版新增)、Stream(5.0 版新增);
        (2)分布式和高可用,适合大规模应用场景;
        (3)需原子操作和事务支持,以保证数据一致性和持久性;
        (4)消息队列和发布订阅;
        (5)排行榜和计数器类应用,Redis有序集合和原子操作特别合适;
        (6)有持久性要求。

Memcached配置使用

下载memcached

参考这个地址快操作些:

Windows 下安装 Memcached | 菜鸟教程Windows 下安装 Memcached 官网上并未提供 Memcached 的 Windows 平台安装包,我们可以使用以下链接来下载,你需要根据自己的系统平台及需要的版本号点击对应的链接下载即可: 32位系统 1.2.5版本:http://static.runoob.com/download/memcached-1.2.5-win32-bin.zip 32位系统 1.2.6版本:http://static.runoob.com..https://www.runoob.com/memcached/window-install-memcached.html

  启动服务:memcached.exe -d start

停止服务:memcached.exe -d stop

图片参考于网络中:

 一般建议使用Xmemcached:
1、Xmemcache坐标(Maven)

<dependency>
    <groupId>com.googlecode.xmemcached</groupId>
    <artifactId>xmemcached</artifactId>
    <version>2.4.8</version>
</dependency>

2、配置memcached服务器的(必要的)属性(application.yml)

memcached:
   servers: localhost:11211  # memcached服务器地址和默认端口
    poolSize: 10  # 连接池的数量
    opTimeout: 3000  # 设置默认操作超时

3. 创建读取属性配置信息类,加载配置(config包)

@Component
@ConfigurationProperties(prefix = "memcached")
@Data
public class XMemcachedProperties {
    private String servers;
    private Integer poolSize;
    private Long opTimeout;
}

4. 创建客户端配置类(config包)

@Configuration
public class XMemcachedConfig {
    @Autowired
    private XMemcachedProperties xMemcachedProperties;
    @Bean
    public MemcachedClient getMemcachedClinet() throws IOException {
        MemcachedClientBuilder builder = new XMemcachedClientBuilder(xMemcachedProperties.getServers());
        MemcachedClient memcachedClient = builder.build();
        return memcachedClient;
    }
}

5. 上面四步已经配置完成,使用方式(set & get),配置memcached属性

@Service
public class SMSCodeServiceMemcacheImpl implements SMSCodeService {
    @Autowired
    private CodeUtils codeUtils;

    @Autowired
    private MemcachedClient memcachedClient;

    @Override
    public String sendCodeToSMS(String tele) {
        String code = this.codeUtils.generator(tele);
        //将数据加入memcache
        try {
            memcachedClient.set(tele,0,code);		// key,timeout,value
        } catch (Exception e) {
            e.printStackTrace();
        }
        return code;
    }

    @Override
    public boolean checkCode(CodeMsg codeMsg) {
        String value = null;
        try {
            value = memcachedClient.get(codeMsg.getTele()).toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
         return codeMsg.getCode().equals(value);
    }

}

Redis配置使用

        对Redis,springboot有直接整合的方式,使用 Spring-Date-Redis。
        对应使用的模板RedisTemplate。

操作:导入redis对应的starter 配置,提供操作Redis接口对象RedisTemplate ops*:获取各种数据类型操作接口。

(1)导入坐标(前者是测试类的)

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

(2)创建Redis配置类(config包)

package com.itheima.config;

import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * Redis配置类
 */
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
        //默认的Key序列化器为:JdkSerializationRedisSerializer
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setConnectionFactory(connectionFactory);
        return redisTemplate;
    }

}

(3)test类需加注解:

@RunWith(SpringRunner.class)   //注入类就需要使用,比如这里注入RedisTemplate

(4)yml配置

spring:
  application:
    name: demo
  #Redis相关配置
  redis:
    host: localhost
    port: 6379
    password: 253489
    database: 0 #操作的是0号数据库
    jedis:
      #Redis连接池配置
      pool:
        max-active: 8 #最大连接数
        max-wait: 1ms #连接池最大阻塞等待时间
        max-idle: 4 #连接池中的最大空闲连接
        min-idle: 0 #连接池中的最小空闲连接

       配置Redis服务器,缓存设定为使用Redis,还可以在yml对应redis配置下配置:

  cache:
    type: redis
    redis:
      use-key-prefix: true      # 是否使用前缀名(系统定义前缀名)
      key-prefix: sms_          # 追加自定义前缀名
      time-to-live: 10s         # 有效时长
      cache-null-values: false  # 是否允许存储空值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/826967.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JavaWeb】 三大组件之过滤器 Filter

&#x1f384;欢迎来到边境矢梦的csdn博文&#xff0c;本文主要讲解Java 中三大组件之过滤器 Filter的相关知识&#x1f384; &#x1f308;我是边境矢梦&#xff0c;一个正在为秋招和算法竞赛做准备的学生&#x1f308; &#x1f386;喜欢的朋友可以关注一下&#x1faf0;&…

python 实现k-means聚类算法 银行客户分组画像实战(超详细,附源码)

想要数据集请点赞关注收藏后评论区留言留下QQ邮箱 k-means具体是什么这里就不再赘述&#xff0c;详情可以参见我这篇博客 k-means 问题描述&#xff1a;银行对客户信息进行采集&#xff0c;获得了200位客户的数据&#xff0c;客户特征包括以下四个1&#xff1a;社保号码 2&am…

性能调试【学习笔记】

什么是调优&#xff1f; 每执行一个Java命令&#xff0c;就分配一个JVM&#xff0c;调优时不要混淆。 根据需求进行JVM规划和预调优优化运行JVM的运行环境&#xff08;慢、卡顿&#xff09;解决JVM运行过程中出现的各种问题&#xff08;内存泄露、内存溢出OOM&#xff09; 生…

DSP定点数的概念和表示方法

1. 基本概念 (1) 计算机中定点数的三种表示方法&#xff1a;原码、补码和反码 (2) 在DSP中一般使用补码的形式来表示操作数 (3) 整型数的表示范围由DSP芯片的字长决定&#xff0c;比如16位或24位 (4) 注意&#xff0c;符号位的bit个数&#xff0c;不同类型的数以及不同的DS…

计算机是如何工作的(笔记)

目录 寄存器 操作系统 进程&#xff08;process&#xff09; CPU pcb中关于进程调度相关的属性 寄存器 用来存储数据的单位&#xff0c;是CPU的一部分 寄存器&#xff0c;存储空间更小&#xff0c;访问速度更快&#xff0c;成本更高&#xff0c;掉电后数据会丢失 寄存器…

在线协作设计工具都有哪些?推荐这10款

协作设计是一个复杂而乏味的设计过程系统&#xff0c;不仅需要许多设计师同时进行在线设计协作&#xff0c;而且还包含了许多团队角色。 因此&#xff0c;为了协同设计高质量的产品&#xff0c;更好地服务客户服务&#xff0c;选择高质量的设计协作软件已成为许多设计师的首要…

C++sokcet网络编程笔记

C网络编程 TCP/IP协议 网络介质层&#xff1a;将模拟信号转化成数字信号&#xff0c;会形成一个MAC地址&#xff08;本机地址&#xff0c;一般情况下不会变化&#xff09;。百兆宽带用4根线&#xff0c;千兆宽带用8根线进行传输。 网络层&#xff1a;进行网络层的通讯&#x…

数据结构 | 递归

目录 一、何谓递归 1.1 计算一列数之和 1.2 递归三原则 1.3 将整数转换成任意进制的字符串 二、栈帧&#xff1a;实现递归 三、递归可视化 四、谢尔平斯基三角形 五、复杂的递归问题 六、动态规划 一、何谓递归 递归是解决问题的一种办法&#xff0c;它将问题不断地分…

本地mvn仓库清理无用jar包

背景 开发java时间久了&#xff0c;本地的m2仓库就会产生很多过期的jar包&#xff0c;不清理的话比较占空间。 原理 是通过比较同一目录下&#xff0c;对应jar包的版本号的大小&#xff0c;保留最大版本号那个&#xff0c;删除其他的。 脚本 执行脚本见文章顶部 执行方式 …

P3374 【模板】树状数组 1 浅谈树状数组 (内附封面)

【模板】树状数组 1 题目描述 如题&#xff0c;已知一个数列&#xff0c;你需要进行下面两种操作&#xff1a; 将某一个数加上 x x x 求出某区间每一个数的和 输入格式 第一行包含两个正整数 n , m n,m n,m&#xff0c;分别表示该数列数字的个数和操作的总个数。 第二…

部署安装私服-Gitlab

一、国内的gitlab是极狐 www.gitlab.cn 国服 www.github.com 国际服 二、国服的gitlab蛮适合中国国情的 1.提交申请可以获得30天的订阅版服务&#xff0c;有需要的话可以先提交一下。订阅后功能多一些。 Gitlab中文官网下载_GitLab免费下载安装_极狐GitLab免…

从零开始学python(十四)百万高性能框架scrapy框架

前言 回顾之前讲述了python语法编程 必修入门基础和网络编程&#xff0c;多线程/多进程/协程等方面的内容&#xff0c;后续讲到了数据库编程篇MySQL&#xff0c;Redis&#xff0c;MongoDB篇&#xff0c;和机器学习&#xff0c;全栈开发&#xff0c;数据分析&#xff0c;爬虫数…

uniapp 视频截图

uniapp 视频截图 本文只针对微信小程序&#xff0c;其他平台并没有测试过&#xff0c;不确定可行性。 微信提供了两个组件可以用来播放视频&#xff1a; live-player: 只要用于实时音视频的播放&#xff08;出于政策和合规的考虑&#xff0c;微信暂时没有放开所有小程序对&l…

地统计学空间插值方法及应用

地统计学 地统计学&#xff0c;是指以具有空间分布特点的区域化变量理论为基础&#xff0c;研究自然现象的空间变异与空间结构的一门学科。它是针对像矿产、资源、生物群落、地貌等有着特定的地域分布特征而发展的统计学。由于最先在地学领域应用&#xff0c;故称地统计学 地…

自学网络安全(黑客)学习心得路线规划

趁着今天下班&#xff0c;我花了几个小时整理了下&#xff0c;非常不易&#xff0c;希望大家可以点赞收藏支持一波&#xff0c;谢谢。 我的经历&#xff1a; 我 19 年毕业&#xff0c;大学专业是物联网工程&#xff0c;我相信很多人在象牙塔里都很迷茫&#xff0c;到了大三大…

html | 无js二级菜单

1. 效果图 2. 代码 <meta charset"utf-8"><style> .hiddentitle{display:none;}nav ul{list-style-type: none;background-color: #001f3f;overflow:hidden; /* 父标签加这个&#xff0c;防止有浮动子元素时&#xff0c;该标签失去高度*/margin: 0;padd…

4年测试工程师,常用功能测试点总结,“我“不再走弯路...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 输入框测试 1、字…

模电专题-MOS管的放大电路分析

在实际应用中&#xff0c;我们经常会使用到功率MOS&#xff0c;这时通常不会将它当成一个开关使用&#xff0c;而是当成一个放大器来使用&#xff0c;那这就需要让其工作在放大状态。 参考下图中的mos管的特性曲线&#xff0c;右图中的输出特性曲线中有一根红色的分界线&#x…

2000-2021年上市公司常用控制变量数据(A股)含stata处理代码

2000-2021年上市公司企业A股常用控制变量 1、时间&#xff1a;2000-2021年&#xff08;注&#xff1a;股权性质从2004年开始&#xff0c;第一大股东持股比例从2003年开始&#xff09; 2、来源&#xff1a;整理自csmar 和wind 3、数据范围&#xff1a;A股公司 不包含已退市的…

使用Python动画粒子的薛定谔波函数(ψ)(完整代码)

使用Python动画粒子的薛定谔波函数&#xff08;ψ&#xff09;&#xff08;完整代码&#xff09; 使用曲柄-尼科尔森方法求解盒子中的粒子 Kowshik chilamkurthy 以后 发表于 书技术 4 分钟阅读 2月 2021&#xff0c; <> 1.4K 5 左图&#xff1a;来源&#xff0c;右图…