zoukankan      html  css  js  c++  java
  • JAVA面试考点解析(8) -- 非关系数据库;Redis

    72.有没有使用过REDIS

     Redis是一个key-value的nosql数据库,先存到内存中,会根据一定的策略持久化到磁盘,即使断电也不会丢失数据,支持的数据类型比较多.

    主要用来做缓存数据库的数据和web集群时当做中央缓存存放session
     
    73.REDIS的使用场景
    缓存:把经常需要查询很少修改的数据放到读速度很快的空间(内存),以便减少下次访问时间,减轻db压力,
    计数器:redis中的计数器是原子性的内存操作,可以解决库存溢出问题,进销存,系统存溢出
    Session缓存服务器:web集群时作为session的缓存服务器
     
    74.REDIS存储对象的方式
    Json字符串:需要把对象转换成json字符串,当做字符串处理,直接使用set和get来设置或获取/ 
    优点:设置和获取比较简单 
    缺点:没有提供专门的方法,需要把对象转换成json
    字节:需要做序列号,就是把对象序列化为字节保存.
    如果是担心json转对象会消耗资源的情况,这个问题需要考量几个地方, 
    1. 使用的json转换lib是否就会存在性能问题 
    2. 数据的数据量级别,如果是存储百万级的大数据对象,建议采用存储序列化对象方式.如果是少量的数据级对象,或者是数据对象字段不多,还是建议采用json转换成string方式.毕竟redis对存储字符类型这部分优化的非常好.具体采用的方式与方法,还要看你所使用的场景
     
    75.REDIS数据淘汰机制
    在 redis 中,允许用户设置最大使用内存大小 server.maxmemory,在内存限定的情况下是很有用的。譬如,在一台 8G 机子上部署了 4 个 redis 服务点,每一个服务点分配 1.5G 的内存大小,减少内存紧张的情况,由此获取更为稳健的服务。
    内存大小有限,需要保存有效的数据? 
    Redis内存数据集大小上升到一定大小的时候,就会施行平台策略.数据淘汰策略.redis提供6中数据淘汰策略: 
    1.volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰 
    2.volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰 
    3.volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰 
    4.allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰 
    5.allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰 
    6.no-enviction(驱逐):禁止驱逐数据 
     
    76.JAVA访问REDIS级REDIS集群
    Java访问redis: 
    1. 使用jedisjava客户端来访问redis服务器,优点类似jdbc访问db一样 
    2. 如果是spring进行集成时,可以使用springDataRedis来访问redis , springDataRedis 只是对jedis的二次封装
    Redis集群:当一台数据无法满足要求,可以使用redis集群来出来,类似mysql的读写分离
     
     
    106.redis存储对象 
    1.对象要实现序列化接口: 
    public class Person implements Serializable { 
    private int id; 
    private String name;
    2.序列化与反序列化工具 
    public class SerializeUtil { 
    public static byte[] serialize(Object object) { 
    ObjectOutputStream oos = null; 
    ByteArrayOutputStream baos = null; 
    try { 
    //序列化 
    baos = new ByteArrayOutputStream(); 
    oos = new ObjectOutputStream(baos); 
    oos.writeObject(object); 
    byte[] bytes = baos.toByteArray(); 
    return bytes; 
    } catch (Exception e) { 
    return null; 
    public static Object unserialize(byte[] bytes) { 
    ByteArrayInputStream bais = null; 
    try { 
    //反序列化 
    bais = new ByteArrayInputStream(bytes); 
    ObjectInputStream ois = new ObjectInputStream(bais); 
    return ois.readObject(); 
    } catch (Exception e) { 
    return null; 
    .测试
    public void setObject() {  
    Person person = new Person(100, "alan");  
    jedis.set("person:100".getBytes(), SerializeUtil.serialize(person));  
    //将key转成字节,将value也就是对象序列化
    }


  • 相关阅读:
    aspnetcore identity result.Succeeded SignInManager.IsSignedIn(User) false?
    RFID
    window 关机
    有赞零售小票打印图片二值化方案
    条码打印
    音频基本概念
    2008R2 部署 aspnetcore repair failed 函数不正确
    IIS 字符串过长
    解决MVC Json序列化的循环引用问题/EF Json序列化循引用问题---Newtonsoft.Json
    book
  • 原文地址:https://www.cnblogs.com/newbie27/p/10835997.html
Copyright © 2011-2022 走看看