首页 > 其他分享 >1、reids 基础

1、reids 基础

时间:2023-11-12 15:44:06浏览次数:25  
标签:redis 基础 reids Redis RedisTemplate Spring 序列化 redisTemplate

SortedSet类型

特性

1.可排序

2.元素不重复性

3.查询速度快

与普通的集合类型相比,SortedSet 主要有以下两个特点:

  1. 有序性:根据分数对元素进行排序,便于范围查找等操作。
  2. 不重复性:即使添加了相同的元素,也只会保留一个。

SortedSet 提供了许多常用的操作方法,包括添加元素、删除元素、查找元素、范围查找(支持按分数范围、按排名范围)等。具体的方法和使用方式可以参考 Redis 文档或教程。

在实际应用中,SortedSet 可以用于排行榜、计数器、带权重的任务队列等场景。以排行榜为例,可以将玩家与对应的分数作为 SortedSet 的元素,进行插入、删除、更新操作,同时可以方便地进行排名查找、前几名的统计等操作。

 

redis的java客服端

jedis: 以Redis命令作为方法名称,学习成本低,简单实用。但是Jedis实例是线程不安全的,多线程环境下需要基于连接池来使用

lettuce:Lettuce是基于Netty实现的,支持同步、异步和响应式编程方式,并且是线程安全的。支持Redis的哨兵模式、集群模式和管道模式。

redisson:Redisson是一个基于Redis实现的分布式、可伸缩的Java数据结构集合。包含了诸如Map.Queue. Lock.Semaphore. AtomicLong等强大功能

java-redis-client

vertx-redis-client

jedis

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>5.0.0-alpha2</version>
        </dependency>

jedis连接池

Jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,因此使用Jedis连接池代替Jedis

 SpringDateRedis

Spring   Redis的优点:

  1. 简化的 API:Spring Data Redis提供了简单易用的API,使得与Redis进行交互变得更加方便和高效。

  2. 集成Spring生态系统:Spring Data Redis与其他Spring生态系统无缝集成,如Spring Boot、Spring MVC等,可以方便地与其他组件和框架进行协作开发。

  3. 缓存支持:Spring Data Redis提供了缓存注解,可以方便地将方法结果缓存到Redis中,提高系统性能和响应速度。

  4. 声明式事务管理:Spring Data Redis支持声明式事务管理,可以通过注解的方式来管理Redis操作的事务,保证数据的一致性和隔离性。

  5. 多种序列化支持:Spring Data Redis支持多种数据序列化方式,如JSON、XML、Protobuf等,使得存储和读取数据更加灵活可扩展。

  6. 强大的功能支持:Spring Data Redis提供了丰富的功能支持,如分布式锁、发布订阅、Lua脚本执行等,可以满足复杂应用场景下的需求。

主要缺点:

  1. 性能考虑:虽然Redis本身是一个高性能的内存数据库,但使用Spring Data Redis进行数据访问时,需要考虑性能问题,避免不必要的网络开销和序列化开销。

<!--        redis 依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
<!--        连接池依赖-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>

 yml中的配置

spring:
  #redis的所有配置方式
  redis:
    host: localhost
    port: 6379
#    password: 123456 # 如果有密码,请填写密码
    timeout: 2000ms
    lettuce:
      pool:
        max-active: 8 #最大连接
        max-idle: 8 #最大空闲连接
        min-idle: 0 #最小空闲连接
        max-wait: -1ms #连接等待时间

RedisTemplate的两种序列化实践方案

方案一:

1.自定义RedisTemplate
2.修改RedisTemplate的序列化器为GenericJackson2JsonRedisSerializer

方案二:

1.使用StringRedisTemplate
2.写入Redis时,手动把对象序列化为JSON
读取Redis时,手动把读取到的JSON反序列化为对象

RedisTemplate的序列化方式

 config
@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
        // 创建Template对象
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        // 设置连接工厂
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置序列化工具
        GenericJackson2JsonRedisSerializer jsonRedisSerializer =
                new GenericJackson2JsonRedisSerializer();
        // key和 hashKey采用 string序列化
        redisTemplate.setKeySerializer(RedisSerializer.string());
        redisTemplate.setHashKeySerializer(RedisSerializer.string());
        // value和 hashValue采用 JSON序列化
        redisTemplate.setValueSerializer(jsonRedisSerializer);
        redisTemplate.setHashValueSerializer(jsonRedisSerializer);
        return redisTemplate;
    }
}
测试代码:
  @Autowired
  RedisTemplate<String,Object> redisTemplate;
    @Test
  void BookTypeName(){
      List<BookTypeNameEntity> list = bookTypeNameService.list();
      BookTypeNameEntity bookTypeNameEntity = list.get(0);
      System.out.println(bookTypeNameEntity);
      redisTemplate.opsForValue().set("bookType1",bookTypeNameEntity);
      Object name = redisTemplate.opsForValue().get("bookType1");
      System.out.println(name);
    }

StringRedisTemplate的序列化方式

  @Autowired
  StringRedisTemplate stringRedisTemplate;

  private static final ObjectMapper mapper = new ObjectMapper();

  @Test
  void StringBookTypeName() throws JsonProcessingException {
    List<BookTypeNameEntity> list = bookTypeNameService.list();
    //获取对象
    BookTypeNameEntity bookTypeNameEntity = list.get(0);
    System.out.println(bookTypeNameEntity);
    //手动序列化
    String s = mapper.writeValueAsString(bookTypeNameEntity);
    // 写入数据
    stringRedisTemplate.opsForValue().set("bookType3", s);
    String name = stringRedisTemplate.opsForValue().get("bookType3");
    // 手动反序列化
    BookTypeNameEntity book = mapper.readValue(name,BookTypeNameEntity.class);
    System.out.println(name);
  }
Hash 的 StringRedisTemplate 方式
  @Test
  void toHashBookTypeName()   {
    stringRedisTemplate.opsForHash() .put(  "user:400", "name","虎哥");
    stringRedisTemplate.opsForHash().put( "user:400",  "age" , "121") ;
    Map<Object, Object> entries = stringRedisTemplate.opsForHash().entries(  "user:400");
    System.out.println("entries-----------"+entries);
  }

 

 

 

 

 

标签:redis,基础,reids,Redis,RedisTemplate,Spring,序列化,redisTemplate
From: https://www.cnblogs.com/xbinbin/p/17793774.html

相关文章

  • Linux基础命令(二)
    >命令:重定向把ls命令返回的结果输出到1.txt文件中,会覆盖文件内容(默认情况下ls命令返回显示在屏幕上):ls>1.txt把ls命令返回的结果输出到1.txt文件中,追加内容(默认情况下ls命令返回显示在屏幕上):ls>1.txtcat命令:查看文件内容查看1.txt,2.txt的内容:cat1.txt2.txt将1.txt,2.......
  • c语言基础题(1)
    最大公约数这道题比较基础,我们要弄清楚原理就行。首先要知道什么是最大公约数,其实就是两个数能公共相除的整数,而我们要用“辗转相除法”这个数学方法,简单来说,就是不断的用被除数除以余数,直到余数为0,这样就可以了其实就是不断的换值,直到出现最大公约数。大家换换值多试一试就行了。x......
  • 2023-2024-1 20211319《计算机基础与程序设计》第七周学习总结
    2023-2024-120211319《计算机基础与程序设计》第七周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2023-2024-1-计算机基础与程序设计)这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#WEEK07这个作业的目标<写上具体方面>作业正文......
  • 2023-2024-1 20231417 《计算机基础与程序设计》第七周学习总结
    2023-2024-120231417《计算机基础与程序设计》第七周学习总结 作业信息这个作业属于哪个课程<班级的链接>(https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP)这个作业要求在哪里<作业要求的链接>(https://www.cnblogs.com/rocedu/p/9577842.html#WEEK07)......
  • 【9.0】Go语言基础之字符串
    【一】字符编码引入https://www.cnblogs.com/dream-ze/p/17826956.html【二】字符串操作【1】获取字符串的字节(byte)(1)英文字符packagemainimport"fmt"funcmain(){ //字符串 //【1】单独获取每个字符串的字节byte //定义字符串 word:="Helloworld!" fo......
  • 【10.0】Go语言基础之指针
    【一】什么是指针指针是—种存储变量内存地址(MemoryAddress)的变量。如上图所示,变量b的值为156,而b的内存地址为0x1040a124。变量α存储了b的地址。我们就称a指向了b。【二】指针的定义【1】指针的语法基础1类型前放*表示指针类型,这个类型的指针,指向......
  • 坦克大战基础版
    基本介绍这个项目学习的是韩顺平老师的坦克大战,课程地址为https://www.bilibili.com/video/BV1fh411y7R8?spm_id_from=333.999.0.0项目结构用到的技术java面向对象编程多线程文件i/o操作数据库必备知识绘图坐标体系绘图入门原理Component类提供了两个和绘图相关......
  • Java基础、MySQL数据库、Web前端
    三、简答题(共10题,共30分)1、请写出CSS的6种选择器,并举例?l 标签选择器:a、li、div、table等等l 类选择器:.nav、.itemsl id选择器:#logo、#item1l 通配符选择器:*l 后代选择器:ulli、divaspan等l 并集选择器:li,div,h1l 交集选择器:li.item、input.username等2、将图片展示在网页......
  • ASP.NET Core MVC的基础知识
    1,模型(Model):它代表应用程序中处理数据和业务逻辑的部分。模型通常包含用于访问数据库、读取数据、验证数据等操作的代码。2,视图(View):它代表应用程序的用户界面部分。视图通常是一个HTML文件,它通过模型中的数据来渲染页面。3,控制器(Controller):它代表应用程序的业务逻辑和控......
  • 2023-2024-1 20231403 《计算机基础与程序设计》第七周学习总结
    作业信息这个作业属于哪个课程<班级的链接>(如2022-2023-1-计算机基础与程序设计)这个作业要求在哪里2023-2024-1计算机基础与程序设计第七周作业)这个作业的目标自学《计算机科学概论》第8章《C语言程序设计》第6章作业正文https://www.cnblogs.com/lsrmy/p/17......