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
相关文章
|
6天前
|
缓存 NoSQL 关系型数据库
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
本文详解缓存雪崩、缓存穿透、缓存并发及缓存预热等问题,提供高可用解决方案,帮助你在大厂面试和实际工作中应对这些常见并发场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
|
8天前
|
存储 缓存 NoSQL
【赵渝强老师】基于Redis的旁路缓存架构
本文介绍了引入缓存后的系统架构,通过缓存可以提升访问性能、降低网络拥堵、减轻服务负载和增强可扩展性。文中提供了相关图片和视频讲解,并讨论了数据库读写分离、分库分表等方法来减轻数据库压力。同时,文章也指出了缓存可能带来的复杂度增加、成本提高和数据一致性问题。
【赵渝强老师】基于Redis的旁路缓存架构
|
16天前
|
缓存 NoSQL Redis
Redis 缓存使用的实践
《Redis缓存最佳实践指南》涵盖缓存更新策略、缓存击穿防护、大key处理和性能优化。包括Cache Aside Pattern、Write Through、分布式锁、大key拆分和批量操作等技术,帮助你在项目中高效使用Redis缓存。
90 22
|
15天前
|
缓存 NoSQL 中间件
redis高并发缓存中间件总结!
本文档详细介绍了高并发缓存中间件Redis的原理、高级操作及其在电商架构中的应用。通过阿里云的角度,分析了Redis与架构的关系,并展示了无Redis和使用Redis缓存的架构图。文档还涵盖了Redis的基本特性、应用场景、安装部署步骤、配置文件详解、启动和关闭方法、systemctl管理脚本的生成以及日志警告处理等内容。适合初学者和有一定经验的技术人员参考学习。
103 7
|
19天前
|
存储 缓存 监控
利用 Redis 缓存特性避免缓存穿透的策略与方法
【10月更文挑战第23天】通过以上对利用 Redis 缓存特性避免缓存穿透的详细阐述,我们对这一策略有了更深入的理解。在实际应用中,我们需要根据具体情况灵活运用这些方法,并结合其他技术手段,共同保障系统的稳定和高效运行。同时,要不断关注 Redis 缓存特性的发展和变化,及时调整策略,以应对不断出现的新挑战。
53 10
|
19天前
|
缓存 监控 NoSQL
Redis 缓存穿透的检测方法与分析
【10月更文挑战第23天】通过以上对 Redis 缓存穿透检测方法的深入探讨,我们对如何及时发现和处理这一问题有了更全面的认识。在实际应用中,我们需要综合运用多种检测手段,并结合业务场景和实际情况进行分析,以确保能够准确、及时地检测到缓存穿透现象,并采取有效的措施加以解决。同时,要不断优化和改进检测方法,提高检测的准确性和效率,为系统的稳定运行提供有力保障。
48 5
|
19天前
|
缓存 监控 NoSQL
Redis 缓存穿透及其应对策略
【10月更文挑战第23天】通过以上对 Redis 缓存穿透的详细阐述,我们对这一问题有了更深入的理解。在实际应用中,我们需要根据具体情况综合运用多种方法来解决缓存穿透问题,以保障系统的稳定运行和高效性能。同时,要不断关注技术的发展和变化,及时调整策略,以应对不断出现的新挑战。
42 4
|
1月前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(一)
数据的存储--Redis缓存存储(一)
|
1月前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(二)
数据的存储--Redis缓存存储(二)
数据的存储--Redis缓存存储(二)
|
1月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
74 6

热门文章

最新文章