在网站中,有些数据经常被访问,每次访问都查询数据库,这将给服务器造成一定压力。本篇将介绍服务器常用数据缓存技术。
在网站开发过程中,比如国际化、系统配置等频繁访问的数据,可以采用静态属性等方法在系统初始化的时候一次性全部加在并存储在静态属性中。
存储格式可以采用数组、哈希表、集合等形式。
1、数组:
数组能够通过下标直接访问,查询时间复杂度为O(1).
Id | Tage | Name | Type | Value |
1 | 0 | Color | SETTING | red |
2 | 1 | BG1 | BG | 1.png |
3 | 2 | BG2 | BG | 2.png |
注:Id为数据库自增主键,Tag、Name为变量查询名,Tag适用于数组,Name使用于哈希表,Type定义类型,便于下拉选项使用。Tag和Name之间的转换可以通过枚举实现,如:
public enum Setting{
Color("0"),BG1("1");
private final String name;
private Setting(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
}
在数据初始化时,可以新建一个数组,大小为表的行数。然后以Tag为下标,Value(行对象)为值将数据存储于数组中。以后查找时可通过枚举将Name转为Tag,然后直接根据数组下标Tag查询Value。
数组虽然具有查询快的有点,但是同步插入比较麻烦,当插入新的值时,由于需要同步更新数组,而数组大小不可变,因此需要新建一个数组并拷贝原有数组的值(具体方法参照Java ArrayList 的源码)。
2.HashMap
HashMap 是通过哈希算法实现的,具有查询快(比数组慢)、使用方便的特点。
在数据初始化时,可以将Name作为Key,Value或行对象作为值存储于HashMap中。
3.ArrayList
Java的ArrayList是在数组的基础上实现的,因此具有数组的优点,同时功能更加丰富。
*在查询的时候,有时可能需要根据Type查询该Type下的所有数据,此时需要变量数组、HashMap、ArrayList,若数据较多,可以在数据初始化时建立一个类别HashMap,以Type为Key,Tag或Name为值,多个Tage或Name之间以|分割。在查询某个Type时,可以先根据Type从HashMap中取出所有的Tag或Name,然后可以根据Tag或Name快速查询到值。