zoukankan      html  css  js  c++  java
  • Redis缓存机制一为什么要用Redis

    1、持久化数据库的缺点

      1)存储在部署数据库的硬盘上

             平时我们使用的关系型数据库有MySql,Oracle以及SqlServer等,通常通过数据驱动来链接数据库进行增删改查。
             那么我们日常使用的数据库都存在哪里?我们以MySql为例。打开MySql所在的文件夹目录下的data文件夹,如图所示:
            也就是说我们日常使用的关系型数据库中的数据,全部存储在我们部署数据库的机器的硬盘中。

         
        2)访问速度
               
              服务器的读写效率是网站运行速度的重要条件,当然还有服务器的宽带,但是这些可以通过硬件的升级更新等办法来解决。
            服务器处理数据的速度,与网站速度息息相关,而数据查询、数据处理等和数据库处理速度有关。所以,提高数据库处理数  据的能力很重要。
            其实,sql语句优化可以提高处理效率。但是如果网站的访问量非常大的时候,我们的数据库压力就变大了。数据库的连接 池、处理数据的能力就会面临很大的挑战。此时就要使用高并发处理、负载均衡和分布式数据库了。但是,这些会花费很大的人力、资金。

    2、缓存介绍
         1)定义

              缓存就是在内存中存储的数据备份,当数据没有发生本质变化的时候,我们避免数据的查询操作直接连接数据库,而是去    内容中读取数据,这样就大大降低了数据库的读写次数,而且从内存中读数据的速度要比从数据库查询要快很多。
         
         2)缓存的形式
              页面缓存(smarty静态化技术):页面缓存经常用在CMS(content manage system)内存管理系统里面。
              数据缓存:经常会用在页面的具体数据里面。

    3、Redis介绍
         Redis是Remote Dictionary Server(远程数据服务)的缩写,由意大利人antirez(Salvatore Sanfilippo)开发的一款内存高速缓存数据库,该软件使用C语言编写,它的数据模型为key-value。
         它支持丰富的数据结构(类型),比如String/List/Hash/Set/Sorted Set。

         可持久化(一边运行,一边把数据往硬盘中备份一份,防止断电等情况导致数据丢失,等断电情况恢复之后,Redis再把硬盘中的数据恢复到内存中),保证了数据的安全。

        1)高速读写(因为是在内存上的数据库)
        2)数据类型丰富
        3)支持持久化(把内存上的数据写到磁盘上)
        4)多种内存分配及回收策略
        5)支持多事物
        6)消息队列、消息订阅(先订阅后发送)
        7)支持高可用
        8)支持分布式分片集群

    4、为什么选择Redis
        1)Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
        2)Redis支持master-slave(主-从)模式应用
        3)Redis支持数据持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
        4)Redis单个value的最大限制是1GB,memcached只能保存1MB的数据。

     参考: https://blog.csdn.net/weixin_42184707/article/details/80361464

    import java.util.Iterator;
    import java.util.List;
    import java.util.Set;

    import redis.clients.jedis.Jedis;


    public class RedisJava {

      

    public static void main(String[] args) {
    Jedis jedis = new Jedis("localhost");
    System.out.println("连接成功");
    //查看服务是否运行
    System.out.println("服务正在运行: "+jedis.ping());

    //1.
    jedis.set("runoobkey", "www.runoob.com");
    // 获取存储的数据并输出
    System.out.println("redis 存储的字符串为: "+ jedis.get("runoobkey"));

    //2.
    //存储数据到列表中
    jedis.lpush("site-list", "Runoob");
    jedis.lpush("site-list", "Google");
    jedis.lpush("site-list", "Taobao");
    // 获取存储的数据并输出
    List<String> list = jedis.lrange("site-list", 0 ,2);
    for(int i=0; i<list.size(); i++) {
    System.out.println("列表项为: "+list.get(i));
    }


    //3. 获取数据并输出
    Set<String> keys = jedis.keys("*");
    Iterator<String> it=keys.iterator() ;
    while(it.hasNext()){
    String key = it.next();
    System.out.println(key);
    }


    }


    }

  • 相关阅读:
    Business English E-mail
    向数据库更新数据
    遍历DataTable
    Convert SqlDataReader to DataTable
    (十七)map、flatMap和reduce方法的补充
    (4)六顶思考帽
    (3)学习方法思维导图
    (十六)call、apply、bind的实现以及区别
    (十五)关于继承
    (十四)防抖和节流
  • 原文地址:https://www.cnblogs.com/xiaohuizhenyoucai/p/10565303.html
Copyright © 2011-2022 走看看