Redis常用用法

1.简介

        Redis是一种开源的内存数据结构存储系统,它支持多种数据结构,包括字符串、哈希表、列表、集合和有序集合。Redis的设计目标是快速、高效地处理大量数据,因此它使用了许多优化技术,如基于内存的数据存储、异步I/O和多路复用等。Redis还提供了许多高级功能,如事务、发布/订阅、Lua脚本和持久化等。Redis的数据结构和原理是其高效性和可扩展性的关键。

2.持久化方式

       Redis有两种持久化方式:RDB和AOF。 RDB持久化方式是将Redis的数据集以快照的形式写入磁盘,它可以在指定的时间间隔内自动执行或手动执行。RDB文件是一个二进制文件,它包含了Redis数据集的所有数据,可以用于备份、恢复和迁移等操作。 AOF持久化方式是将Redis的写操作以日志的形式写入磁盘,它记录了所有对Redis数据集的写操作,包括添加、更新和删除等。AOF文件是一个文本文件,它可以用于恢复Redis数据集的状态。 这两种持久化方式可以结合使用,以提高数据的安全性和可靠性。

3.发布/订阅

        Redis的发布/订阅功能可以让客户端订阅一个或多个频道,当有消息发布到这些频道时,客户端就会收到相应的消息。发布/订阅功能可以用于实时通信、消息传递和事件驱动等场景。以下是Redis发布/订阅的使用步骤:

        1. 客户端使用SUBSCRIBE命令订阅一个或多个频道。

        2. 发布者使用PUBLISH命令向指定频道发布消息。

        3. Redis将消息发送给所有订阅了该频道的客户端。

         4. 客户端使用UNSUBSCRIBE命令取消订阅。

         除了基本的发布/订阅功能,Redis还提供了一些高级功能,如模式匹配和频道管理等。模式匹配可以让客户端订阅一类频道,而不是具体的频道名称,频道管理可以让客户端列出已订阅的频道和取消订阅指定频道。

4.缓存

import redis.clients.jedis.Jedis;

public class RedisCache {

    private static Jedis jedis;

    static {
        jedis = new Jedis("localhost", 6379);
    }

    public static void main(String[] args) {
        // 获取数据
        String data = getData("mykey");
        System.out.println(data);
    }

    public static String getData(String key) {
        // 检查Redis是否已经缓存了该数据
        String data = jedis.get(key);
        if (data != null) {
            System.out.println("Get data from Redis: " + data);
            return data;
        }
        // 从其他数据源获取数据
        data = fetchDataFromDatabase(key);
        // 将数据存储到Redis中,并设置过期时间
        jedis.setex(key, 3600, data);
        System.out.println("Get data from database: " + data);
        return data;
    }

    public static String fetchDataFromDatabase(String key) {
        // 从数据库获取数据
        return "data from database";
    }
}

 5.分布式锁

import redis.clients.jedis.Jedis;
public class RedisDistributedLock {
    private static final String LOCK_KEY = "mylock";
    private static final int LOCK_EXPIRE = 3000; // 锁的过期时间(毫秒)
    private static final int ACQUIRE_TIMEOUT = 1000; // 获取锁的超时时间(毫秒)
    private static final int SLEEP_INTERVAL = 100; // 获取锁时的休眠时间(毫秒)
    private static Jedis jedis;
    static {
        jedis = new Jedis("localhost", 6379);
    }
    public static void main(String[] args) {
        // 获取锁
        boolean lockResult = getLock();
        if (lockResult) {
            System.out.println("Get lock success");
            // 执行业务逻辑
            // ...
            // 释放锁
            releaseLock();
        } else {
            System.out.println("Get lock fail");
        }
    }
    public static boolean getLock() {
        long timeout = System.currentTimeMillis() + ACQUIRE_TIMEOUT;
        while (System.currentTimeMillis() < timeout) {
            // 尝试获取锁
            long result = jedis.setnx(LOCK_KEY, "1");
            if (result == 1) {
                // 获取锁成功,设置过期时间
                jedis.expire(LOCK_KEY, LOCK_EXPIRE);
                return true;
            }
            // 获取锁失败,休眠一段时间后重试
            try {
                Thread.sleep(SLEEP_INTERVAL);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        // 获取锁超时
        return false;
    }
    public static void releaseLock() {
        jedis.del(LOCK_KEY);
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员易晶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值