redis基础知识

Redis是什么?

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

Redis的特点?

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

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 关闭保护模式

使配置项生效

make

Windows安装

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

Redis的数据类型?

  • string
  • hash
  • list
  • set
  • zset

Redis的数据类型的操作

String

set 键  值
get 键
del 键
incr 键
decr 键
incrby 键
decrby 键

1690305705970

hash

hmset
hmget

list

1690306016102

set

1690306249606

1690306262679

sinter 取交集

sdiff 取差集

sunion 取并集

zset

zadd key score value 添加数据

zrangebyscore key start end 读取数据

zrange key start end 读取数据

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. 查询数据库,如果查到,保存在缓存中,并且返回;如果查不到,返回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)

总结:

​ 本篇讲了redis的安装,redis的物种不同数据类型及其操作,redis的事务,redis开发中的编程时缓存和声明式缓存的实现。

posted @ 2023-07-24 19:12  萌萌哒的鸡蛋饼  阅读(52)  评论(0编辑  收藏  举报