首页 > 数据库 >redis基础知识

redis基础知识

时间:2023-07-24 19:22:37浏览次数:42  
标签:缓存 spring redis 基础知识 template Redis 序列化

Redis是什么?

Redis(Remote Dictionary Server)远程字典服务,是一个开源的使用ANSI C语言编写、支持网路、可基于内存也可持久化的日志型,key-value(NoSql---->non-relational)数据库

Redis的特点?

  • 性能极高,基于内存,读的速度是11万次/s,写的速度是81千次/s
  • 丰富的数据类型,支持string、hash、list、set、zet多种数据类型
  • 原子性,所有操作都是原子性的,支持事务
  • 丰富的特性,支持发布订阅、通知、过期策略等
  • 支持持久化,可以将内存中的数据保存在硬盘中,重启后再次加载
  • 支持分布式,理论上可以无限扩展
  • 单线程,没有线程并发问题

Redis的应用场景?

  • 缓存
  • 分布式锁
  • 分布式session
  • 消息队列

Redis的安装?

Linux安装

yum -y install gcc
cd  /usr/local
wget http://download.redis.io/releases/redis-3.2.5.tar.gz
tar -xvf redis-3.2.5.tar.gz
mv redis-3.2.5 redis
cd redis

修改配置文件

vi redis.conf

修改

#bind 127.0.0.1 去掉本机ip,让其他机器访问
protected mode no 关闭保护模式

Windows安装

从redis.io官网下载压缩包,解压后就完成了安装

Redis的数据类型?

  • string
  • hash
  • list
  • set
  • zset

Redis的事务?

  • multi 启动事务
  • exec 提交事务
  • discard 放弃事务
  • watch 监视一个或多个键,如果有其他客户端修改键值,事务将失败

Redis开发

编程式缓存

1)导入redis依赖

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

2)添加配置文件

spring.redis.host=localhost
spring.redis.port=6379
spring.redis.database=0
spring.redis.jedis.pool.max-active=100
spring.redis.jedis.pool.max-wait=100ms
spring.redis.jedis.pool.max-idle=100
spring.redis.jedis.pool.min-idle=10

3)配置类

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
        template.setConnectionFactory(factory);
        // 配置序列化器
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        // key采用String的序列化方式
        template.setKeySerializer(stringRedisSerializer);
        // hash的key也采用String的序列化方式
        template.setHashKeySerializer(stringRedisSerializer);
        // value序列化方式采用jackson
        template.setValueSerializer(jackson2JsonRedisSerializer);
        // hash的value序列化方式采用jackson序列化器
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        template.afterPropertiesSet();
        return template;
    }
}

4)使用RedisTemplate

常用方法:

  • ValueOperations opsForValue() 获取String类型的操作对象
  • HashOperations opsForHash() 获取hash类型的操作对象

ValueOperations操作对象

  • set(key,value) 保存key-value
  • Object get(key) 读取value

使用缓存的步骤

  1. 先查询缓存
  2. 如果查不到直接返回
  3. 如果查不到,查询数据库
  4. 数据库查到,保存缓存中
  5. 数据库查不到返回null

声明式缓存

1)在配置类上添加注解

@EnableCaching

2)在redis的配置类中添加方法

@Configuration
public class RedisConfig {

    @Bean
    public RedisCacheConfiguration provideRedisCacheConfiguration(){
        //加载默认配置
        RedisCacheConfiguration conf = RedisCacheConfiguration.defaultCacheConfig();
        //返回Jackson序列化器
        return conf.serializeValuesWith(
                RedisSerializationContext.SerializationPair
                .fromSerializer(new GenericJackson2JsonRedisSerializer()));
    }
}

3)缓存相关注解

  • @CacheConfig 使用在Service类上,可以配置缓存名称,如:@CacheConfig(cacheNames="books")
  • @Cacheable使用在查询方法上,让方法优先查询缓存
  • @CachePut使用在更新和添加方法上,数据库更新和插入数据后同时保存到缓存里
  • @CacheEvice使用在删除方法上,数据库删除后同时删除缓存

注意:缓存的实体类必须实现序列化接口,在配置类中配置序列化(2)

标签:缓存,spring,redis,基础知识,template,Redis,序列化
From: https://www.cnblogs.com/mmda-site/p/17578109.html

相关文章

  • redis - 环境搭建
    一:简介(来自百科)redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,r......
  • 封装RedisTemplate工具类
    packagecom.juxi.common.redis.service;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.data.redis.core.*;importorg.springframework.stereotype.Component;importjava.time.Duration;importjava.util.*;importja......
  • rodert单排学习redis进阶【青铜】
    redis之青铜image.png[toc]前言声明:参考来源互联网,有任何争议可以留言。站在前人的肩上,我们才能看的更远。本教程纯手打,致力于最实用教程,不需要什么奖励,只希望多多转发支持。欢迎来我公众号,希望可以结识你,也可以催更,微信搜索:JavaPub有任何问题都可以来谈谈![图片上传失......
  • redis存取数据转换异常
    问题:存入数据数值类型,进行increment报错,数据转换异常排查原因:存入的是long类型的对象,后面有L,例如1L,在进行increment的时候当做数值处理,1后面有个L,所以类型转换异常解决:存入int类型的数据,就可以解决该问题......
  • redis 查看list 长度
    Redis查看List长度在使用Redis时,我们经常会使用List数据结构来存储和操作一系列的元素。Redis的List是一个有序的、可重复的数据结构,它可以用于实现队列(Queue)和栈(Stack)等数据结构。在某些场景下,我们可能需要查看List中元素的数量,本文将介绍如何使用Redis命令来查看List的长度。Re......
  • redis 查看key的值
    Redis查看Key的值简介Redis是一个高性能的开源内存数据库,常用于缓存、消息传递、实时分析等场景。在开发过程中,我们经常需要查看Redis中存储的数据,这里将介绍如何使用命令行和代码查看RedisKey的值。步骤概览下面是查看RedisKey值的步骤概览:步骤描述步骤......
  • redis 查看hash当前 大小
    Redis查看Hash当前大小概述本文将介绍如何使用Redis命令查看一个Hash数据结构的当前大小。我们将通过以下步骤来完成这个任务:建立与Redis服务器的连接;执行Redis命令查看Hash的当前大小;获取并解析命令的返回结果。步骤下表概述了完成任务所需的步骤和相应的代码。步骤......
  • redis 查看 redis list数据
    Redis查看RedisList数据Redis是一个开源的内存数据库,常用于存储和处理大量的数据。Redis提供了多种数据结构,其中之一就是List。List是一个有序的字符串列表,可以在列表的两端进行插入和删除操作。在使用Redis时,我们经常需要查看已经存储在List中的数据。本文将介绍如何使用Redis......
  • redis 布隆过滤器 详解
    Redis布隆过滤器详解介绍在本文中,我们将详细讨论Redis布隆过滤器的实现过程。布隆过滤器是一种高效的数据结构,它可以用来判断一个元素是否存在于一个集合中,同时也可以用于去重和缓存等场景。在实际应用中,布隆过滤器的效率较高,并且占用的内存较小。什么是布隆过滤器布隆过滤器是......
  • .net core使用redis进行分布式事务锁
    .netcore使用redis进行分布式事务锁一、在.NETCore中,可以使用StackExchange.Redis库来实现Redis分布式锁。下面是一个简单的示例代码:usingStackExchange.Redis;usingSystem;publicclassRedisLock{privatereadonlyIDatabase_database;privaterea......