Redis复习记录Day03

Redis 字符串类型的最大值大小是多少?

java 复制代码
public void setBigString(String key, String value, int chunkSize) {
    int chunks = (value.length() + chunkSize - 1) / chunkSize;
    Pipeline pipeline = jedis.pipelined();
    for (int i = 0; i < chunks; i++) {
        int start = i * chunkSize;
        int end = Math.min(start + chunkSize, value.length());
        pipeline.set(key + ":" + i, value.substring(start, end));
    }
    pipeline.set(key + ":chunks", String.valueOf(chunks));
    pipeline.sync();
}

public String getBigString(String key) {
    int chunks = Integer.parseInt(jedis.get(key + ":chunks"));
    List<String> keys = new ArrayList<>();
    for (int i = 0; i < chunks; i++) {
        keys.add(key + ":" + i);
    }
    List<String> values = jedis.mget(keys.toArray(new String[0]));
    return String.join("", values);
}
java 复制代码
public void setCompressed(String key, String value) {
    byte[] compressed = Snappy.compress(value.getBytes(StandardCharsets.UTF_8));
    jedis.set(key.getBytes(), compressed);
}

public String getCompressed(String key) {
    byte[] compressed = jedis.get(key.getBytes());
    return new String(Snappy.uncompress(compressed), StandardCharsets.UTF_8);
}

Redis 性能瓶颈时如何处理?

java 复制代码
# 查看实时性能指标
redis-cli info stats

# 慢查询日志,超过 10ms 的命令都记下来
config set slowlog-log-slower-than 10000
slowlog get 10

# 内存分析
memory doctor
memory stats

Redis 集群的实现原理是什么?

Redis 中 EMBSTR 对象的阈值设置为何为 44?其调整历史是什么?

Redis List 类型的常见操作命令有哪些?

java 复制代码
# 写入操作
LPUSH mylist a b c     # list 变成 [c, b, a]
RPUSH mylist d e       # list 变成 [c, b, a, d, e]

# 弹出操作
LPOP mylist            # 返回 c,list 变成 [b, a, d, e]
RPOP mylist            # 返回 e,list 变成 [b, a, d]

# 读取操作
LRANGE mylist 0 -1     # 返回 [b, a, d]
LINDEX mylist 1        # 返回 a
LLEN mylist            # 返回 3

# 修改操作
LSET mylist 0 x        # list 变成 [x, a, d]
LREM mylist 1 a        # 删掉第一个 a,list 变成 [x, d]
LTRIM mylist 0 0       # 只保留第一个元素,list 变成 [x]

如何在 Redis 中实现队列和栈数据结构?

java 复制代码
# 队列:先进先出
LPUSH myqueue "task1"
LPUSH myqueue "task2"
RPOP myqueue   # 弹出 "task1"

# 栈:后进先出
LPUSH mystack "item1"
LPUSH mystack "item2"
LPOP mystack   # 弹出 "item2"
java 复制代码
while(true) {
    // 最多等 5 秒,超时返回 null
    msg = redis.brpop("queue", 5);
    if (msg == null) {
        // 超时了,可以干点别的
        continue;
    }
    process(msg);
}
java 复制代码
ZADD priority_queue 1 "low_priority_task"
ZADD priority_queue 0 "high_priority_task"
ZPOPMIN priority_queue  # 弹出 "high_priority_task"

Redis 中的 Ziplist 和 Quicklist 数据结构的特点是什么?

Redis 复制延迟的常见原因有哪些?

Redis 事务与关系型数据库事务的主要区别是什么?

java 复制代码
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> SET user:1:name "zhangsan"
QUEUED
127.0.0.1:6379> SET user:1:age 25
QUEUED
127.0.0.1:6379> EXEC
1) OK
2) OK
java 复制代码
127.0.0.1:6379> WATCH balance
OK
127.0.0.1:6379> GET balance
"100"
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> DECRBY balance 50
QUEUED
127.0.0.1:6379> EXEC
# 如果 balance 在 WATCH 后被其他客户端修改了,这里返回 nil

Redis 的 ListPack 数据结构是什么?

相关推荐
执笔论英雄15 分钟前
【大模型推理】redis kv cache
数据库·redis·缓存
啦啦啦啦啦zzzz29 分钟前
c++web服务器框架Oat++的API应用
服务器·c++·oat++
IT_陈寒29 分钟前
Vue的这个响应式陷阱,让我加班到凌晨三点
前端·人工智能·后端
m0_7381207233 分钟前
AI安全实战系列(四):Lab04 Multi-Agent——多智能体攻击分析
服务器·开发语言·人工智能·安全·网络安全·语言模型
泰和英杰38 分钟前
2026 华为数字能源实操考点迭代:数据中心与光伏储能标准化故障排查方法论
运维·服务器·网络
心中有国也有家42 分钟前
AtomGit Flutter 鸿蒙客户端:MoodStorage 的 CRUD 集成验证
android·服务器·flutter·华为·harmonyos
Wang's Blog1 小时前
Go-Zero基础入门5: 探究go-zero如何基于gRPC扩展客户端
开发语言·后端·golang·go-zero
进击的荆棘1 小时前
Linux——基础指令(中)
linux·服务器·linux基础指令
zzz_23681 小时前
【Java实习面试算法冲刺】动态规划
java·算法·面试
小堂子这厢有礼了1 小时前
Chet.QuartzNet.UI v2.3.0 大更新!表格重构 + 系统配置 + 分析页全面升级!
前端·后端·ui·重构·c#·vue