NOSQL数据库——Redis
文章目录
什么是Redis
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,通过提供多种键值数据类型来适应不同场景下的存储需求。
在开发中,关系型数据库是主数据库,用于存储数据,维护数据关系。 Redis(非关系型数据库)作为辅助数据库,提供数据缓存功能,把某些数据缓存到Redis里,获取资源时,优先从Redis里查找,以此提高性能。
Linux版的Redis
简单使用
- 启动Redis服务:
./redis-server redis.conf
- 使用客户端连接Redis服务:
./redis-cli
或./redis-cli [-h Redis的ip地址 -p Redis的端口]
- 关闭Redis服务:
./redis-cli shutdown
Redis的数据类型
redis是一种高级的key-value的存储系统
key:String类型
注:key不要太长,太长会消耗内存还会降低查找效率,长度不要超过1024个字节。
value:支持五种数据类型
-
字符串(String)
应用场景:缓存(数据查询,商品内容等)
-
哈希(hash)
-
字符串列表/双向链表(list)
应用场景:任务队列(秒杀、抢购、12306等) -
字符串集合(set)
应用场景:(数学中的集合运算) 如:共同好友 -
有序字符串集合(sorted set)
应用场景:排行榜
Redis的数据操作(待完善)
string类型常用命令
- 设置数据:
set key value
- 获取数据:
get key
- 删除数据:
del key
hash类型常用命令
Redis中的Hash类型可以看成具有String Key(field )和String Value(value)的map容器。
- 设置数据:
hset key field value
- 获取数据:
hget key field
- 删除数据:
hdel key field
list类型常用命令
,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其头部(left)和 尾部(right)添加新的元素
- 添加数据:
- 从左边添加:
lpush key value1 value2...
- 从右边添加:
rpush key value value2...
- 从左边添加:
- 弹出数据:
- 从左边弹出:
lpop key
- 从右边弹出:
rpop key
- 从左边弹出:
- 范围查询:
lrange key start end
- 查询全部:
lrange key 0 -1
- 查询全部:
set类型的常用命令
Redis的通用命令(通用的对key的操作)
查询所有key:keys *
查询my开头的key:keys my*
查询(如:myset加上一位任意字符)的key:keys myset?
删除key: del key
判断key是否存在:exists key
:
获取key对应的value类型:type key
Redis的持久化
Redis的高性能是由于其将所有数据都存储在了内存中,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,即持久化。Redis支持两种方式的持久化( RDB持久化,AOF持久化)。使用时可单独使用其中一种或将二者结合使用。
RDB持久化机制
-
该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘,默认开启。
-
文件保存位置:默认在Redis的运行目录下(dump.rdb文件)
-
什么时候将数据集快照写入磁盘(RDB方式数据持久化时机):
查看 RDB持久化机制的配置(redis.conf)
配置 | 意义 |
---|---|
save 900 1 | 每900秒(15分钟)至少有1个key发生变化,则dump内存快照 |
save 300 10 | 每300秒(5分钟)至少有10个key发生变化,则dump内存快照 |
注:① dump (备份文件系统)② Dump文件
- RDB持久化机制优点:
性能最大化,相比于AOF机制,如果数据集很大,RDB的启动效率会更高。 - RDB持久化机制缺点:
系统一 旦在定时持久化之前出现宕机现象,此前没有来得及写入磁盘的数据都将丢失,安全性略低。(保证数据的高可用性,即最大限度的避免数据丢失,RDB持久化机制l略有不足)
AOF持久化机制
-
该机制将以日志的形式记录服务器所处理的每一个写操作,在Redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的。
-
开启AOF持久化机制方法:修改redis.conf配置文件
-
文件保存位置:默认在Redis的运行目录下(appendonly.aof文件)
开启AOF持久化机制后要关闭服务,再启动服务,才会产生一个appendonly.aof文件
-
AOF方式数据持久化时机
查看AOF持久化机制的配置(redis.conf)
配置 | 意义 |
---|---|
appendfsync always | 每执行一次更新命令,持久化一次(同步持久化,每次发生的数据变化都会被立即记录到磁盘中,效率最低) |
appendfsync everysec | 每秒钟持久化一次(每秒同步是异步完成的,效率较高) |
appendfsync no | 不持久化 |
- AOF持久化机制优点:安全性高
- AOF持久化机制缺点:影响性能,还有可能保存大量的冗余命令
Jedis的基本使用
Jedis简介:Redis官方提供的Java语言操作Redis数据库的方式
相关jar报包
常用API
- 连接对象:
Jedis
- 构造方法:
Jedis(String host, int port)
参数host:redis服务器地址,参数port:redis服务端口 - 操作Redis的数据方法:执行的方法名称,和命令名称相同
如:
设置字符串类型的数据set(key,value)
获得字符串类型的数据get(key)
设置哈希类型的数据hset(key,field,value)
获得哈希类型的数据hget(key,field)
…
… - 释放资源:
close()
- 构造方法:
- 连接池配置信息对象:
JedisPoolConfig
- 构造方法:
JedisPoolConfig()
- 常用方法:
setMaxTotal(int maxTotal)
setMaxIdle(int maxIdle)
- 构造方法:
- 连接池对象:
JedisPool
- 构造方法:
JedisPool(String host, int port)
JedisPool(JedisPoolConfig config, String host, int port)
- 构造方法:
扩展: jedis连接池
jedis连接资源的创建与销毁是很消耗程序性能,所以jedis为我们提供了jedis的池化技术,jedisPool在创建时初始化一些连接资源存储到连接池中,使用jedis连接资源时不需要创建,而是从连接池中获取一个资源进行redis的操作,使用完毕后,不需要销毁该jedis连接资源,而是将该资源归还给连接池,供其他请求使用。
jedis连接池工具类(获取Jedis连接与String类型的数据的增删改查封装)
public class JedisUtils {
private static JedisPool pool;
static {
//读取配置文件,得到配置信息。
//参数说明:src下的properties文件名称,不要加后缀名。
ResourceBundle bundle = ResourceBundle.getBundle("jedis");
String host = bundle.getString("host");
int port = Integer.parseInt(bundle.getString("port"));
int maxTotal = Integer.parseInt(bundle.getString("maxTotal"));
int maxIdle = Integer.parseInt(bundle.getString("maxIdle"));
//创建连接池配置信息
JedisPoolConfig config = new JedisPoolConfig();
//设置最大连接数
config.setMaxTotal(maxTotal);
//设置最大空闲连接数
config.setMaxIdle(maxIdle);
//创建连接池对象
pool = new JedisPool(config, host, port);
}
//获取Jedis连接
public static Jedis getJedis() {
return pool.getResource();
}
//关闭Jedis连接
public static void close(Jedis jedis) {
if (jedis != null) {
jedis.close();
}
}
//设置缓存
public static void setCache(String key, String value){
Jedis jedis = null;
try {
jedis = JedisUtils.getJedis();
jedis.set(key, value);
} catch (Exception e) {
System.out.println("设置缓存数据失败:["+key+":"+value+"]");
} finally {
close(jedis);
}
}
//获取缓存
public static String getCache(String key){
Jedis jedis = null;
String value = null;
try {
jedis = JedisUtils.getJedis();
value = jedis.get(key);
} catch (Exception e) {
System.out.println("获取缓存失败:" + key);
} finally {
close(jedis);
}
return value;
}
//删除缓存
public static void delCache(String key){
Jedis jedis = null;
try {
jedis = JedisUtils.getJedis();
jedis.del(key);
} catch (Exception e) {
System.out.println("删除缓存失败");
} finally {
close(jedis);
}
}
}
配置文件jedis.properties
host=192.168.184.130
port=6379
maxTotal=20
maxIdle=10
上一篇: Ajax+js 和 Ajax+Jquery实现异步校验
下一篇: webpack安装及使用