Redis缓存技术(第一课)(一)

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

本文章的内容介绍

Java基础集合的回顾

Redis技术介绍

JAVA基础的集合介绍

ArrayList的集合讲解

package arraylist;
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListDemo1 {
  /**
   * @param args
   */
  public static void main(String[] args) {
    // 1.创建一个集合
    ArrayList list  = new ArrayList();
    //2.给集合添加元素
    //创建学生对象
    Student stu1 = new Student("狐疑",18);
    Student stu2 = new Student("糊涂",19);
    Student stu3 = new Student("呼啸",20);
    Student stu4 = new Student("环宇",21);
    list.add(stu1);
    list.add(stu2);
    list.add(stu3);
    list.add(stu4);
    list.hashCode();
    //3.删除集合中的指定元素 boolean remove(int index)
    list.remove(0);
    //4.获取集合中指定索引的元素 Object get(int index)
    System.out.println(list.get(0));
    //5.修改集合中指定元素的值 
    //public E  set(int index,E element)修改指定索引处的元素,返回被修改的元素
    list.set(2, new Student("maomao",21));
    //返回集合中元素的个数 int size()
    int count = list.size();
    System.out.println("集合中的元素个数为:"+count);
    System.out.println("何为编程?");
    //遍历元素
    System.out.println("遍历元素第一种方式·");
    for (int i = 0; i < args.length; i++) {
      String string = args[i];
      System.out.println(i);
    }
    System.out.println(list);
    System.out.println("遍历第二种方式");
    for (Iterator iterator = list.iterator(); iterator.hasNext();) {
      Object object = (Object) iterator.next();
      System.out.println(list);
      System.out.println(list.size());
    }
    System.out.println("第三种方式");
    for (Object object : list) {
      System.out.println(list);
    }
    }
  }

package arraylist;
/**
 *创建一个存储字符串的集合,存储3个字符串元素,使用程序实现在控制台遍历集合的所有元素
 *1.创建一个集合
 *2.往集合中添加3个字符串
 *3.遍历集合:首先要能获取到集合中的每一个元素,这个通过get(int index)方法去实现
 *4.遍历集合:其次要能够获取到集合中的长度,这个通过size()方法去实现
 *
 * @author Administrator
 *
 */
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListDemo2 {
  /**
   * @param args
   */
  public static void main(String[] args) {
    //1.创建一个集合
    ArrayList list = new ArrayList();
    //2.往集合中添加3个字符串
    list.add("诸葛亮");
    list.add("刘备");
    list.add("张飞");
    list.add("李四");
    list.add("我是list集合");
    //3-4遍历集合
    for(int i=0;i<list.size();++i){
      System.out.println(list.get(i));
    }
    System.out.println("方式一");
    for (int i = 0; i < list.size();i++) ;
      System.out.println(list);
      System.out.println("方式二");
      for (Iterator iterator = list.iterator(); iterator.hasNext();) {
        Object object = (Object) iterator.next();
        System.out.println(list);
      }
    }
  }

package arraylist;
public class Student {
  private String name;
  private int age;
  public Student(String name, int age) {
    super();
    this.name = name;
    this.age = age;
  }
  public Student() {
    super();
    // TODO Auto-generated constructor stub
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }
  @Override
  public String toString() {
    // TODO Auto-generated method stub
    return "Student[age="+age+",name="+name+"]";
  }
  @Override
  public int hashCode() {
    // TODO Auto-generated method stub
    return super.hashCode();
  }
}

LinkedList的集合讲解

package LinkedList;
import java.util.LinkedList;
import java.util.List;
public class LinkedListTest{  
  public static <item> void main(String[] args) {  
      LinkedList<String> lList = new LinkedList<String>();  
      lList.add("stu");  
      lList.add("stu1");  
      lList.add("stu2");  
      lList.add("stu3");  
      lList.add("stu4");  
      lList.add("stu5");  
      lList.add("stu6");  
      lList.add("stu7");  
      lList.add("stu8");  
      lList.add("stu9"); 
      System.out.println("链表的第一个元素是 : " + lList.getFirst());  
      System.out.println("链表最后一个元素是 : " + lList.getLast());  
      for (String str: lList) {  
          System.out.println(str);  
        }  
      List subl = lList.subList(1, 6);  
      System.out.println(subl);  
      lList.remove(2);  
      System.out.println(lList);  
      System.out.println(lList); 
    }  
  }  

Hashset的集合讲解

package com.set;
public class Student {
  private String name;
  private int age;
  public Student() {
    super();
    // TODO Auto-generated constructor stub
  }
  public Student(String name, int age) {
    super();
    this.name = name;
    this.age = age;
  }
  /**
   * @return the name
   */
  public String getName() {
    return name;
  }
  /**
   * @param name the name to set
   */
  public void setName(String name) {
    this.name = name;
  }
  /**
   * @return the age
   */
  public int getAge() {
    return age;
  }
  /**
   * @param age the age to set
   */
  public void setAge(int age) {
    this.age = age;
  }
  @Override
  public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + age;
    result = prime * result + ((name == null) ? 0 : name.hashCode());
    return result;
  }
  @Override
  public boolean equals(Object obj) {
    if (this == obj)
      return true;
    if (obj == null)
      return false;
    if (getClass() != obj.getClass())
      return false;
    Student other = (Student) obj;
    if (age != other.age)
      return false;
    if (name == null) {
      if (other.name != null)
        return false;
    } else if (!name.equals(other.name))
      return false;
    return true;
  }
  //@Override
  public String toString() {
    return "Student [name=" + name + ", age=" + age + "]";
  }
}
package com.set;
/**
 * - Hash Set 集合保证元素唯一性的原理
  1.根据对象的哈希值计算存储位置 
  如果当前位置没有元素则直接存入
  如果当前位置有元素存在,则进入第二步
  2.当前元素的元素和已经存在的元素比较哈希值
  如果哈希值不同,则将当前元素进行存储
  如果哈希值相同,则进入第三步
  3.通过equals()方法比较两个元素的内容
  如果内容不相同,则将当前元素进行存储
  如果内容相同,则不存储当前元素
- 
 * @author MZFAITHDREAM
 *
 */
public class HashsetText1 {
/**
 * 哈希值根据地址,字符串,数字类型。
 * @param args
 */
  public static void main(String[] args) {
    //创建学生对象
    Student stu =new Student("xangxang",34);
    System.out.println(stu);
    System.out.println(stu.hashCode());
    System.out.println("===============================");
    Student stu1 =new Student("tyuop",34);
    System.out.println(stu1);
    System.out.println(stu1.hashCode());
    System.out.println("================================");
    //查看哈希值二个对象
    Student stu2 =new Student("maomao",37);
    System.out.println(stu2);
    System.out.println(stu2.hashCode());
    //查看哈希值三个对象
    Student stu3 =new Student("nopains nogains",34);
    System.out.println(stu3);
    System.out.println(stu3.hashCode());
    //查看哈希值四个对象
    Student stu4 =new Student("nopains nogains",34);
    System.out.println(stu4);
    System.out.println(stu4.hashCode());
    System.out.println("================================");
    //查看哈希值五个对象
    Student stu5 =new Student("nopains nogains",34);
    System.out.println(stu5);
    System.out.println(stu5.hashCode());
    //查看哈希值六个对象
    Student stu6 =new Student("nopains nogains",34);
    System.out.println(stu6);
    System.out.println(stu6.hashCode());
    System.out.println(stu6.hashCode());
  }
}
package com.set;
/**
 * - Hash Set 集合保证元素唯一性的原理
  1.根据对象的哈希值计算存储位置 
  如果当前位置没有元素则直接存入
  如果当前位置有元素存在,则进入第二步
  2.当前元素的元素和已经存在的元素比较哈希值
  如果哈希值不同,则将当前元素进行存储
  如果哈希值相同,则进入第三步
  3.通过equals()方法比较两个元素的内容
  如果内容不相同,则将当前元素进行存储
  如果内容相同,则不存储当前元素
- 
 * @author MZFAITHDREAM
 *
 */
public class HashsetText2 {
/**
 * 哈希值根据地址,字符串,数字类型。
 * @param args
 */
  public static void main(String[] args) {
    //创建学生对象
    Student stu =new Student("小小程序员",34);
    System.out.println(stu);
    System.out.println(stu.hashCode());
    System.out.println("===============================");
    Student stu1 =new Student("com on",34);
    System.out.println(stu1);
    System.out.println(stu1.hashCode());
    System.out.println("================================");
    //查看哈希值二个对象
    Student stu2 =new Student("毛毛非",37);
    System.out.println(stu2);
    System.out.println(stu2.hashCode());
    //查看哈希值三个对象
    Student stu3 =new Student("星星胡i11nogains",34);
    System.out.println(stu3);
    System.out.println(stu3.hashCode());
    //查看哈希值四个对象
    Student stu4 =new Student("nopains nogains",34);
    System.out.println(stu4);
    System.out.println(stu4.hashCode());
    System.out.println("================================");
    //查看哈希值五个对象
    Student stu5 =new Student("nopains nogains",34);
    System.out.println(stu5);
    System.out.println(stu5.hashCode());
    //查看哈希值六个对象
    Student stu6 =new Student("nopains nogains",34);
    System.out.println(stu6);
    System.out.println(stu6.hashCode());
    System.out.println(stu6.hashCode());
  }
}
package com.set;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class HashSetTest2 {
  public static void main(String[] args) {
    Set<String> s=new HashSet<String>();
    s.add("avvvv");
    s.add("abvvvvv");
    s.add("abcvvvvvv");
    s.add("abcd");
    //增强for循化
    for (String string : s) {
      System.out.println(string);
    }
    System.out.println("************1111*****元素******************遍历*********");
    for (String string : s) {
      System.out.println(s);
    }
    System.out.println("=========222===集合=======遍历*===============");
    迭代器:集合特有的遍历方式
    System.out.println(s);
    for (Iterator iterator = s.iterator(); iterator.hasNext();) {
      String string = (String) iterator.next();
      System.out.println(string);
    }
    System.out.println("=======3333==========*集合遍历*=========");
    System.out.println(s);
    for (Iterator iterator = s.iterator(); iterator.hasNext();) {
      String string = (String) iterator.next();
      System.out.println(s);
    }
    System.out.println("********4444*******元素*****************遍历*****************");
    System.out.println("------------------------");
    for (int i = 0; i <s.size(); i++) {
      System.out.println(s);
    }
    //万物为Object 第四种方式
  System.out.println("==============================================");
  for (Object Object : s) {
    System.out.println(Object);
  }
    }
  }

Set的集合讲解

package com.set;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class Set2 {
  public static void main(String[] args) {
    Set<String> s=new HashSet<String>();
    s.add("今天天青");
    s.add("行万里路");
    s.add("加强学习java");
    s.add("自强不息");
    s.add("好好学习");
    for (int i = 0; i <s.size(); i++) {
      System.out.println(s);
    }
    System.out.println("------------------------");
    for (String string : s) {
      System.out.println(s);
    }
    System.out.println("-------------------");
    for (Iterator iterator = s.iterator(); iterator.hasNext();) {
      String string = (String) iterator.next();
      System.out.println(s);
    }
    System.out.println("-------------");
    for (Object Object: s) {
      System.out.println(s);
    }
  }
}
相关实践学习
基于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缓存数据类型丢失问题
解决Redis缓存数据类型丢失问题
125 85
|
4天前
|
缓存 监控 NoSQL
Redis经典问题:缓存穿透
本文详细探讨了分布式系统和缓存应用中的经典问题——缓存穿透。缓存穿透是指用户请求的数据在缓存和数据库中都不存在,导致大量请求直接落到数据库上,可能引发数据库崩溃或性能下降。文章介绍了几种有效的解决方案,包括接口层增加校验、缓存空值、使用布隆过滤器、优化数据库查询以及加强监控报警机制。通过这些方法,可以有效缓解缓存穿透对系统的影响,提升系统的稳定性和性能。
|
4天前
|
存储 缓存 负载均衡
从零到一:分布式缓存技术初探
分布式缓存通过将数据存储在多个节点上,利用负载均衡算法提高访问速度、降低数据库负载并增强系统可用性。常见产品有Redis、Memcached等。其优势包括性能扩展、高可用性、负载均衡和容错性,适用于页面缓存、应用对象缓存、状态缓存、并行处理、事件处理及极限事务处理等多种场景。
17 1
|
1月前
|
缓存 NoSQL 关系型数据库
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
本文详解缓存雪崩、缓存穿透、缓存并发及缓存预热等问题,提供高可用解决方案,帮助你在大厂面试和实际工作中应对这些常见并发场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
|
1月前
|
存储 缓存 NoSQL
【赵渝强老师】基于Redis的旁路缓存架构
本文介绍了引入缓存后的系统架构,通过缓存可以提升访问性能、降低网络拥堵、减轻服务负载和增强可扩展性。文中提供了相关图片和视频讲解,并讨论了数据库读写分离、分库分表等方法来减轻数据库压力。同时,文章也指出了缓存可能带来的复杂度增加、成本提高和数据一致性问题。
【赵渝强老师】基于Redis的旁路缓存架构
|
1月前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
43 5
|
1月前
|
缓存 NoSQL 中间件
redis高并发缓存中间件总结!
本文档详细介绍了高并发缓存中间件Redis的原理、高级操作及其在电商架构中的应用。通过阿里云的角度,分析了Redis与架构的关系,并展示了无Redis和使用Redis缓存的架构图。文档还涵盖了Redis的基本特性、应用场景、安装部署步骤、配置文件详解、启动和关闭方法、systemctl管理脚本的生成以及日志警告处理等内容。适合初学者和有一定经验的技术人员参考学习。
209 7
|
NoSQL 云栖大会 Redis
【云栖大会】Redis技术的实践与探索
Redis作为高性能的key-value数据库,目前包括Twitter、微博、GitHub在内等众多IT互联网企业都在使用它。本专场阿里云高级技术专家兼Redis中国用户会发起人子嘉等人齐聚首,分享了Redis的实践经验,以及Redis云服务的技术架构、云上客户的典型问题等内容。
3461 0
|
2月前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(一)
数据的存储--Redis缓存存储(一)
105 1
|
2月前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(二)
数据的存储--Redis缓存存储(二)
53 2
数据的存储--Redis缓存存储(二)