Redis缓存技术(第二课)

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Redis缓存技术(第二课)

理解Redis的持久性的两种方式,RDB,AOF.重点内容。

Redis本质是数据库。那么redis如何用java代码实现数据库的连接呢?

Redis缓存技术(第一课)_星辰镜的博客-CSDN博客

回顾上次课将的一些语句语法。

Redis的持久性的两种方式。

 

 

第一部分。让数据能存放的时间,更加持久。那么利用的是。Redis缓存的一个文件。redis.windows.conf

 

思考一个问题为什么要学Redis持久性?写看一个案例。


上面的图是Redis的服务器启动页面。

上面是一种数据类型。的存放和拿出数据的方式


思考一下问题,当我关闭了服务器,数据还在吗?


答案是不在。如果你用自己一天的数据存放的数据用上万个,突然断电。一切清零,你的心情如何?


Redis的持久性,的两种方式,RDB,AOF.重点内容。

 

 


接下来进入RDB与AOF学习。首先打开E:\Redis-x64-3.2.100,文件下的redis.windows.conf文件。

#
# Save the DB on disk:
#
#   save <seconds> <changes>
#
#   Will save the DB if both the given number of seconds and the given
#   number of write operations against the DB occurred.
#
#   In the example below the behaviour will be to save:
#   after 900 sec (15 min) if at least 1 key changed
#   after 300 sec (5 min) if at least 10 keys changed
#   after 60 sec if at least 10000 keys changed
#
#   Note: you can disable saving completely by commenting out all "save" lines.
#
#   It is also possible to remove all the previously configured save
#   points by adding a save directive with a single empty string argument
#   like in the following example:
#
#   save ""
save 900 1
save 300 10
save 10000 6

上面是RDB文件的学习过程。

接下来我用AOF来操作一遍。

# The name of the append only file (default: "appendonly.aof")
appendfilename "appendonly.aof"
# The fsync() call tells the Operating System to actually write data on disk
# instead of waiting for more data in the output buffer. Some OS will really flush
# data on disk, some other OS will just try to do it ASAP.
#
# Redis supports three different modes:
#
# no: don't fsync, just let the OS flush the data when it wants. Faster.
# always: fsync after every write to the append only log. Slow, Safest.
# everysec: fsync only one time every second. Compromise.
#
# The default is "everysec", as that's usually the right compromise between
# speed and data safety. It's up to you to understand if you can relax this to
# "no" that will let the operating system flush the output buffer when
# it wants, for better performances (but if you can live with the idea of
# some data loss consider the default persistence mode that's snapshotting),
# or on the contrary, use "always" that's very slow but a bit safer than
# everysec.
#
# More details please check the following article:
# http://antirez.com/post/redis-persistence-demystified.html
#
# If unsure, use "everysec".
# appendfsync always
appendfsync everysec
# appendfsync no

上面是AOF的详细信息。

主要是让你学会操作。

首先打开redis服务器,将你修改的文件信息,进行运行。

win+r 输入cmd 按下 enter

看操作。

Microsoft Windows [版本 10.0.19044.1348]
(c) Microsoft Corporation。保留所有权利。
C:\Users\MZFAITHDREAM> E:
E:\>cd E:\Redis-x64-3.2.100
E:\Redis-x64-3.2.100> redis-server.exe redis.windows.conf
[13268] 17 Dec 14:34:38.295 # Creating Server TCP listening socket 127.0.0.1:6379: bind: No error
E:\Redis-x64-3.2.100>redis-server.exe redis.windows.conf
                _._
           _.-``__ ''-._
      _.-``    `.  `_.  ''-._           Redis 3.2.100 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 14768
  `-._    `-._  `-./  _.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |           http://redis.io
  `-._    `-._`-.__.-'_.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-'
      `-._    `-.__.-'    _.-'
          `-._        _.-'
              `-.__.-'
[14768] 17 Dec 14:34:54.574 # Server started, Redis version 3.2.100
[14768] 17 Dec 14:34:54.575 * The server is now ready to accept connections on port 6379

观察上面的代码请看出你的问题。

进入用java语言获得redis中的数据。

导入架包开始实操

package com.redis.test;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.tomcat.jni.OS;
import org.junit.Test;
import redis.clients.jedis.Jedis;
/**
 * 五种数据的增删改查 String Hash Map List 
 * @author MZFAITHDREAM
 *
 */
public class RedisTest {}

1.String 类型

@Test
  public void test1() {
    /**
     * 操作redis数据库的增删改查String
     */
    Jedis jedis =new Jedis("localhost",6379);
     System.out.println("从redis数据库中获取名称"+jedis.get("name")); 
     System.out.println("从redis数据库中获取名称"+jedis.get("sex")); 
     System.out.println("从redis数据库中获取名称"+jedis.get("number")); 
    jedis.set("phone", "1234556");
    System.out.println("增加成功1");
    long q =jedis.del("name");
    if(q>0) {
      System.out.println("删除成功");
    }
    jedis.close();
  }

2.hash类型

@Test
    public void test2() {
      Jedis jedis =new Jedis("localhost",6379);
      String name=jedis.hget("student", "name");
      String age=jedis.hget("student", "age");
      String sex=jedis.hget("student", "sex");
      System.out.println(name+age+sex);
    long l= jedis.hset("student", "adress", "江西省");
    if(l>0) {
      System.out.println("删除成功");
    }
      //增加数据
    String adress=jedis.hget("student", "江西省"); 
    System.out.println(adress);
    jedis.hdel("student", "name");
    //查询数据
  Map<String ,String> map=  jedis.hgetAll("student");
  map.forEach((key,value)->System.out.println(key+"="+value));
  jedis.close();
    }

3.list类型

//list的集合
  @Test
  public void test3() {
    //操作list的集合
    Jedis jedis =new Jedis("localhost",6379);
    //从left增加数据
    jedis.lpush("mylist", "张三","李四","万物","hellow");
    jedis.rpush("Amylist", "B张三","C李四","D万物","Ehellow");
  List<String> olList =jedis.lrange("myslist", 0, -1);
  olList.forEach(s->System.out.println(s));
  String s=jedis.lpop("mylist");
    System.out.println("删除一条数据"+s);
    String s1=jedis.rpop("mylist");
    System.out.println("删除一条数据"+s1);
    jedis.close();
  }

4.set类型

//Set集合
  @Test
  public void test4() {
    Jedis jedis =new Jedis("localhost",6379);
  long l= jedis.sadd("myset","256","3373","373");
  if(l>0) {
    System.out.println("增加成功");
  }else {
    System.out.println("元素不能重复");
  }
    Set<String> oSet =jedis.smembers("myset");
    oSet.forEach(x->System.out.println(x));
    jedis.close();
  }

5.sortedset类型

/**
   * mysoet 
   */
  @Test
  public void test5() {
    Jedis jedis =new Jedis("localhost",6379);
    jedis.zadd("mysort", 34,"王五");
    jedis.zadd("mysort", 56, "小康");
    jedis.zadd("mysort", 14,"四小五");
    jedis.zadd("mysort", 66, "小二康");
  Set <String>oSet =jedis.zrange("mysort", 0,-1);
  oSet.forEach(s->System.out.println(s));
  jedis.close();
  jedis.zrem("mysort", "小二康");

五种数据的案例运行结果

 

                   

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2天前
|
缓存 NoSQL 中间件
Redis,分布式缓存演化之路
本文介绍了基于Redis的分布式缓存演化,探讨了分布式锁和缓存一致性问题及其解决方案。首先分析了本地缓存和分布式缓存的区别与优劣,接着深入讲解了分布式远程缓存带来的并发、缓存失效(穿透、雪崩、击穿)等问题及应对策略。文章还详细描述了如何使用Redis实现分布式锁,确保高并发场景下的数据一致性和系统稳定性。最后,通过双写模式和失效模式讨论了缓存一致性问题,并提出了多种解决方案,如引入Canal中间件等。希望这些内容能为读者在设计分布式缓存系统时提供有价值的参考。感谢您的阅读!
Redis,分布式缓存演化之路
|
2月前
|
存储 缓存 NoSQL
解决Redis缓存数据类型丢失问题
解决Redis缓存数据类型丢失问题
184 85
|
26天前
|
存储 缓存 NoSQL
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
|
26天前
|
缓存 NoSQL 关系型数据库
云端问道21期实操教学-应对高并发,利用云数据库 Tair(兼容 Redis®)缓存实现极速响应
本文介绍了如何通过云端问道21期实操教学,利用云数据库 Tair(兼容 Redis®)缓存实现高并发场景下的极速响应。主要内容分为四部分:方案概览、部署准备、一键部署和完成及清理。方案概览中,展示了如何使用 Redis 提升业务性能,降低响应时间;部署准备介绍了账号注册与充值步骤;一键部署详细讲解了创建 ECS、RDS 和 Redis 实例的过程;最后,通过对比测试验证了 Redis 缓存的有效性,并指导用户清理资源以避免额外费用。
|
2月前
|
数据采集 存储 缓存
如何使用缓存技术提升Python爬虫效率
如何使用缓存技术提升Python爬虫效率
|
2月前
|
缓存 监控 NoSQL
Redis经典问题:缓存穿透
本文详细探讨了分布式系统和缓存应用中的经典问题——缓存穿透。缓存穿透是指用户请求的数据在缓存和数据库中都不存在,导致大量请求直接落到数据库上,可能引发数据库崩溃或性能下降。文章介绍了几种有效的解决方案,包括接口层增加校验、缓存空值、使用布隆过滤器、优化数据库查询以及加强监控报警机制。通过这些方法,可以有效缓解缓存穿透对系统的影响,提升系统的稳定性和性能。
|
2月前
|
存储 缓存 负载均衡
从零到一:分布式缓存技术初探
分布式缓存通过将数据存储在多个节点上,利用负载均衡算法提高访问速度、降低数据库负载并增强系统可用性。常见产品有Redis、Memcached等。其优势包括性能扩展、高可用性、负载均衡和容错性,适用于页面缓存、应用对象缓存、状态缓存、并行处理、事件处理及极限事务处理等多种场景。
139 1
|
3月前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
65 5
|
4月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
98 6
|
3月前
|
缓存 NoSQL 关系型数据库
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
本文详解缓存雪崩、缓存穿透、缓存并发及缓存预热等问题,提供高可用解决方案,帮助你在大厂面试和实际工作中应对这些常见并发场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题