Redis是怎么对缓存下手的(下)

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis是怎么对缓存下手的

2. AOF


AOF是一种日志风格的持久化方式,它记录每个写命令在数据库中的操作。当Redis重启时,它会重新执行这些写命令,以恢复之前的状态。

import redis.clients.jedis.Jedis;
public class RedisAOFExample {
    public static void main(String[] args) {
        //连接到本地的Redis服务
        Jedis jedis = new Jedis("localhost");
        //开启AOF持久化
        jedis.configSet("appendonly", "yes");
        //设置redis字符串数据
        jedis.set("key1", "value1");
        jedis.set("key2", "value2");
        //手动触发AOF持久化操作
        jedis.bgrewriteaof();
        //关闭连接
        jedis.close();
    }
}


在上面的示例中,我们使用了Jedis客户端来连接到Redis服务器,并将一些字符串类型的数据存储在Redis中。然后,我们开启了AOF持久化,并手动触发了AOF持久化操作,将写命令记录在日志文件中。


总之,Redis支持两种持久化机制,RDB和AOF。开发人员可以根据实际需求选择最适合的持久化方式。同时,Redis提供了相应的操作命令和工具,使持久化操作变得更加方便和简单。


发布/订阅


Redis支持发布/订阅模式,其中客户端可以订阅一个或多个频道,以接收其他客户端发布到该频道的消息。这种模式非常适用于实时数据处理和消息传递应用程序。

Redis支持发布/订阅模式,其中客户端可以订阅一个或多个频道,以接收其他客户端发布到该频道的消息。这种模式非常适用于实时数据处理和消息传递应用程序。以下是这种模式的概念和Java代码示例:


1. 发布者


发布者向指定的频道发布一条消息。如果有其他客户端正在订阅该频道,则它们将收到该消息。

import redis.clients.jedis.Jedis;
public class RedisPublisherExample {
    public static void main(String[] args) {
        //连接到本地的Redis服务
        Jedis jedis = new Jedis("localhost");
        //发布一条消息到指定频道
        jedis.publish("channel1", "Hello, Redis!");
        //关闭连接
        jedis.close();
    }
}


在上面的示例中,我们使用了Jedis客户端来连接到Redis服务器,并向名为“channel1”的频道发布了一条消息。


2. 订阅者


订阅者可以订阅一个或多个频道,并在有消息发布到这些频道时接收到通知。

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;
public class RedisSubscriberExample {
    public static void main(String[] args) {
        //连接到本地的Redis服务
        Jedis jedis = new Jedis("localhost");
        //创建一个JedisPubSub对象
        JedisPubSub jedisPubSub = new JedisPubSub() {
            @Override
            public void onMessage(String channel, String message) {
                System.out.println("接收到一条消息:频道:" + channel + ",内容:" + message);
            }
        };
        //订阅一个频道
        jedis.subscribe(jedisPubSub, "channel1");
        //关闭连接
        jedis.close();
    }
}


在上面的示例中,我们使用了Jedis客户端来连接到Redis服务器,并创建了一个JedisPubSub对象。然后,我们向名为“channel1”的频道进行订阅,并在有消息发布到该频道时打印出接收到的消息。


总之,Redis支持发布/订阅模式,这使得它非常适用于实时数据处理和消息传递应用程序。开发人员可以根据实际需求选择最适合的方式来发布和订阅消息。同时,Redis提供了相应的操作命令和工具,使发布/订阅操作变得更加方便和简单。


事务支持


Redis支持原子性操作,可以将多个命令打包成一个事务,在执行时保证所有命令都成功或全部失败。这种支持非常适用于需要进行多个操作的复杂应用程序。

Redis支持原子性操作,可以将多个命令打包成一个事务,同时在执行时保证所有命令都成功或全部失败。这种支持非常适用于需要进行多个操作的复杂应用程序。以下是这种支持的概念和Java代码示例:


1. 事务概念


Redis事务是一系列命令的集合,可以像单个命令一样执行。在执行期间,所有其他客户端请求都被暂停,直到该事务完成。


2. 事务操作


Redis事务操作分为以下步骤:


  • 开启一个事务,使用multi()方法。
  • 执行一系列命令,如字符串、哈希、列表等类型的数据操作。
  • 提交事务并执行所有操作,使用exec()方法。
  • 可以通过discard()方法取消事务,并撤销所有未提交的操作。
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;
public class RedisTransactionExample {
    public static void main(String[] args) {
        //连接到本地的Redis服务
        Jedis jedis = new Jedis("localhost");
        //开启一个事务
        Transaction transaction = jedis.multi();
        //执行多个命令
        transaction.set("key1", "value1");
        transaction.hset("hash1", "field1", "value1");
        transaction.lpush("list1", "item1");
        transaction.sadd("set1", "value1");
        //提交事务
        transaction.exec();
        //关闭连接
        jedis.close();
    }
}


在上面的示例中,我们使用了Jedis客户端来连接到Redis服务器,并创建了一个事务对象。然后,我们将多个操作命令添加到该事务对象中,并通过执行exec()方法提交事务。


3. 事务回滚


在某些情况下,需要撤销所有未提交的操作。这可以通过调用discard()方法来实现。例如,在下面的示例中,如果哈希类型的数据“hash1”已经存在,则撤销所有未提交的操作,并打印出一条消息。

import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;
public class RedisTransactionRollbackExample {
    public static void main(String[] args) {
        //连接到本地的Redis服务
        Jedis jedis = new Jedis("localhost");
        //开启一个事务
        Transaction transaction = jedis.multi();
        //执行多个命令
        transaction.set("key1", "value1");
        transaction.hset("hash1", "field1", "value1");
        transaction.lpush("list1", "item1");
        transaction.sadd("set1", "value1");
        //检查哈希类型的数据是否已经存在
        if (jedis.exists("hash1")) {
            System.out.println("撤销所有未提交的操作");
            transaction.discard();
        } else {
            //提交事务
            transaction.exec();
        }
        //关闭连接
        jedis.close();
    }
}


总之,Redis支持原子性操作,可以将多个命令打包成一个事务,在执行时保证所有命令都成功或全部失败。这种支持非常适用于需要进行多个操作的复杂应用程序。开发人员可以根据实际需求选择最适合的方式来执行事务操作。同时,Redis提供了相应的操作命令和工具,使事务操作变得更加方便和简单。


集群


Redis可以使用分片技术来扩展到多台服务器,从而提高可伸缩性和容错性。

Redis可以使用分片技术来扩展到多台服务器,从而提高可伸缩性和容错性。以下是这种支持的概念和Java代码示例:


1. 集群概念


Redis集群是由多个Redis实例组成的一组节点,可以通过分片技术来水平扩展,从而提供更大的存储容量和更好的性能和容错性。在Redis集群中,每个节点负责存储一部分数据,并与其他节点协作进行故障检测和故障转移。


2. 集群配置


为了创建一个Redis集群,需要做以下几个步骤:


  • 安装并启动多个Redis实例。
  • 使用redis-trib.rb工具将这些实例配置成集群。
  • 将数据分配给不同的节点。
//创建一个Redis集群连接池
JedisPoolConfig poolConfig = new JedisPoolConfig();
JedisCluster jedisCluster = new JedisCluster(new HostAndPort("localhost", 6379), poolConfig);
//执行Redis命令
jedisCluster.set("key1", "value1");
String value = jedisCluster.get("key1");
//关闭连接
jedisCluster.close();


在上面的示例中,我们使用了Jedis客户端来连接到Redis集群,并将键值对数据存储在集群中。我们可以通过调用set()方法来存储数据,通过调用get()方法来获取数据。


总之,Redis可以使用分片技术来扩展到多台服务器,从而提高可伸缩性和容错性。开发人员可以根据实际需求选择最适合的集群配置方式。同时,Redis提供了相应的操作命令和工具,使集群管理变得更加方便和简单。


Lua脚本


Redis支持运行Lua脚本,可以在客户端执行自定义操作,从而提高灵活性和可扩展性。

Redis支持运行Lua脚本,可以在客户端执行自定义操作,从而提高灵活性和可扩展性。以下是这种支持的概念和Java代码示例:


1. Lua脚本概念


Lua是一种轻量级的脚本语言,在Redis中可以使用它来编写自定义操作。Redis通过内置的Lua解释器来执行这些脚本,并提供了相应的API来访问Redis数据。


2. Lua脚本操作


为了执行一个Lua脚本,需要做以下几个步骤:


  • 使用Jedis客户端连接到Redis服务器。
  • 编写Lua脚本。
  • 调用eval()方法来执行该脚本。
//连接到本地的Redis服务
Jedis jedis = new Jedis("localhost");
//编写Lua脚本
String script = "return redis.call('get', KEYS[1])";
//调用eval()方法执行脚本
String value = (String) jedis.eval(script, 1, "key1");
//关闭连接
jedis.close();


在上面的示例中,我们使用了Jedis客户端来连接到Redis服务器,并编写了一个Lua脚本来获取名为“key1”的键的值。然后,我们通过调用eval()方法来执行该脚本,并将结果存储在变量“value”中。


3. Lua脚本参数


除了键名称之外,Lua脚本还可以接受其他参数。这些参数可以通过调用eval()方法时传递给脚本。

//连接到本地的Redis服务
Jedis jedis = new Jedis("localhost");
//编写Lua脚本
String script = "return tonumber(ARGV[1]) + tonumber(ARGV[2])";
//调用eval()方法执行脚本
Long sum = (Long) jedis.eval(script, 2, "0", "1");
//关闭连接
jedis.close();


在上面的示例中,我们使用了Jedis客户端来连接到Redis服务器,并编写了一个Lua脚本来计算两个数字的和。然后,我们通过调用eval()方法并将参数“0”和“1”传递给该脚本来执行它。


总之,Redis支持运行Lua脚本,这使得开发人员能够通过编写自定义操作来提高灵活性和可扩展性。开发人员可以根据实际需求选择最适合的方式来编写和执行Lua脚本。同时,Redis提供了相应的API和工具,使Lua脚本编写和执行变得更加方便和简单。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1天前
|
存储 缓存 NoSQL
【赵渝强老师】基于Redis的旁路缓存架构
本文介绍了引入缓存后的系统架构,通过缓存可以提升访问性能、降低网络拥堵、减轻服务负载和增强可扩展性。文中提供了相关图片和视频讲解,并讨论了数据库读写分离、分库分表等方法来减轻数据库压力。同时,文章也指出了缓存可能带来的复杂度增加、成本提高和数据一致性问题。
【赵渝强老师】基于Redis的旁路缓存架构
|
9天前
|
缓存 NoSQL Redis
Redis 缓存使用的实践
《Redis缓存最佳实践指南》涵盖缓存更新策略、缓存击穿防护、大key处理和性能优化。包括Cache Aside Pattern、Write Through、分布式锁、大key拆分和批量操作等技术,帮助你在项目中高效使用Redis缓存。
66 22
|
8天前
|
缓存 NoSQL 中间件
redis高并发缓存中间件总结!
本文档详细介绍了高并发缓存中间件Redis的原理、高级操作及其在电商架构中的应用。通过阿里云的角度,分析了Redis与架构的关系,并展示了无Redis和使用Redis缓存的架构图。文档还涵盖了Redis的基本特性、应用场景、安装部署步骤、配置文件详解、启动和关闭方法、systemctl管理脚本的生成以及日志警告处理等内容。适合初学者和有一定经验的技术人员参考学习。
67 7
|
12天前
|
存储 缓存 监控
利用 Redis 缓存特性避免缓存穿透的策略与方法
【10月更文挑战第23天】通过以上对利用 Redis 缓存特性避免缓存穿透的详细阐述,我们对这一策略有了更深入的理解。在实际应用中,我们需要根据具体情况灵活运用这些方法,并结合其他技术手段,共同保障系统的稳定和高效运行。同时,要不断关注 Redis 缓存特性的发展和变化,及时调整策略,以应对不断出现的新挑战。
44 10
|
存储 缓存 NoSQL
Spring Boot2.5 实战 MongoDB 与高并发 Redis 缓存|学习笔记
快速学习 Spring Boot2.5 实战 MongoDB 与高并发 Redis 缓存
Spring Boot2.5 实战 MongoDB 与高并发 Redis 缓存|学习笔记
|
缓存 NoSQL 安全
6.0Spring Boot 2.0实战 Redis 分布式缓存6.0|学习笔记
快速学习6.0Spring Boot 2.0实战 Redis 分布式缓存6.0。
325 0
6.0Spring Boot 2.0实战 Redis 分布式缓存6.0|学习笔记
|
缓存 NoSQL Redis
首页数据显示-添加 redis 缓存(3)| 学习笔记
快速学习 首页数据显示-添加 redis 缓存(3)
150 0
首页数据显示-添加 redis 缓存(3)| 学习笔记
|
缓存 NoSQL Java
首页数据显示-添加 redis 缓存(1) | 学习笔记
快速学习 首页数据显示-添加 redis 缓存(1)
234 0
首页数据显示-添加 redis 缓存(1) | 学习笔记
|
存储 缓存 NoSQL
Redis 缓存|学习笔记
快速学习Redis 缓存
106 0
|
1月前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(一)
数据的存储--Redis缓存存储(一)
下一篇
无影云桌面