什么是Redis

Info

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and
message broker

翻译为:Redis是一个开源的内存中的数据结构存储系统,它可以用作:数据库、缓存和消息中间件。官网:https://redis.io
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供的数据是可以达到100000+的QPS(每秒内查询次数)。它存储的value类型比较丰富,也被称为结构化的NoSql数据库。

NoSql (Not only sQL),不仅仅是SQL,泛指非关系型数据库。NoSql数据库并不是要取代关系型数据库,而是关系型数据库的补充。

Redis应用场景

  • 缓存(可以延伸很多比如搜索,...)
  • 任务队列
  • 消息队列
  • 分布式锁

安装配置启动

下载安装

PC绿色版直接解压即可

Linux 基于c++编写,在解压文件后在redis的根目录执行make命令进行编译然后进入src目录中执行make install指令进行安装

image-20230119095356825

目录骨架和配置

有两个配置文件,具体用哪个启动服务端的时候通过命令参数指定即可

image-20230119104032802

基础配置:

  • 后台运行:protected-mode yes

  • 端口:port 6379

  • 设置密码:打开requiepass 自定义密码的注释

  • 允许远程连接:注释掉bind 127.0.0.1

  • 创建的数据库数量:databases 具体的数量(Redis默认创建16个数据库,0-15,默认操作的是第0号数据库,通过select 数据库序号命令进行切换)

    image-20230119120415424

启动连接

安装完成后会有一个客户端和一个服务端(CS架构),先启动服务端,再通过客户端连接进行操作

启动服务

./redis-server ./redis.conf

客户端连接

./redis-cli -h localhost -p 6379 -a 密码
或者先连接
./redis-cli -h localhost -p 6379
提示没有权限的时候输入auth 密码解锁权限

Redis 5中常用数据类型

Redis的键只能是String类型,他常用的数据类型指的是值的数据类型

image-20230119103349666

常用命令

完整官方文档:

字符串类型常用命令

  • SET key value
    设置指定key的值
  • GET key
    获取指定key的值
  • SETEX key seconds value——验证码
    设置指定key的值,并将key的过期时间设为seconds秒
  • SETNX key value——分布式锁
    只有在 key不存在时设置key的值工

image-20230119114904499

哈希类型常用命令

Redis hash是一个string类型的 field 和value的映射表,hash特别适合用于存储对象,常用命令:

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

image-20230119111800992

列表list操作命令

Redis列表是简单的字符串列表,按照插入顺序排序(任务队列),常用命令:

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

image-20230119112414876

集合常用命令

无序集合set

Redis set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据,常用命令:

  • SADD key member1 [member2]

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

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

  • SCARD key
    获取集合的成员数

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

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

  • SDIFF key1 [key2]
    返回给定所有集合的差集——前减后

  • SREM key member1 [member2]

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

image-20230119113521380

有序集合sorted set

Redis sorted set有序集合是string类型元素的集合,且不允许重复的成员。每个元素都会关联一个double类型的分数(score)。redis正是通过分数来为集合中的成员进行从小到大排序。有序集合的成员是唯一的,但分数却可以重复。常用命令:

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

image-20230119113319193

通用命令

不论是对应何种value类型的key都可以操作的通用命令

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

image-20230119114552288

Java操作Redis

Redis的Java客户端很多,官方推荐的有三种:

  • Jedis
    • 获取连接
    • 执行操作
    • 关闭连接
  • LettuceRedisson
  • Spring 对 Redis客户端进行了整合,提供了Spring Data Redis,在Spring Boot项目中还提供了对应的Starter,即spring-boot-starter-data-redis(对Jedis进行了封装)✔️

spring-boot-starter-data-redis

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

  • ValueOperations:简单K-V操作
  • setOperations: set类型数据操作
  • zsetOperations: zset类型数据操作
  • HashOperations:针对map类型的数据操作
  • ListOperations:针对list类型的数据操作
Tip

RedisTemplate对象默认分别给set和get方法进行了对键和值的序列化和反序列化,所以在Redis客户端查看key和value的时候会看到键和值不是自己设置的样子。但是在Java代码操作中却能得到想要的值,因为get操作会按规则相应执行反序列化得到本意的值

如果我们不希望对存储的值进行序列化,我们可以在配置类声明RedisTemplate的序列化和反序列化方法覆盖SpringBoot启动时内置的RedisTemplate的序列化和反序列化方法:

image-20230119122600412

使用步骤

  1. 导入依赖坐标
    image-20230119122213269

  2. 配置Redis

    image-20230119122115761

  3. 开始使用
    start:Redis-08-Redis常用命令集合类型&有序集合类型操作命令哔哩哔哩_bilibili
    通过RedisTemplate对象获取操作对应数据类型的对象再操作即可,两个例子:

    • opsForValue:
      image-20230119122716540
  • hashOperations:
    image-20230119125343636