快速学习和上手Redis

一.Redis是什么?

可以理解为一种非关系型数据库,中间键,但是严格的说不是数据库,是一种数据结构化存储方法的集合,不遵守sql标准,事务,

1.2为什么大家要用它可以干什么?

A-数据存在内存上的,存取速度快,不易丢失,       

B-可以进行存储的类型有五大类型

C-可进行集群和事务的操作

D-对多个语言的客户端都有接口,比较方便

一般的在实际的项目上的用处在:做缓存,登录时存储信息,排行榜,防止线程安全的计数器等

二.Redis的安装和使用

2.1下载的地址 

Download | Redis ;

中文官网:CRUG网站

下载之后直接进行解压即可玩

2.2使用命令启动redis

可直接进行双击,但是建议是cmd启动

2.2redis的五大数据类型--基本命令操作

A-String类型 -key —value类型

set name XX --设置key为name 值为xx

get name xx 获取key为name 值为xx

mset (设置多个值) mget(获取多个)

太多了截图自己看吧

 B-List类型

C-key类型

 D-set类型

 E-hash类型

 2.3实战使用java操作redis

基于SpringBoot项目进行搭建之下

相应的导入依赖包

<!--spirngboot springdata对redis支持-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

在配置文件进行相关基本的的配置

redis:
    database: 0
    host: 127.0.0.1
    port: 6379
    password: 123456
    jedis:
      pool:
        max-wait: 2000ms
        min-idle: 2
        max-idle: 8

在代码里面进行使用

 @Autowired
    private RedisTemplate redisTemplate;
    @Test
    public void test(){
        redisTemplate.opsForValue().set("redis","string类型");
        System.out.println(redisTemplate.opsForValue().get("redis"));
    }

注意这里会有一个序列化的问题,

当我们把对象放到redis的时候在拿出来的时候会有一个序列化的问题,所以我们需要进行反序列化的操作,

方法一:你要放到redis的对象进行实现Serializer接口,但是这样每个要放的类进行进行实现,

方法二:对redis进行改造,

放弃之前的redis接口,用下面的redis进行项目中的操作

/缓存的配置
@Configuration
public class RedisConfig {

    @Resource
    private RedisConnectionFactory factory;


    //使用JSON进行序列化
    @Bean
    public RedisTemplate<Object, Object> redisTemplate() {
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(factory);
        //JSON格式序列化
        GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
         //key的序列化
        redisTemplate.setKeySerializer(genericJackson2JsonRedisSerializer);
        //alue的序列化
        redisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer);
        //hash结构key的虚拟化
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        //hash结构value的虚拟化
        redisTemplate.setHashValueSerializer(genericJackson2JsonRedisSerializer);
        return redisTemplate;

    }
}

不同的点在进行引入的时候 使用序列化的redis

//序列化的redis
    @Autowired
    private RedisTemplate<Object,Object> redisTemplate;

3.redis的持久化

有无redis是基于内存来实现的,为了防止宕机等造成的数据的丢失,

redis吧内存里面的数据进行备份到另一个磁盘,

redis的两种持久化方式:AOP ,RDB

  • RDB:记录数据快照
     
       优点:  
           1.产生一个持久化文件,方便文件备份 , 灾难恢复RDB是非常不错的选择
           2.Fork子进程去持久化, 性能比AOF好,文件体积更小,启动时恢复速度快
       缺点:
          1.没办法100%s数据不丢失
          2.数据集大,FORk子进程持久化时会服务器卡顿


    AOF: 记录写命令
       优点:  
         1.数据更安全
         2.采用Append,即使持久的时候宕机,也不影响已经持久的数据
         3.日志过大,可以rewrite重写
         4.AOF日志格式清晰,容易理解  
     

       缺点:
          1.AOF文件通常要大于RDB文件
          2.AOF数据恢复比RDB慢
      

    最佳实践:二者结合 ,RDB来数据备份,迁移,容灾  。 AOF持久化保证数据不丢失。

4.Redis的淘汰机制

有哪些淘汰机制呢?

  • volatile-lru :从已设置过期时间的数据集中挑选最近最少使用的数据淘汰

  • volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰

  • volatile-random:从已设置过期时间的数据集中任意选择数据淘汰

  • allkeys-lru:从数据集中挑选最近最少使用的数据淘汰

  • allkeys-random:从数据集中任意选择数据淘汰

  • no-enviction:不使用淘汰

对于修改配置redis.window.conf,修改maxmemory来调制淘汰机制

关于redis的东西还有很多不止,比如哨兵模式,cluster集群,做缓存遇到的雪崩,击穿,穿透,等

本文章只是在于让初学者快速在项目里面进行使用到redis这个中间件而已,后续推出redis深入版

欢迎进行学习交流,不足之处请指出,喜欢麻烦点赞+收藏,谢谢各位大佬了

猜你喜欢

转载自blog.csdn.net/m0_67601895/article/details/126362254
今日推荐