目录
一、项目背景
Remote Dictionary Server (Redis),即远程字典服务,是使用ANSI C语言编写,支持网络、可基于内存亦可持久化的日志型的,Key-Value型的数据库,并提供多种语言的API。
它通常被称为数据结构服务器,因为值value可以是string、hash、list、set、sorted set等类型。应用场景:缓存、任务队列、排行榜、网站访问统计、数据过期处理、分布式集群架构中session分离。
本项目为非关系数据库课程的作业之一,利用了Redis对用户数量进行统计,在此基础上实现了周期性统计。
开发工具:IntelliJ IDEA
二、项目设计
2.1 类描述
2.1.1 JedisInstance.java
Jedis对象实例, 对外暴露了一个获取User对象的静态方法。
public class JedisInstance {
//私有化构造函数
private JedisInstance(){
}
//定义一个静态枚举类
static enum SingletonEnum{
//创建一个枚举对象,该对象天生为单例
INSTANCE;
private JedisPool jedisPool;
//私有化枚举的构造函数
private SingletonEnum(){
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(30);
config.setMaxIdle(10);
jedisPool = new JedisPool(config, "127.0.0.1", 6379);
}
public JedisPool getInstnce(){
return jedisPool;
}
}
//对外暴露一个获取User对象的静态方法
public static JedisPool getInstance(){
return SingletonEnum.INSTANCE.getInstnce();
}
}
2.1.2 RedisUtil.java
Redis常用操作封装类,封装了value类型为string、hash、set、list、map的一些操作。该项目使用了简单的封装操作。
String:添加元素set,获取元素get,追加append,incr,decr,incrBy,decrBy
Hash:添加元素hset,获取元素hget,hincrBy
(项目中只用到了get、incrBy、decrBy、hincrBy、hget)
Set:添加元素sadd、删除元素srem、获得key对应的value总数scard、获得key对应的所有value smembers、判断set是否存在sismember、随机获取数据srandmember
List:添加元素lpush、获取list lrange、删除任意类型的key del
Map:设置map hmset、获取map的key个数hlen、获取map中所有的key hkeys、获取map中所有的value hvals、获取map中指定key的value hmget、获取map所有的key和value hgetAll、删除指定key的map。
public class RedisUtil {
//获取连接
private final Jedis jedis = JedisInstance.getInstance().getResource();
//==================================string===================================
//string的value在遇到incr, decr操作时会转成数值型进行计算
//数值加1
public void incr(String key){
jedis.incr(key);
}
//数值减1
public void decr(String key)
{
jedis.decr(key);
}
//数值加num
public void incrBy(String key, long num){
jedis.incrBy(key, num);
}
//数值减num
public void decrBy(String key, long num)
{
jedis.decrBy(key, num);
}
//为string添加元素
public void set(String key, String value) {
jedis.set(key,value);
}
//获取string
public String get(String key) {
return jedis.get(key);
}
//追加string
public void append(String key, String value) {
jedis.append(key,value);
}
//==================================hash===================================
//hash数值加num
public void hincrBy(String key, String field, long num)
{
jedis.hincrBy(key, field, num);
}
//为hash添加元素
public void hset(String key, String field, String value) {
jedis.hset(key,field,value);
}
//获取hash元素
public String hget(String key, String field) {
return jedis.hge