数据库开发标题-redis
2022年9月4日大约 3 分钟
数据类型
Redis 中有 5 种数据类型:String(字符串类型)、List(列表类型)、Hash(哈希类型)、Set(集合类型)、ZSet(有序集合类型)。
Redis 指令中大小写通用。
# 选择要使用的数据库,默认16个库,dbid为 0~15
SELECT <dbid>
# 设置数据库的数量(默认16)
databases <dbcount>String
# 设值
SET Key Value [EX seconds]
# 批量设值
MSET Key Value[Key Value…]
# 批量添加,若其中任何一个key已存在,这个操作全部不会执行
MSETNX Key Value [Key Value…]
# 批量获取
MGET Key[Key…]
# 增加/减少1
INCR/DECR Key
# 增加/减少 number
INCRBY/DECRBY Key Number
# 浮点数字增加(无减少指令,可增加负数达到目的)
INCRBYFLOAT Key NumberList
基于双向链表实现的,可以支持正向、反向查找和遍历。
# 左/右推入
LPUSH/RPUSH Key Value [Value…]
# 左/右弹出
LPOP/RPOP Key
# 获取列表的长度
LLEN Key
# 获取指定位置上的元素
LINDEX Key index
# 设置指定位置上的元素
LSET Key index ValueHash
类似于 Java 中的 HashMap,哈希表中的字段名是唯一的。
# 在键为 key 的哈希表中,为字段 Field 设置值 Value
HSET Key Field Value
# 同时设置多个键值对到哈希表
HMSET key field1 value1 [field2 value2…]
# 获取 hash 表中所有字段和值
HGETALL keySet
Set(集合)也是一个列表,和 List 不同之处在于它是可以自动去掉重复元素的。多次添加相同的 key,新值会覆盖旧值。
# 添加元素
SADD Key member1 [member2…]
# 移除元素
SREM Key member1 [member2…]
# 获取成员数量
SCARD Key
# 获取所有成员
SMEMBERS KeyZSet
ZSet(有序集合)和 Set(集合)的使用场景类似,区别是 Zset 会根据提供的 score 参数自动排序。
# 添加元素;根据 score 的值排序
ZADD Key Score1 member1 [ScoreN memberN…]
# 删除元素
ZREM Key member1[memberN…]
# 获取 score 分值
ZSCORE Key member
# 加分
ZINCRBY Key Score member
# 分值排名
ZRANK Key member
# 成员数量
ZCARD Key常用操作
常用操作
# 登录
redis-cli -h <hostname> -p <port> -a <password>
# 获取所有key
keys *
# 逐个删除指定key
del key1 key2 key3批量删除
# 定义目标 key 前缀
REDIS_KEY="zelv-token"
MATCH_PATTERN="${REDIS_KEY}:*"
# 检查 Redis 是否可用
if ! redis-cli ping | grep -q "PONG"; then
echo "Redis 未启动或无法连接,请检查 Redis 服务!"
exit 1
fi
echo "开始清理 Redis 缓存,匹配模式:$MATCH_PATTERN"
# 初始化变量
cursor=0
deleted=0
# 使用 SCAN 和 DEL 逐步清理键
while :; do
# SCAN 返回游标和匹配的键列表
result=$(redis-cli scan $cursor match "$MATCH_PATTERN" count 1000)
cursor=$(echo "$result" | head -n 1) # 游标
keys=$(echo "$result" | tail -n +2) # 匹配的键
# 删除匹配的键
if [[ ! -z "$keys" ]]; then
redis-cli del $keys > /dev/null
deleted=$((deleted + $(echo "$keys" | wc -w)))
fi
# 如果游标为 0,表示 SCAN 已完成
if [[ "$cursor" == "0" ]]; then
break
fi
done
echo "Redis 缓存清理完成,删除的键数量:$deleted"Redis Java 客户端
| 客户端 | 描述 |
|---|---|
| Jedis | Jedis 是基于 Java 的传统阻塞式(Blocking)IO 模型,每个请求都会创建一个新的连接。Jedis 是单线程的,不支持异步操作,在高并发场景下性能有限 |
| Lettuce | 基于 Netty 实现的,采用了异步和非阻塞的 IO 模型,支持连接池和多个异步命令的批量执行,适用于高并发和高吞吐量的场景 |
| Spring Data Redis | 使用了 Jedis、Lettuce 或 Redisson 作为底层连接池,因此它可以选择不同的客户端实现 |
| Redisson | Jedis 和 Lettuce 更侧重对 Reids 的 CRUD,而 Redisson 侧重于分布式开发。Redisson 使用了 Netty 作为底层通信框架,支持异步和非阻塞的 IO 模型,它提供了丰富的功能,包括分布式对象、分布式集合、分布式锁、分布式信号量等。 |

