• Redis数据库基础


    一、Redis概述

    在传统的java web项目中基本都使用数据库进行存储数据,但是使用数据库会有一些弊端,主要是性能方面,因为数据库持久化数据主要是面向磁盘的,而磁盘的读写速度又比较慢,因此在一般的管理系统中使用数据库来存储数据,因为它不存在高并发,没有瞬间需要读写大量数据的请求。而在互联网中则不同,互联网项目存在高并发场景,需要在一秒或者更少的时间内读写大量的数据,这时用传统的数据库存储方式就无法满足需要,因此需要引入NoSQL技术,NoSQL也是一种简易的数据库,主要是基于内存的数据库,并且提供一定的持久化功能。

    Redis和MangoDB是当前使用最广泛的NoSQL。NoSQL数据库强调BASE原则(基本可用(Basically Available)、软状态(Soft-state)、最终一致性(Eventual Consistency)它减少了对数据的强一致性支持,从而获得了基本一致性和柔性可靠性,并且利用以上的特性达到了高可靠性和高性能,最终达到了数据的最终一致性。

    Redis性能十分优越,可以支持每秒十几万次的读写操作,其性能远超数据库,并且支持集群、分布式、主从同步、发布订阅消息模式、主从复制、持久化等功能,原则上可以无限扩展,让更多的数据存储在内存中,它还支持一定的事务能力,这在高并发访问的场景下保证数据安全和一致性特别有用。

    Redis主要应用于两个场景:
    1、缓存常用的数据;
    2、在需要高速读写的场合使用它来快速读写,例如抢红包,秒杀等场景。

    在使用redis作为缓存的时候需要从3个方面考虑:
    1、业务数据常用吗?命中率如何?如果命中率低就没有必要写入缓存。
    2、该业务数据是读操作多还是写操作多?如果写操作多,需要频繁写入数据库,也没有必要使用缓存。
    3、业务数据大小如何?如果要存储几百兆字节的文件,会给缓存带来很大的压力,这时需要考虑有无必要。

    二、Redis性能优越

    Redis的性能优越主要来自3个方面:
    首先,它是基于ANSIC语言编写的,接近于汇编语言的机器语言,运行十分快速。
    其次,它是基于内存的读写,速度自然比数据库的磁盘读写要快得多。
    最后,它的数据库结构只有6种数据类型,数据结构比较简单,因此规则较少,而数据库则是范式、完整性、规范性等需要考虑的规则比较多,处理业务会比较复杂。
    所以一般而言Redis的速度是正常数据库的几倍到几十倍,如果把命中率高的数据存储在redis上,那么通过redis读写和操作这些数据,系统的性能将会远超使用数据库的情况。

    三、Windows下Redis的基本安装和使用

    可参考:https://www.runoob.com/redis/redis-install.html
    下载之后解压,然后cmd进入目录,输入redis-server.exe redis.windows.conf 命令即可启动redis,出现如下则表示启动成功。

    redis自带有一个客户端工具,redis-cli.exe ,双击即可启动,注意,需要服务启动之后这个客户端才能启动,否则无法启动,会显示计算机积极拒绝无法连接。

    四、Redis的6种数据结构

    Redis是一种基于内存的数据库,并且提供了一定的持久化功能,它是一种键值对(key-value)数据库,使用key作为索引找到当前缓存的数据并且返回给程序调用者。
    redis有如下6种数据结构:
    1、字符串(String);
    2、列表(List);
    3、集合(set);
    4、有序集合(zset);
    5、哈希结构(hash);
    6、基数(HyperLogLog)。
    如下表所示:

    数据类型 数据类型存储的值 说明
    String(字符串) 可以保存字符串、整数、浮点数 可以对字符串进行操作,如增加字符串或者求子串;如果是整数或浮点数,可以实现计算,如自增等。
    List(列表) 它是一个链表,它的每一个节点都包含一个字符串 redis支持从链表的两端插入或弹出节点,或通过偏移对它进行裁剪;也可以读取一个或多个节点,根据条件删除或查找节点等。
    Set(集合) 无序且唯一,每一个元素都是一个字符串 可以新增、读取、删除单个元素;判断一个元素是否在集合中;计算它和其他集合的交集、并集和差集等;也可以随机读取元素。
    ZSet(有序集合) 有序,可以包含字符串、整数、浮点数、分值,元素的排序是根据分值的大小来决定的 可以增、删、查、改元素,根据分值的范围或者成员来获取对应的元素。
    Hash(哈希散列表) 类似map、是一个键值对应的无序列表 可以增、删、查、改单个键值对,也可以获取所有的键值对。
    HyperLogLog(基数) 它的作用是计算重复的值,以确定存储的数量 只提供基数的运算,不提供返回的功能

    以上资料整理于《java EE 互联网轻量级框架整合开发》一书。
    参考百度百科: (1) https://baike.baidu.com/item/Redis/6549233?fr=aladdin (百度百科对redis的简介)
    (2) https://blog.csdn.net/hudashi/article/details/51163757 (redis的简介与使用)
    (3) https://www.jianshu.com/p/75441d442266 (对redis的解读很好,并且参考链接很有阅读价值)

  • 相关阅读:
    java读取properties 属性文件
    oracle中插入一条数据,id自动增长,插入之后怎么得到这个id(sequence的使用)
    Android布局实现圆角边框
    TabHost中使用startActivityForResult无法接收返回值的解决方案[转]
    ORA00937: not a singlegroup group function
    MVC与WebForm最大的区别
    使用SQL Server存储ASP.NET Session变量
    JS中的event 对象详解
    一列多行值合并成一个值(MS SQL SERVER 2008)
    c#如何共享程序集
  • 原文地址:https://www.cnblogs.com/jasonboren/p/13024451.html
Copyright © 2020-2023  润新知