Day-05

Redis的使用

简介

Redis是一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件。是非关系数据库的一种。

Redis在Window环境中的启动

详细可见:(跟资料上略有不同)Windows环境下修改redis默认端口和密码,以及启动方式_windows修改redis端口_过尽漉雪千山的博客-CSDN博客

Redis的基本使用

(1)常见数据类型
  • 字符串(string):普通字符串,Redis中最简单的数据类型

  • 哈希(hash):也叫散列,类似于Java中的HashMap结构

  • 列表(list):按照插入顺序排序,可以有重复元素,类似于Java中的LinkedList

  • 集合(set):无序集合,没有重复元素,类似于Java中的HashSet

  • 有序集合(sorted set/zset):集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素

(2)基本操作命令
1. 字符串操作命令
  • SET key value 设置指定key的值

  • GET key 获取指定key的值

  • SETEX key seconds value 设置指定key的值,并将 key 的过期时间设为 seconds 秒

  • SETNX key value 只有在 key 不存在时设置 key 的值

2. 哈希操作命令
  • HSET key field value 将哈希表 key 中的字段 field 的值设为 value

  • HGET key field 获取存储在哈希表中指定字段的值

  • HDEL key field 删除存储在哈希表中的指定字段

  • HKEYS key 获取哈希表中所有字段

  • HVALS key 获取哈希表中所有值

常用于存储对象。

Day-05_第1张图片

 3. 列表操作命令
  • LPUSH key value1 [value2] 将一个或多个值插入到列表头部

  • LRANGE key start stop 获取列表指定范围内的元素

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

  • LLEN key 获取列表长度

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

每个元素按照插入顺序排序。

Day-05_第2张图片

4. 集合操作命令
  • SADD key member1 [member2] 向集合添加一个或多个成员

  • SMEMBERS key 返回集合中的所有成员

  • SCARD key 获取集合的成员数

  • SINTER key1 [key2] 返回给定所有集合的交集

  • SUNION key1 [key2] 返回所有给定集合的并集

  • SREM key member1 [member2] 移除集合中一个或多个成员

set集合是一种无序集合,集合成员是唯一的,不允许重复。

Day-05_第3张图片

5. 有序集合操作命令
  • ZADD key score1 member1 [score2 member2] 向有序集合添加一个或多个成员

  • ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序集合中指定区间内的成员

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

  • ZREM key member [member ...] 移除有序集合中的一个或多个成员

zset集合是一种有序集合,集合成员唯一,每个元素都会关联一个double类型的分数,并按照此分数的大小进行排序。

Day-05_第4张图片

 6. 通用命令
  • KEYS pattern 查找所有符合给定模式( pattern)的 key

  • EXISTS key 检查给定 key 是否存在

  • TYPE key 返回 key 所储存的值的类型

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

在Java中操作Redis

(1)引入Spring Data Redis依赖

	org.springframework.boot
	spring-boot-starter-data-redis
(2)配置Redis数据源
sky:
  redis:
    host: localhost
    port: 8888
    password: 666666
    database: 0    # Redis一个连接有16个数据库,默认在0号数据库
(3)Redis的配置类
@Configuration
@Slf4j
public class RedisConfiguration {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
        log.info("开始创建redis模板对象...");
        RedisTemplate redisTemplate = new RedisTemplate();
        //设置redis的连接工厂对象
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置redis key的序列化器,默认是JdkSerializationRedisSerializer,为便于查看,设置StringRedisSerializer序列化器。
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}

Spring Boot 框架会自动装配 RedisTemplate 对象。

(4)通过RedisTemplate对象操作Redis

常用操作对象

@SpringBootTest
public class SpringDataRedisTest {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    void testRedisTemplate() {
        System.out.println(redisTemplate);
        // 操作字符串类型数据的对象
        ValueOperations valueOperations = redisTemplate.opsForValue();
        // 操作hash类型数据的对象
        HashOperations hashOperations = redisTemplate.opsForHash();
        // 操作list列表类型数据的对象
        ListOperations listOperations = redisTemplate.opsForList();
        // 操作无序集合类型数据的对象
        SetOperations setOperations = redisTemplate.opsForSet();
        // 操作有序集合类型数据的对象
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
    }
}

业务功能

店铺营业状态设置

利用Redis缓存,将店铺营业状态设置到Redis中,不用记录到MySQL数据库。

Controller层代码

@RestController("userShopController")
@RequestMapping("/user/shop")
@Api(tags = "店铺相关接口")
@Slf4j
public class ShopController {

    public static final String KEY = "SHOP_STATUS";

    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * 获取店铺的营业状态
     * @return
     */
    @GetMapping("/status")
    @ApiOperation("获取店铺的营业状态")
    public Result getStatus(){
        Integer status = (Integer) redisTemplate.opsForValue().get(KEY);
        log.info("获取到店铺的营业状态为:{}",status == 1 ? "营业中" : "打烊中");
        return Result.success(status);
    }
}

你可能感兴趣的:(后端,java-ee,java,spring,spring,boot,redis)