Redis(1)Redis是什么?

Redis(Remote Dictionary Server)是一种开源的、基于内存的数据结构存储系统,广泛用于数据库、缓存和消息中间件。它支持多种数据结构,如字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)。由于其基于内存的特性,Redis能够提供极高的读写性能,同时也支持持久化。

主要特性

  • 多种数据结构:支持字符串、哈希、列表、集合、有序集合、位图、HyperLogLog、地理空间索引等多种数据类型。
  • 高性能:由于数据存储在内存中,Redis的读写性能非常高,能够达到每秒数百万次请求的处理能力。
  • 持久化:支持将数据持久化到磁盘,提供RDB(快照)和AOF(Append-Only File)两种持久化方式。
  • 复制和高可用:支持主从复制、哨兵(Sentinel)模式和集群(Cluster)模式,提供高可用性和自动故障转移功能。
  • 事务支持:支持简单的事务,通过MULTI、EXEC、WATCH等命令实现。
  • Lua脚本:支持通过Lua脚本进行复杂操作,保证脚本执行的原子性。

使用Java连接和操作Redis

以下是使用Java连接和操作Redis的示例。我们将使用Jedis库,这是一个常用的Java Redis客户端。

添加依赖

首先,确保在你的项目中添加了Jedis依赖。对于Maven项目,可以在pom.xml中添加以下依赖:

xml 复制代码
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.6.3</version>
</dependency>

连接Redis

以下是如何使用Jedis连接到Redis服务器并进行基本操作的示例:

java 复制代码
import redis.clients.jedis.Jedis;

public class RedisExample {

    public static void main(String[] args) {
        // 连接到本地的Redis服务器
        Jedis jedis = new Jedis("localhost", 6379);

        // 测试连接
        System.out.println("连接成功");
        System.out.println("服务正在运行: " + jedis.ping());
        
        // 字符串操作
        jedis.set("name", "Alice");
        String name = jedis.get("name");
        System.out.println("name: " + name);  // 输出: Alice

        // 哈希操作
        jedis.hset("user:1001", "username", "johndoe");
        jedis.hset("user:1001", "email", "johndoe@example.com");
        String username = jedis.hget("user:1001", "username");
        System.out.println("username: " + username);  // 输出: johndoe

        // 列表操作
        jedis.lpush("tasks", "task1");
        jedis.lpush("tasks", "task2");
        String task = jedis.rpop("tasks");
        System.out.println("task: " + task);  // 输出: task1

        // 集合操作
        jedis.sadd("tags", "python");
        jedis.sadd("tags", "redis");
        System.out.println("tags: " + jedis.smembers("tags"));  // 输出: [python, redis]

        // 有序集合操作
        jedis.zadd("leaderboard", 100, "user1");
        jedis.zadd("leaderboard", 200, "user2");
        System.out.println("leaderboard: " + jedis.zrange("leaderboard", 0, -1));  // 输出: [user1, user2]

        // 发布/订阅机制
        new Thread(() -> {
            Jedis subscriberJedis = new Jedis("localhost", 6379);
            subscriberJedis.subscribe((channel, message) -> {
                System.out.println("Received message: " + message);
            }, "channel");
        }).start();

        try {
            Thread.sleep(1000);  // 等待订阅者启动
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        jedis.publish("channel", "Hello, Redis!");

        // 关闭连接
        jedis.close();
    }
}

基本操作解析

  1. 连接到Redis:

    java 复制代码
    Jedis jedis = new Jedis("localhost", 6379);
  2. 字符串操作:

    java 复制代码
    jedis.set("name", "Alice");
    String name = jedis.get("name");
  3. 哈希操作:

    java 复制代码
    jedis.hset("user:1001", "username", "johndoe");
    jedis.hset("user:1001", "email", "johndoe@example.com");
    String username = jedis.hget("user:1001", "username");
  4. 列表操作:

    java 复制代码
    jedis.lpush("tasks", "task1");
    jedis.lpush("tasks", "task2");
    String task = jedis.rpop("tasks");
  5. 集合操作:

    java 复制代码
    jedis.sadd("tags", "python");
    jedis.sadd("tags", "redis");
  6. 有序集合操作:

    java 复制代码
    jedis.zadd("leaderboard", 100, "user1");
    jedis.zadd("leaderboard", 200, "user2");
  7. 发布/订阅机制:

    java 复制代码
    new Thread(() -> {
        Jedis subscriberJedis = new Jedis("localhost", 6379);
        subscriberJedis.subscribe((channel, message) -> {
            System.out.println("Received message: " + message);
        }, "channel");
    }).start();
    
    jedis.publish("channel", "Hello, Redis!");

持久化配置

Redis支持两种持久化方式:RDB和AOF。以下是配置示例。

RDB快照

在redis.conf中配置RDB快照:

conf 复制代码
# 保存快照的规则:每隔900秒如果至少有1个键发生变化,则生成快照
save 900 1
# 快照文件的名称
dbfilename dump.rdb
AOF持久化

在redis.conf中配置AOF:

conf 复制代码
# 启用AOF持久化
appendonly yes
# AOF文件的名称
appendfilename "appendonly.aof"
# AOF文件的同步策略
appendfsync everysec

总结

Redis是一种功能强大且高性能的内存数据库,适用于多种使用场景,如缓存、会话存储、实时统计、消息队列等。通过丰富的数据结构和灵活的持久化配置,Redis能够满足不同应用的需求。通过Java代码示例,我们可以直观地看到如何在Java应用程序中连接和操作Redis。

相关推荐
打工仔折腾 AI1 小时前
LLaMA 1 到 LLaMA 3 架构演进拆解:从 RoPE、GQA 到词表扩张
人工智能·后端·python·深度学习·langchain·llama
可乐鸡翅yeah_1 小时前
HLS 分片过期清理,直播旧 TS 分片磁盘爆满问题处理
java·后端·spring·m3u8·m3u8在线·音视频在线播放
张彦峰ZYF2 小时前
加了锁不等于扛得住争用:synchronized、显式锁与 CAS 的语义分层、争用代价账本与选型判据
后端·同步设施·内置锁的四种状态与单向升级·可重入的由来与四条硬边界·显式锁的状态字段与等待队列·读写锁与邮戳锁·一次同步的开销账本
专业程序开发源2 小时前
SSM校园拍摄交流服务平台36936-计算机课程设计、毕业设计
java·spring boot·后端·python·elasticsearch·php·课程设计
Gopher_HBo2 小时前
zap采样器与性能优化内幕
后端
变量探索SEQVEC2 小时前
我埋了 8 个假文件,看谁会上钩:12 天 502 次扫描实录
后端
llqbzllll2 小时前
HashMap 的核心结构:从一次 put 看到扩容、桶迁移与树化边界
后端
晚安code2 小时前
设计模式入门:吃透 SOLID 原则与迪米特法则,再学 5 个高频模式
后端·设计模式
专业程序开发源5 小时前
django新闻推荐系统70655-计算机课程设计、毕业设计
java·javascript·spring boot·后端·python·django·课程设计
打工仔折腾 AI5 小时前
把 AI Agent 托管到家里电脑:UU远程端口映射与CLI实测记录
人工智能·后端·python·langchain·电脑·ai agent 实战