目录
[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.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:查找所有符合给定模式pattern的key。(生产环境慎用,可能导致阻塞) -
DEL key:删除一个指定的key。 -
EXISTS key:判断key是否存在。 -
EXPIRE key seconds:为key设置过期时间,单位秒。 -
TTL key:查看key的剩余过期时间。-
-2:key不存在。 -
-1:key存在但没有设置过期时间。 -
正数:剩余的秒数。
-
1.2 String类型
字符串类型,是Redis最基本的数据类型。一个key对应一个value。value可以是字符串、整数或浮点数。
-
最大容量 :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下所有的field和value。 -
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:求key1与key2的差集(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客户端,使用直连模式,线程不安全。建议使用连接池。
-
快速入门:
-
引入依赖:
XML<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.7.0</version> </dependency> -
使用连接池:
javapublic 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家族的一部分,提供了高度封装的
RedisTemplate和StringRedisTemplate来操作Redis。 -
快速入门:
-
引入依赖(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> -
配置
application.yml:XMLspring: redis: host: 192.168.150.101 port: 6379 password: 123321 lettuce: pool: max-active: 8 max-idle: 8 min-idle: 0 max-wait: 100ms
-
使用
RedisTemplate或StringRedisTemplate: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)。-
优点:节省内存,无需存储类信息。
-
缺点:需要手动进行序列化/反序列化。
-
-