第二章:Redis常见命令与Java客户端

目录

[1.1 Redis通用命令](#1.1 Redis通用命令)

[1.2 String类型](#1.2 String类型)

[1.2.1 Key的层级结构](#1.2.1 Key的层级结构)

[1.3 Hash类型](#1.3 Hash类型)

[1.4 List类型](#1.4 List类型)

[1.5 Set类型](#1.5 Set类型)

[1.6 SortedSet类型](#1.6 SortedSet类型)

2.1Redis的Java客户端

[2.1.1 Jedis](#2.1.1 Jedis)

[2.1.2 Spring Data Redis](#2.1.2 Spring Data Redis)


Redis常用命令及Java客户端使用指南

本文介绍了Redis的通用命令和五种数据类型(String、Hash、List、Set、SortedSet)的常用操作,以及两种Java客户端(Jedis和SpringDataRedis)的使用方法。Redis支持多种数据结构存储,每种类型都有特定的操作命令。在Java应用中,可通过Jedis直连或SpringDataRedis封装的RedisTemplate来操作Redis,后者提供了更便捷的序列化方案选择。文中还特别提醒了生产环境中使用KEYS命令的注意事项,并介绍了key的层级结构设计方法。

1.1 Redis通用命令

这些命令可用于所有数据类型:

  • KEYS pattern:查找所有符合给定模式 patternkey。(生产环境慎用,可能导致阻塞)

  • DEL key:删除一个指定的key

  • EXISTS key:判断key是否存在。

  • EXPIRE key seconds:为key设置过期时间,单位秒。

  • TTL key:查看key的剩余过期时间。

    • -2key不存在。

    • -1key存在但没有设置过期时间。

    • 正数:剩余的秒数。

1.2 String类型

字符串类型,是Redis最基本的数据类型。一个key对应一个valuevalue可以是字符串、整数或浮点数。

  • 最大容量 :512MB。

  • 常见命令

    • SET key value:设置或修改值。

    • GET key:获取值。

    • MSET key1 value1 key2 value2 ...:批量设置。

    • MGET key1 key2 ...:批量获取。

    • INCR key:将key中储存的整数值加1。

    • INCRBY key increment:将key所储存的值加上指定的增量。

    • SETNX key value:仅当key不存在时设置值(用于实现分布式锁)。

    • SETEX key seconds value:设置值并同时指定过期时间。

1.2.1 Key的层级结构

Redis的key允许多个单词用 : 分隔,形成层级结构。例如:

复制代码
项目名:业务名:类型:id
  • 用户数据:xiaoxin:user:1

  • 商品数据:xiaoxin:product:1

1.3 Hash类型

也叫散列,类似于Java中的 HashMap,是field-value的映射表,特别适合存储对象。

  • 常见命令

    • HSET key field value:设置field的值。

    • HGET key field:获取field的值。

    • HMSET key field1 value1 field2 value2 ...:批量设置多个field。(注:新版本推荐用HSET

    • HMGET key field1 field2 ...:批量获取多个field的值。

    • HGETALL key:获取该key下所有的fieldvalue

    • HKEYS key:获取所有的field

    • HINCRBY key field increment:为field的值加上增量。

    • HSETNX key field value:仅当field不存在时设置值。

1.4 List类型

双向链表结构,有序、元素可重复。支持从两端插入或弹出。

  • 常见命令

    • LPUSH key element ...:从左侧插入一个或多个元素。

    • LPOP key:移除并返回左侧第一个元素。

    • RPUSH key element ...:从右侧插入一个或多个元素。

    • RPOP key:移除并返回右侧第一个元素。

    • LRANGE key start end:返回指定索引范围内的元素(支持负数索引)。

    • BLPOP key timeout:阻塞式地从左侧弹出元素,如果列表为空,会等待直到超时或有元素可弹出。

1.5 Set类型

无序集合,元素不可重复,支持交集、并集、差集等操作。

  • 常见命令

    • SADD key member ...:添加一个或多个元素。

    • SREM key member ...:移除指定元素。

    • SCARD key:返回元素个数。

    • SISMEMBER key member:判断元素是否在集合中。

    • SMEMBERS key:获取集合中的所有元素。

    • SINTER key1 key2 ...:求多个集合的交集。

    • SDIFF key1 key2:求key1key2的差集(key1中有而key2中没有)。

    • SUNION key1 key2 ...:求多个集合的并集。

1.6 SortedSet类型

可排序的Set集合,每个元素都关联一个score(分数),用于排序。底层是跳表(SkipList)+ Hash表。

  • 常见命令

    • ZADD key score member:添加一个元素,或更新已存在元素的score

    • ZREM key member:删除指定元素。

    • ZSCORE key member:获取元素的score

    • ZRANK key member:获取元素的排名(按score升序,从0开始)。

    • ZREVRANK key member:获取元素的排名(按score降序)。

    • ZCARD key:获取集合中元素个数。

    • ZCOUNT key min max:统计score在给定范围内的元素个数。

    • ZINCRBY key increment member:为元素的score加上增量。

    • ZRANGE key start end:按score升序返回指定排名范围内的元素。

    • ZREVRANGE key start end:按score降序返回指定排名范围内的元素。

    • ZRANGEBYSCORE key min max:按score升序返回指定score范围内的元素。

2.1Redis的Java客户端

2.1.1 Jedis

  • 老牌的Redis Java客户端,使用直连模式,线程不安全。建议使用连接池。

  • 快速入门

    1. 引入依赖:

      XML 复制代码
      <dependency>
          <groupId>redis.clients</groupId>
          <artifactId>jedis</artifactId>
          <version>3.7.0</version>
      </dependency>
    2. 使用连接池:

      java 复制代码
      public class JedisConnectionFactory {
          private static final JedisPool jedisPool;
          static {
              JedisPoolConfig poolConfig = new JedisPoolConfig();
              poolConfig.setMaxTotal(8);
              poolConfig.setMaxIdle(8);
              poolConfig.setMinIdle(0);
              // 其他配置...
              jedisPool = new JedisPool(poolConfig, "192.168.150.101", 6379, 1000, "123321");
          }
          public static Jedis getJedis() {
              return jedisPool.getResource();
          }
      }

2.1.2 Spring Data Redis

  • Spring家族的一部分,提供了高度封装的RedisTemplateStringRedisTemplate来操作Redis。

  • 快速入门

    1. 引入依赖(Spring Boot):

      XML 复制代码
      <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>
    2. 配置application.yml

      XML 复制代码
      spring:
        redis:
          host: 192.168.150.101
          port: 6379
          password: 123321
          lettuce:
            pool:
              max-active: 8
              max-idle: 8
              min-idle: 0
              max-wait: 100ms
    3. 使用RedisTemplateStringRedisTemplate

      java 复制代码
      @Autowired
      private StringRedisTemplate stringRedisTemplate;
      
      public void test() {
          stringRedisTemplate.opsForValue().set("name", "王哥");
          String name = stringRedisTemplate.opsForValue().get("name");
      }
  • 序列化问题

    • RedisTemplate默认使用JDK序列化,可读性差、占用空间大。

    • 解决方案1 :自定义RedisTemplate的序列化方式为JSON(如Jackson)。

      • 优点:可读性好,自动序列化/反序列化Java对象。

      • 缺点:会存储类的类型信息,有额外内存开销。

    • 解决方案2 :使用StringRedisTemplate,所有键值都以字符串形式处理。存储对象时,手动将其序列化为JSON字符串(如使用Jackson的ObjectMapper)。

      • 优点:节省内存,无需存储类信息。

      • 缺点:需要手动进行序列化/反序列化。

相关推荐
invicinble2 小时前
对于springboot
java·spring boot·后端
·云扬·2 小时前
MySQL索引实战指南:添加场景、联合索引要点与失效场景解析
数据库·mysql
莫问前路漫漫2 小时前
JRE 核心实操指南:安装、配置、调优与问题排查
java·eclipse·tomcat·jre
填满你的记忆2 小时前
【从零开始——Redis 进化日志|Day7】双写一致性难题:数据库与缓存如何不再“打架”?(附 Canal/读写锁实战)
java·数据库·redis·缓存·面试
小白考证进阶中2 小时前
MySQL OCP认证可以考中文?备考难度怎么样?
数据库·mysql·dba·数据库管理·开闭原则·数据库管理员·mysql认证
灵感菇_2 小时前
Android OkHttp框架全解析
android·java·okhttp·网络编程
Coder_Boy_2 小时前
基于SpringAI的在线考试系统-知识点管理模块完整优化方案
java·前端·人工智能·spring boot
莫问前路漫漫2 小时前
Java Runtime Environment(JRE)全解析:Java 程序跨平台运行的核心基石
java·开发语言
进阶小白猿2 小时前
Java技术八股学习Day22
java·开发语言·学习