作者:ChenZhen
博客地址:https://www.chenzhen.space/
版权:本文为博主 ChenZhen 的原创文章,本文版权归作者所有,转载请附上原文出处链接及本声明。
如果对你有帮助,请给一个小小的star⭐
进入 Redis 客户端
首先,确保 Redis 服务已经启动。可以使用以下命令进入 Redis 客户端(前提是 Redis 已经安装且正在运行):
redis-cli
远程连接:如果 Redis 服务器在远程主机上,你可以使用 -h 和 -p 指定 IP 地址和端口:
redis-cli -h 192.168.1.100 -p 6379
如果 Redis 设置了密码,还需要加上 -a 参数:
redis-cli -h 192.168.1.100 -p 6379 -a yourpassword
1. Redis键 (key) 操作
-
keys *
查看当前库所有 key(匹配:keys *1
) -
exists key
判断某个 key 是否存在 -
type key
查看你的 key 是什么类型 -
del key
删除指定的 key 数据 -
unlink key
根据 value 选择非阻塞删除,仅将 keys 从 keyspace 元数据中删除,真正的删除会在后续异步操作。 -
expire key 10
为给定的 key 设置 10 秒过期时间 -
ttl key
查看还有多少秒过期,-1
表示永不过期,-2
表示已过期 -
select
命令切换数据库 -
dbsize
查看当前数据库的 key 的数量 -
flushdb
清空当前库 -
flushall
清空全部库
2. Redis五大数据类型
2.1 Redis字符串 (String)
简介
String 是 Redis 最基本的类型,你可以理解为与 Memcached 一模一样的类型,一个 key 对应一个 value。String 类型是二进制安全的,意味着 Redis 的 string 可以包含任何数据,比如 jpg 图片或序列化的对象。一个 Redis 中字符串 value 最多可以是 512M。
常用命令
-
set <key> <value> [参数]
添加键值对NX
:当数据库中 key 不存在时,可以将 key-value 添加数据库XX
:当数据库中 key 存在时,可以将 key-value 添加数据库,与 NX 参数互斥EX
:key 的超时秒数PX
:key 的超时毫秒数,与 EX 互斥
-
get <key>
查询对应键值 -
append <key> <value>
将给定的<value>
追加到原值的末尾 -
strlen <key>
获得值的长度 -
setnx <key> <value>
只有在 key 不存在时设置 key 的值 -
incr <key>
将 key 中储存的数字值加 1(只能对数字值操作,如果为空则新增值为 1) -
decr <key>
将 key 中储存的数字值减 1(只能对数字值操作,如果为空则新增值为 -1) -
incrby <key> <步长>
/decrby <key> <步长>
将 key 中储存的数字值增减自定义步长。 -
mset <key1> <value1> <key2> <value2> ...
同时设置一个或多个 key-value 对 -
mget <key1> <key2> <key3> ...
同时获取一个或多个 value -
msetnx <key1> <value1> <key2> <value2> ...
同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在(原子性,有一个失败则都失败) -
getrange <key> <起始位置> <结束位置>
获得值的范围,类似 Java 中的substring
,前包后包 -
setrange <key> <起始位置> <value>
用<value>
覆写<key>
所储存的字符串值,从<起始位置>
开始(索引从 0 开始)。 -
setex <key> <过期时间> <value>
设置键值的同时,设置过期时间,单位秒。 -
getset <key> <value>
以新换旧,设置了新值的同时获得旧值。
1. Key 操作
keys *
:查看当前数据库中所有的 key。exists <key>
:检查指定 key 是否存在,存在返回1
,否则返回0
。del <key>
:删除指定的 key。type <key>
:查看指定 key 的类型。expire <key> <seconds>
:为指定 key 设置过期时间(单位:秒)。ttl <key>
:查看指定 key 剩余的过期时间(秒数),-1
表示永不过期,-2
表示已过期。
2. String 操作
set <key> <value>
:为 key 设置字符串值。get <key>
:获取 key 对应的字符串值。incr <key>
:将 key 中储存的数字值加 1。decr <key>
:将 key 中储存的数字值减 1。append <key> <value>
:将给定的 value 追加到指定 key 的原值后。
3. List 操作
lpush <key> <value>
:将 value 插入列表的左侧。rpush <key> <value>
:将 value 插入列表的右侧。lpop <key>
:移除并返回列表的左侧元素。rpop <key>
:移除并返回列表的右侧元素。lrange <key> <start> <end>
:获取列表指定范围内的元素。
4. Hash 操作
hset <key> <field> <value>
:将 hash 表 key 中的字段 field 的值设为 value。hget <key> <field>
:获取 hash 表 key 中字段 field 对应的值。hdel <key> <field>
:删除 hash 表 key 中的指定字段。hgetall <key>
:获取 hash 表 key 中的所有字段和值。
5. Set 操作
sadd <key> <member>
:向集合 key 中添加一个元素。smembers <key>
:获取集合 key 中的所有成员。srem <key> <member>
:移除集合中的一个或多个成员。
6. Sorted Set 操作
zadd <key> <score> <member>
:向有序集合添加成员并设置分数。zrange <key> <start> <stop>
:根据分数范围获取有序集合中的成员。
7. 数据库操作
select <index>
:选择 Redis 数据库,索引从 0 开始。dbsize
:查看当前数据库的 key 的数量。flushdb
:清空当前数据库。flushall
:清空所有数据库。
8. 退出 Redis 客户端
quit
:退出 Redis 客户端。
这些命令可以帮助你完成大多数常见的 Redis 操作。
RedisTemplate 操作
RedisTemplate
是 Spring Data Redis 提供的高级 Redis 操作工具,支持多种数据结构,如字符串、哈希、列表、集合和有序集合等。以下是 RedisTemplate
的常用 API 操作:
1. 基本操作(String 类型)
@Autowired
private RedisTemplate<String, Object> redisTemplate;
// 设置值
redisTemplate.opsForValue().set("key", "value");
// 获取值
Object value = redisTemplate.opsForValue().get("key");
// 设置带过期时间的值
redisTemplate.opsForValue().set("key", "value", Duration.ofSeconds(60));
// 删除键
redisTemplate.delete("key");
// 判断键是否存在
Boolean exists = redisTemplate.hasKey("key");
// 设置新值并返回旧值
Object oldValue = redisTemplate.opsForValue().getAndSet("key", "newValue");
// 自增(整数)
Long increment = redisTemplate.opsForValue().increment("counter", 1);
// 自减(整数)
Long decrement = redisTemplate.opsForValue().decrement("counter", 1);
2. 哈希操作(Hash)
// 设置哈希字段值
redisTemplate.opsForHash().put("user:1001", "name", "张三");
// 获取哈希字段值
Object name = redisTemplate.opsForHash().get("user:1001", "name");
// 获取整个哈希表
Map<Object, Object> user = redisTemplate.opsForHash().entries("user:1001");
// 获取哈希表所有字段
Set<Object> keys = redisTemplate.opsForHash().keys("user:1001");
// 获取哈希表所有值
List<Object> values = redisTemplate.opsForHash().values("user:1001");
// 删除哈希字段
redisTemplate.opsForHash().delete("user:1001", "name");
// 判断哈希字段是否存在
Boolean exists = redisTemplate.opsForHash().hasKey("user:1001", "age");
// 增加哈希字段的数值
redisTemplate.opsForHash().increment("user:1001", "age", 1);
3. 列表操作(List)
// 左进(队列模式)
redisTemplate.opsForList().leftPush("myList", "A");
// 右进(栈模式)
redisTemplate.opsForList().rightPush("myList", "B");
// 获取列表长度
Long size = redisTemplate.opsForList().size("myList");
// 获取指定索引的值
Object item = redisTemplate.opsForList().index("myList", 0);
// 获取列表范围内的所有元素
List<Object> list = redisTemplate.opsForList().range("myList", 0, -1);
// 移除左端元素
Object leftPop = redisTemplate.opsForList().leftPop("myList");
// 移除右端元素
Object rightPop = redisTemplate.opsForList().rightPop("myList");
// 删除指定数量的值
redisTemplate.opsForList().remove("myList", 2, "A");
4. 集合操作(Set)
// 添加元素到集合
redisTemplate.opsForSet().add("mySet", "A", "B", "C");
// 获取集合所有元素
Set<Object> members = redisTemplate.opsForSet().members("mySet");
// 判断元素是否存在
Boolean isMember = redisTemplate.opsForSet().isMember("mySet", "A");
// 移除元素
redisTemplate.opsForSet().remove("mySet", "B");
// 获取集合大小
Long size = redisTemplate.opsForSet().size("mySet");
// 获取两个集合的交集
Set<Object> intersection = redisTemplate.opsForSet().intersect("set1", "set2");
// 获取两个集合的并集
Set<Object> union = redisTemplate.opsForSet().union("set1", "set2");
// 获取两个集合的差集
Set<Object> difference = redisTemplate.opsForSet().difference("set1", "set2");
5. 有序集合操作(ZSet)
// 添加元素到有序集合
redisTemplate.opsForZSet().add("myZSet", "A", 10);
redisTemplate.opsForZSet().add("myZSet", "B", 20);
// 获取集合中的所有元素
Set<Object> elements = redisTemplate.opsForZSet().range("myZSet", 0, -1);
// 获取带分数的集合元素
Set<ZSetOperations.TypedTuple<Object>> tuples = redisTemplate.opsForZSet().rangeWithScores("myZSet", 0, -1);
// 获取元素的排名
Long rank = redisTemplate.opsForZSet().rank("myZSet", "A");
// 增加元素的分数
redisTemplate.opsForZSet().incrementScore("myZSet", "A", 5);
// 删除元素
redisTemplate.opsForZSet().remove("myZSet", "B");
// 获取指定分数范围内的元素
Set<Object> rangeByScore = redisTemplate.opsForZSet().rangeByScore("myZSet", 10, 30);
6. 其他操作
// 设置键的过期时间
redisTemplate.expire("key", Duration.ofMinutes(5));
// 获取剩余存活时间(秒)
Long ttl = redisTemplate.getExpire("key");
// 清空所有 Redis 数据
redisTemplate.getConnectionFactory().getConnection().flushDb();
这些 RedisTemplate
API 覆盖了 Redis 的主要数据结构操作,实际开发中可根据业务需求进行封装和优化。