一、Redis概述
在传统的java web项目中基本都使用数据库进行存储数据,但是使用数据库会有一些性能弊端,主要是性能方面,因为数据库持久化数据主要是面向磁盘的,而磁盘的读写速度又比较慢,因此在一般的管理系统中使用数据库来存储数据,因为它不存在高并发,没有瞬间需要读写大量数据的请求。而在互联网中则不同,互联网项目存在高并发场景,需要在一秒或者更少的时间内读写大量的数据,这时用传统的数据库存储方式就无法满足需要,因此需要引入NoSQL技术,NoSQL也是一种简易的数据库,主要是基于内存的数据库,并且提供一定的持久化功能。Redis和MangoDB是当前使用最广泛的NoSQL。
Redis性能十分优越,可以支持每秒十几万次的读写操作,其性能远超数据库,并且支持集群、分布式、主从同步、发布订阅消息模式、主从复制、持久化等功能,原则上可以无限扩展,让更多的数据存储在内存中,它还支持一定的事务能力,这在高并发访问的场景下保证数据安全和一致性特别有用。
Redis主要应用于两个场景:一个是缓存常用的数据,另一个是在需要高速读写的场合使用它来快速读写,例如抢红包,秒杀等场景。
在使用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 互联网轻量级框架整合开发》一书。