目录

一、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操作

SetOperations

set类型数据操作

ZSetOperations

zset类型数据操作

HashOperations

针对map类型的数据操作

ListOperations

针对list类型的数据操作

2、导入依赖:

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

3、配置xml文件:

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

4、书写配置类:

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

import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig extends CachingConfigurerSupport {

    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {

        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();

        //默认的Key序列化器为:JdkSerializationRedisSerializer
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());

        redisTemplate.setConnectionFactory(connectionFactory);

        return redisTemplate;
    }

}

5、获取对应对象

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

spring-boot-starter-data-redis 版本 spring boot data redis_System

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

 

二、常见数据类型:

spring-boot-starter-data-redis 版本 spring boot data redis_redis_02

 1、字符串:

SET key value

设置指定key的值1,重复设置会覆盖value,设置的值均为字符串类型

GET key

获取指定key的值

SETEX key seconds value 

设置指定key的值,并将 key 的过期时间设为 seconds 秒(验证码服务)

SETNX key value

只有在 key 不存在时设置 key 的值

测试用例:

spring-boot-starter-data-redis 版本 spring boot data redis_System_03

spring-boot-starter-data-redis 版本 spring boot data redis_redis_04

spring-boot-starter-data-redis 版本 spring boot data redis_spring_05

在SpringBoot中的应用:

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

哈希 hash :

spring-boot-starter-data-redis 版本 spring boot data redis_redis_06

HSET key field value

将哈希表 key 中的字段 field 的值设为 value

HGET key field

获取存储在哈希表中指定字段的值

HDEL key field

  删除存储在哈希表中的指定字段

  HKEYS key

  获取哈希表中所有字段

HVALS key

  获取哈希表中所有值

HGETALL key

  获取在哈希表中指定 key 的所有字段和值

测试用例:

spring-boot-starter-data-redis 版本 spring boot data redis_java_07

在SpringBoot中的应用:

@Test
    void testHash(){
        //获取操作对象
        HashOperations hashObj = redisTemplate.opsForHash();

        //存值
        hashObj.put("key01","name","xiaoSong");
        hashObj.put("key01","age","12");
        hashObj.put("key01","sex","man");

        //取值
        String name = (String) hashObj.get("key01", "name");
        System.out.println(name);

        //获取全部的键:
        Set keys = hashObj.keys("key01");
        for (Object one : keys) {
            System.out.println(one);
        }

        //获取所有的值:
        List values = hashObj.values("key01");
        for (Object one : values) {
            System.out.println(one);
        }
    }

3、list列表:

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

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

spring-boot-starter-data-redis 版本 spring boot data redis_redis_08

LPUSH key value1 [value2]

  将一个或多个值插入到列表头部

LRANGE key start stop

  获取列表指定范围内的元素

RPOP key

移除并获取列表最后一个元素

LLEN key

  获取列表长度

BRPOP key1 [key2 ] timeout

  移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时  或发现可弹出元素为止

 测试用例:

spring-boot-starter-data-redis 版本 spring boot data redis_spring_09

SpringBoot中的应用

@Test
    void testForList(){
        //获取操作对象
        ListOperations listObj = redisTemplate.opsForList();

        //存值
        listObj.leftPush("list1","a");
        listObj.leftPushAll("list1","b","c","d");

        //取值
        List<String> values = listObj.range("list1",0,-1);
        for (String one : values) {
            System.out.println(one); // d b c a
        }

        //获取列表长度:
        Long lsize = listObj.size("list1");
        int size = lsize.intValue(); //long转化为int类型
        for (int i = 0; i < size; i++) {
            //出队列:
            String value = (String) listObj.rightPop("list1");
            System.out.println(value); //a b c d 
        }
    }

4、Set集合:

无序 元素的值唯一

spring-boot-starter-data-redis 版本 spring boot data redis_spring_10

SADD key member1 [member2]

向集合添加一个或多个成员

SMEMBERS key

返回集合中的所有成员

SCARD key

获取集合的成员数

SINTER key1 [key2]

  返回给定所有集合的交集

SUNION key1 [key2]

  返回所有给定集合的并集

SDIFF key1 [key2]

  返回给定所有集合的差集

SREM key member1 [member2]

  移除集合中一个或多个成员

  用例:

spring-boot-starter-data-redis 版本 spring boot data redis_spring boot_11

SpringBoot中应用:

@Test
    void testForSet(){
        //获取对象
        SetOperations setObj = redisTemplate.opsForSet();

        //存值:
        setObj.add("set1","b","c","a");

        //取值
        Set<String> setList = setObj.members("set1");
        for (String one : setList) {
            System.out.println(one);
        }

        //删值:
        setObj.remove("set1","b");
    }

 5、权重有序集合set

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

spring-boot-starter-data-redis 版本 spring boot data redis_redis_12

ZADD key score1 member1

[score2 member2]

向有序集合添加一个或多个成员,或者更新已存在成员的  分数

ZRANGE key start stop [WITHSCORES]

  通过索引区间返回有序集合中指定区间内的成员

ZINCRBY key increment member

有序集合中对指定成员的分数加上增量 increment

ZREM key member [member ...]

  移除有序集合中的一个或多个成员

  测试用例:

spring-boot-starter-data-redis 版本 spring boot data redis_System_13

SpringBoot 中的应用:

@Test
    void testForZset(){
        //获取对象
        ZSetOperations zsetObj = redisTemplate.opsForZSet();

        //存值
        zsetObj.add("zset01","a",10.0);
        zsetObj.add("zset01","b",12.0);
        zsetObj.add("zset01","c",4.0);
        zsetObj.add("zset01","d",7.0);

        //取值
        Set<String> list = zsetObj.range("zset01", 0, -1);
        for (String one : list) {
            System.out.println(one);
        }

        //加分
        zsetObj.incrementScore("zset01","b",20.0);

        //删除
        zsetObj.remove("zset01","a","c");
    }

 6、常用指令:

KEYS pattern

查找所有符合给定模式( pattern)的 key

EXISTS key

检查给定 key 是否存在

 TYPE key

返回 key 所储存的值的类型

TTL key

返回给定 key 的剩余生存时间(TTL, time to live),以秒为单位

DEL key

  该命令用于在 key 存在是删除 key

 测试用例:

spring-boot-starter-data-redis 版本 spring boot data redis_System_14

SpringBoot应用:

@Test
    void testCommon(){
        //获取所有的key
        Set<String> keys = redisTemplate.keys("*");
        for (String one : keys) {
            System.out.println(one);
        }

        //判断key是否存在
        Boolean name = redisTemplate.hasKey("key01");
        System.out.println(name);

        //删除指定key
        Boolean flag = redisTemplate.delete("zset01");
        System.out.println(flag);

        //获取指定key对应的value
        DataType type = redisTemplate.type("key01");
        System.out.println(type);
    }