Redis 构建缓存服务器

一、Redis 简介

        Redis(Remote Dictionary Server)是一个开源的内存数据结构存储系统,也被称为数据结构服务器。它支持多种数据结构,如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等,并提供了丰富的操作命令来处理这些数据结构。

Redis

Redis 特点/优势 :

  1. 高性能:Redis是一个基于内存的数据存储系统,因此具有极快的读写速度。它能够每秒处理数十万次的读写操作,使其成为许多高性能应用程序的理想选择。
  2.  数据结构丰富:Redis支持多种数据结构,如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等。这使得Redis非常灵活,能够适应各种不同的应用需求。
  3. 数据持久化:Redis支持数据的持久化,可以将数据保存到磁盘上,以便在重启后恢复数据。它提供了两种持久化方式:快照(snapshotting)和日志(append-only file)。
  4. 高可用性:Redis支持主从复制(master-slave replication)和Redis Cluster,以提供高可用性和容错性。主从复制可以实现数据的热备份,而Redis Cluster可以将数据分布在多个节点上,提供更高的容量和可用性。
  5. 发布/订阅模式:Redis支持发布/订阅模式,允许多个客户端订阅特定的频道,并接收发布到该频道的消息。这对于实时通信和事件驱动的应用程序非常有用。
  6. 事务支持:Redis支持事务,可以将多个操作打包成一个原子操作,保证这些操作要么全部执行成功,要么全部失败。这确保了数据的一致性和完整性。
  7. 轻量级:Redis是一个轻量级的存储系统,具有较小的内存占用和快速的启动时间。这使得它非常适合于云环境和容器化部署。

Redis 为什么很快 

  • 内存存储:Redis将数据存储在内存中,而不是像传统的磁盘存储数据库那样将数据写入到硬盘上。由于内存的读写速度远远快于磁盘,因此Redis能够实现极快的读写性能。

  • 单线程模型:Redis采用单线程模型,每个Redis实例都由单个主线程来处理所有的客户端请求。虽然单线程看起来似乎会限制其性能,但这实际上是Redis的一大优势。单线程模型消除了多线程之间的竞争和锁等开销,使得Redis能够充分利用CPU资源,并且避免了多线程带来的复杂性。此外,Redis在内部使用了I/O多路复用技术(例如epoll或kqueue)来处理并发请求,使得单线程能够同时处理多个客户端连接。

  • 非阻塞IO:Redis使用了非阻塞IO,也就是在读写操作时不会阻塞其他操作。在读取数据时,如果内存中没有所需的数据,Redis会立即返回一个空结果,而不会等待数据从磁盘加载进来。这样即使在高并发情况下,Redis也能够快速地响应请求。

  • 高效的数据结构:Redis支持多种高效的数据结构,比如字符串、哈希、列表、集合、有序集合等。这些数据结构的设计和实现都非常高效,能够在常量时间内完成查找、插入、删除等操作,保证了Redis的高速性能。

  • 异步操作:Redis支持异步操作,比如异步持久化和异步复制。异步操作能够让Redis在进行磁盘持久化和主从复制时不会阻塞其他操作,提高了整体的性能。

  • 优化的网络协议:Redis使用RESP(Redis Serialization Protocol)作为网络协议,RESP是一种简单、高效的二进制协议。RESP协议的设计使得网络传输的数据量尽可能地减少,减少了网络传输的开销,提高了性能。

  • 原子性操作:Redis支持很多原子性操作,比如INCR、DECR、SETNX等。原子性操作能够在一条命令中完成多个操作,而且这些操作是不可中断的,保证了数据的一致性

二、Redis持久化

Redis 持久化策略有两种:

  • RDB:快照形式是直接把内存中的数据保存到一个 dump 的文件中,定时保存,保存策略。

  • AOF:把所有的对 Redis 的服务器进行修改的命令都存到一个文件里,命令的集合。Redis 默认是快照 RDB 的持久化方式。

如果非常关心你的数据,但仍然可以承受数分钟内的数据丢失,那么可以额只使用 RDB 持久。

AOF 将 Redis 执行的每一条命令追加到磁盘中,处理巨大的写入会降低Redis的性能,不知道你是否可以接受。

数据库备份和灾难恢复:定时生成 RDB 快照非常便于进行数据库备份,并且 RDB 恢复数据集的速度也要比 AOF 恢复的速度快。

当然了,Redis 支持同时开启 RDB 和 AOF,系统重启后,Redis 会优先使用 AOF 来恢复数据,这样丢失的数据会最少。

 三、Redis 安装部署

下载链接:http://download.redis.io/releases/redis-7.0.9.tar.gz

[root@redis ~]# wget http://download.redis.io/releases/redis-7.0.9.tar.gz

[root@redis ~]# tar xzf redis-7.0.9.tar.gz -C /opt

[root@redis ~]# cd /opt

[root@redis opt]# mv redis-7.0.9/ redis 

[root@redis opt]# cd redis

[root@redis redis]# yum install -y gcc make                                                     #安装编译工具

[root@redis redis]# make install

[root@redis redis]# vim redis.conf

bind 0.0.0.0
daemonize yes
logfile "/var/log/redis.log"

[root@redis redis]# redis-server redis.conf

四、配置redis为systemctl启动

[root@redis redis]# cd /usr/lib/systemd/system

[root@redis system]# vim redis.service

[Unit]
Description=Redis
After=network.target

[Service]
ExecStart=/opt/redis/src/redis-server /opt/redis/redis.conf  --daemonize no
ExecStop=/opt/redis/src/redis-cli -h 127.0.0.1 -p 6379 shutdown

[Install]
WantedBy=multi-user.target


• [Unit] 表示这是基础信息 
• Description 是描述
• After 是在那个服务后面启动,一般是网络服务启动后启动

• [Service] 表示这里是服务信息 
• ExecStart 是启动服务的命令
• ExecStop 是停止服务的指令

• [Install] 表示这是是安装相关信息 
• WantedBy 是以哪种方式启动:multi-user.target表明当系统以多用户方式(默认的运行级别)启动时,这个服务需要被自动运行。

 启动服务:
[root@redis system]# systemctl daemon-reload
[root@redis system]# systemctl start redis.service

登陆redis
[root@redis system]# cd /opt/redis/src/
[root@redis src]# ./redis-cli -h 192.168.246.202 -p 6379
192.168.246.202:6379> ping     ---测试redis是否可以用
PONG
192.168.246.202:6379> set name max    #设置key--name,并设置值
OK
192.168.246.202:6379> get name    #获取到key
"max"
192.168.246.202:6379>
单机版redis已经部署完成。将ip和端口发给开发就可以了。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在Java中使用Redis定期清理缓存数据,可以通过以下步骤实现: 1. 首先,需要在Java项目中引入Redis的Java客户端库,比如jedis。 2. 在项目中创建一个定时任务,可以使用Spring的@Scheduled注解来实现。 3. 在定时任务中,通过jedis客户端库连接Redis,然后使用Redis的命令来删除过期的缓存数据。 4. 可以使用Redis的过期时间机制来自动清理过期的缓存数据。在缓存数据存入Redis时,可以设置过期时间。 以下是Java代码示例: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import redis.clients.jedis.Jedis; @Component public class CacheCleanupTask { @Autowired private Jedis jedis; @Scheduled(fixedRate = 60000) // 每60秒执行一次 public void cleanupCache() { // 使用Redis的命令来删除过期的缓存数据 jedis.zremrangeByScore("myCache", 0, System.currentTimeMillis()); } } ``` 在上述代码中,使用了Spring的@Scheduled注解来表示该方法是一个定时任务。该方法会每60秒执行一次,使用jedis客户端库连接Redis,然后使用Redis的zremrangeByScore命令来删除过期的缓存数据。这里使用了Redis的有序集合来存储缓存数据,其中缓存数据的过期时间作为分值,可以使用zremrangeByScore命令来删除过期的缓存数据。 ### 回答2: 在Java中,可以使用Redis提供的过期策略来定期清理缓存数据。Redis通过使用过期时间(expiry time)来自动清理过期的缓存数据。 首先,需要确保在Java应用程序中配置好Redis的依赖。可以通过Maven或其他构建工具将Redis的Java客户端添加到项目中。 接下来,通过Java代码使用Redis相关的API来设置缓存数据的过期时间。可以使用Jedis或Lettuce等Java Redis客户端库来实现。例如,使用Jedis客户端可以通过以下方式设置缓存数据的过期时间: ```java Jedis jedis = new Jedis("localhost", 6379); // 创建Jedis客户端连接 jedis.set("key", "value"); // 设置缓存数据 jedis.expire("key", 3600); // 设置缓存数据的过期时间为3600秒,1小时 ``` 以上代码中,`expire`方法用于设置缓存数据的过期时间。在这个例子里,缓存数据的过期时间被设置为3600秒,即1小时。当缓存数据的过期时间到达时,Redis会自动清理该缓存数据,以释放内存空间。 为了定期清理过期的缓存数据,可以使用Redis的`EXPIRE`命令结合Redis的过期策略进行操作。可以在代码中添加一个定时任务,每隔一段时间执行以下操作: ```java Jedis jedis = new Jedis("localhost", 6379); // 创建Jedis客户端连接 Set<String> keys = jedis.keys("*"); // 获取所有缓存数据的key for (String key : keys) { jedis.expire(key, 0); // 通过设置过期时间为0秒触发缓存数据的自动清理 } ``` 以上代码中,通过`keys("*")`方法获取到所有缓存数据的key,然后通过`expire`方法将每个缓存数据的过期时间设置为0秒。这会立即触发Redis的过期策略,导致过期的缓存数据被清理。 通过以上方式,可以使用Java与Redis配合定期清理缓存数据。你可以根据具体的业务场景和需求来设置合适的过期时间和定时任务执行频率。 ### 回答3: 在Java中使用Redis定期清理缓存数据,可以通过以下步骤进行操作: 1. 首先,需要在Java应用程序中引入Redis的相关依赖包。可以使用Maven或Gradle等构建工具来管理依赖关系。 2. 在Java代码中,使用Jedis或Lettuce等Redis客户端库连接到Redis服务器。 3. 创建一个定时任务,使用Java的定时任务框架,如Quartz或Spring的任务调度器,来定期执行缓存清理操作。 4. 在定时任务中,使用Redis的KEYS命令或SCAN命令获取所有缓存键。可以通过设置特定的缓存键前缀来区分不同类型的缓存数据。 5. 遍历所有缓存键,并使用DEL命令删除过期的缓存数据。可以使用TTL命令获取键的剩余生存时间,并根据需求来判断是否过期。 6. 可以根据需要,设置定时任务的执行频率,如每小时、每天或每周执行一次。 7. 定期清理缓存数据的时间间隔可以根据业务需求和缓存数据的生命周期来设定。较长的时间间隔可以降低对Redis服务器的压力,但可能会导致缓存数据存留时间较长,而较短的时间间隔可能会增加对服务器的负载。 需要注意的是,由于Redis的单线程特性,定期清理大量缓存数据可能会影响Redis服务器的性能。因此,可以考虑使用分布式缓存或搭建Redis集群来提高性能和可靠性。同时,在进行定期清理操作时,应尽量减少对Redis服务器的访问频率,以免对其他正常业务操作造成影响。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值