• SpringBoot如何整合Redis?SpringBoot如何使用Redis?Redies基本使用。


    目录

    一、SpringBoot整合Redis

             二、常见数据类型:

     1、字符串:

     2、哈希 hash :

    3、list列表:

    4、Set集合:

     5、权重有序集合set

     6、常用指令:


    一、SpringBoot整合Redis

    1、SpringBoot Data Redis:

    Spring Data Redis中提供了一个高度封装的类:RedisTemplate针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下:

    类名解释
    ValueOperations简单K-V操作
    SetOperationsset类型数据操作
    ZSetOperationszset类型数据操作
    HashOperations针对map类型的数据操作
    ListOperations针对list类型的数据操作

    2、导入依赖:

    1. <dependency>
    2. <groupId>org.springframework.bootgroupId>
    3. <artifactId>spring-boot-starter-data-redisartifactId>
    4. dependency>

    3、配置xml文件:

    1. spring:
    2. redis:
    3. host: localhost
    4. port: 6379
    5. database: 0 # redis默认会创建16个数据库,当前是保存在0号数据库
    6. jedis:
    7. pool:
    8. max-active: 8 #最大连接数
    9. max-wait: 1ms # 连接池最大等待阻塞时间
    10. max-idle: 4 # 连接池最大空闲链接
    11. min-idle: 0 #连接池中最小空闲链接

    4、书写配置类:

    Redis提供的默认序列模式会导致key值存入的时候变形,所以我们需要书写一个配置类来规范这一操作,避免key不对应问题。

    1. import org.springframework.cache.annotation.CachingConfigurerSupport;
    2. import org.springframework.context.annotation.Bean;
    3. import org.springframework.context.annotation.Configuration;
    4. import org.springframework.data.redis.connection.RedisConnectionFactory;
    5. import org.springframework.data.redis.core.RedisTemplate;
    6. import org.springframework.data.redis.serializer.StringRedisSerializer;
    7. @Configuration
    8. public class RedisConfig extends CachingConfigurerSupport {
    9. @Bean
    10. public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) {
    11. RedisTemplate redisTemplate = new RedisTemplate<>();
    12. //默认的Key序列化器为:JdkSerializationRedisSerializer
    13. redisTemplate.setKeySerializer(new StringRedisSerializer());
    14. redisTemplate.setHashKeySerializer(new StringRedisSerializer());
    15. redisTemplate.setConnectionFactory(connectionFactory);
    16. return redisTemplate;
    17. }
    18. }

    5、获取对应对象

    optFor*来获取想要操作的对象:

     以opsForValue为例,这就相当于在操作字符串类型

     

    二、常见数据类型:

     1、字符串:

    SET key value设置指定key的值1,重复设置会覆盖value,设置的值均为字符串类型
    GET key获取指定key的值
    SETEX key seconds valu设置指定key的值,并将 key 的过期时间设为 seconds 秒(验证码服务)
    SETNX key value只有在 key 不存在时设置 key 的值

    测试用例:

    在SpringBoot中的应用:

    1. @Test
    2. void testString() {
    3. redisTemplate.opsForValue().set("name2","123"); //设置一个字符串类型的键值对
    4. String name = (String) redisTemplate.opsForValue().get("name2"); //取出key=names的值
    5. System.out.println(name);
    6. //设置一个跟时间相关的key 相当于setex
    7. redisTemplate.opsForValue().set("timeKey","timeForTen",10, TimeUnit.SECONDS);
    8. //setnx 只有在 key 不存在时设置 key 的值
    9. Boolean flag = redisTemplate.opsForValue().setIfAbsent("name2", "456");
    10. System.out.println(flag); //返回false,因为name2已经存在,没有设置name2的值
    11. }

     2、哈希 hash

    HSET key field value将哈希表 key 中的字段 field 的值设为 value
    HGET key field 获取存储在哈希表中指定字段的值
    HDEL key field  删除存储在哈希表中的指定字段
      HKEYS key  获取哈希表中所有字段
    HVALS key  获取哈希表中所有值
    HGETALL key  获取在哈希表中指定 key 的所有字段和值

    测试用例:

    在SpringBoot中的应用:

    1. @Test
    2. void testHash(){
    3. //获取操作对象
    4. HashOperations hashObj = redisTemplate.opsForHash();
    5. //存值
    6. hashObj.put("key01","name","xiaoSong");
    7. hashObj.put("key01","age","12");
    8. hashObj.put("key01","sex","man");
    9. //取值
    10. String name = (String) hashObj.get("key01", "name");
    11. System.out.println(name);
    12. //获取全部的键:
    13. Set keys = hashObj.keys("key01");
    14. for (Object one : keys) {
    15. System.out.println(one);
    16. }
    17. //获取所有的值:
    18. List values = hashObj.values("key01");
    19. for (Object one : values) {
    20. System.out.println(one);
    21. }
    22. }

    3、list列表:

    1、list是Redis能实现优先队列的基础

    2、列表中是允许有重复元素的

    LPUSH key value1 [value2]  将一个或多个值插入到列表头部
    LRANGE key start stop  获取列表指定范围内的元素
    RPOP key 移除并获取列表最后一个元素
    LLEN key  获取列表长度
    BRPOP key1 [key2 ] timeout  移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时  或发现可弹出元素为止

     测试用例:

    SpringBoot中的应用

    1. @Test
    2. void testForList(){
    3. //获取操作对象
    4. ListOperations listObj = redisTemplate.opsForList();
    5. //存值
    6. listObj.leftPush("list1","a");
    7. listObj.leftPushAll("list1","b","c","d");
    8. //取值
    9. List values = listObj.range("list1",0,-1);
    10. for (String one : values) {
    11. System.out.println(one); // d b c a
    12. }
    13. //获取列表长度:
    14. Long lsize = listObj.size("list1");
    15. int size = lsize.intValue(); //long转化为int类型
    16. for (int i = 0; i < size; i++) {
    17. //出队列:
    18. String value = (String) listObj.rightPop("list1");
    19. System.out.println(value); //a b c d
    20. }
    21. }

    4、Set集合:

    无序 元素的值唯一

    SADD key member1 [member2] 向集合添加一个或多个成员
    SMEMBERS key返回集合中的所有成员
    SCARD key获取集合的成员数
    SINTER key1 [key2]  返回给定所有集合的交集
    SUNION key1 [key2]  返回所有给定集合的并集
    SDIFF key1 [key2]   返回给定所有集合的差集
    SREM key member1 [member2]  移除集合中一个或多个成员

      用例:

    SpringBoot中应用:

    1. @Test
    2. void testForSet(){
    3. //获取对象
    4. SetOperations setObj = redisTemplate.opsForSet();
    5. //存值:
    6. setObj.add("set1","b","c","a");
    7. //取值
    8. Set setList = setObj.members("set1");
    9. for (String one : setList) {
    10. System.out.println(one);
    11. }
    12. //删值:
    13. setObj.remove("set1","b");
    14. }

     5、权重有序集合set

    集合中的元素是根据每个元素的权重进行排序,且每个元素不能重复,升序排序

    ZADD key score1 member1

    [score2 member2]

    向有序集合添加一个或多个成员,或者更新已存在成员的  分数
    ZRANGE key start stop [WITHSCORES]  通过索引区间返回有序集合中指定区间内的成员
    ZINCRBY key increment member有序集合中对指定成员的分数加上增量 increment
    ZREM key member [member ...]  移除有序集合中的一个或多个成员

      测试用例:

    SpringBoot 中的应用:

    1. @Test
    2. void testForZset(){
    3. //获取对象
    4. ZSetOperations zsetObj = redisTemplate.opsForZSet();
    5. //存值
    6. zsetObj.add("zset01","a",10.0);
    7. zsetObj.add("zset01","b",12.0);
    8. zsetObj.add("zset01","c",4.0);
    9. zsetObj.add("zset01","d",7.0);
    10. //取值
    11. Set list = zsetObj.range("zset01", 0, -1);
    12. for (String one : list) {
    13. System.out.println(one);
    14. }
    15. //加分
    16. zsetObj.incrementScore("zset01","b",20.0);
    17. //删除
    18. zsetObj.remove("zset01","a","c");
    19. }

     6、常用指令:

    KEYS pattern 查找所有符合给定模式( pattern)key
    EXISTS key 检查给定 key 是否存在
     TYPE key返回 key 所储存的值的类型
    TTL key返回给定 key 的剩余生存时间(TTL, time to live),以秒为单位
    DEL key   该命令用于在 key 存在是删除 key

     测试用例:

    SpringBoot应用:

    1. @Test
    2. void testCommon(){
    3. //获取所有的key
    4. Set keys = redisTemplate.keys("*");
    5. for (String one : keys) {
    6. System.out.println(one);
    7. }
    8. //判断key是否存在
    9. Boolean name = redisTemplate.hasKey("key01");
    10. System.out.println(name);
    11. //删除指定key
    12. Boolean flag = redisTemplate.delete("zset01");
    13. System.out.println(flag);
    14. //获取指定key对应的value
    15. DataType type = redisTemplate.type("key01");
    16. System.out.println(type);
    17. }
  • 相关阅读:
    基于LangChain的LLM应用开发3——记忆
    QT教程:QSortFilterProxyModel代理实现自定义排序、联合过滤
    Sangria:类似Nova folding scheme的relaxed PLONK for PLONK
    redis和selery相关知识点
    V8垃圾回收
    (附源码)app智能手机的微课程学习系统 毕业设计 100909
    (王道考研计算机网络)第四章网络层-第五节3:BGP协议
    代码随想录算法训练营第四十四天|km46. 携带研究材料、 416. 分割等和子集
    MongoDB:数据导入、导出
    【Spark 实战系列】SparkStreaming 累加器的使用
  • 原文地址:https://blog.csdn.net/weixin_60414376/article/details/126220586