Redis
- 数据库的分类
关系型数据库:关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。在关系型数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过对这些关联的表格分类、合并、连接或选取等运算来实现数据库的管理。如:MySQL、Oracle、SQL Server。
非关系型数据库:NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”泛指非关系型的数据库,区别于关系数据库,它们不保证关系数据的ACID特性。 - NoSQL
分类:
类型 | 描述 |
---|---|
键值(Key-Value)存储数据库 | 这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。如:Redis |
列存储数据库 | 这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。如:Cassandra, HBase, Riak |
文档型数据库 | 文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同第一种键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。 |
图形(Graph)数据库 | 图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上 |
特点:
1.是开源免费的
2.存在缓冲(内存)中,查询速度快
3.不支持SQL
4.没有多表关系
5.可以存储基本数据类型、对象和集合等格式
6.不支持事务
- Redis介绍
概念:
Redis(全称:Remote Dictionary Server 远程数据服务)是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
应用:
频繁请求的、变化率低的数据
缓存
高并发
任务队列
服务器:redis-server.exe
客户端:redis-cli.exe
配置文件:redis.windows - 数据类型
String字符串类型
set key value//设置键和值
get key//获取值
del key//删除
hash哈希类型-Map
hset mapname key value
hget mapname key
hgetall mapname
hdel mapname key1 key2
list列表类型-LinkedList
lpush key value
rpush key value
lrange key start end
lpop key
rpop key
lset key index value
set集合类型
sadd key value
smembers key
srem key value
zset有序集合类型
zadd key score value
zrange key start end
zrange key 0 -1 widthscores//输出带分数的结果
zrem key value
- 命令
keys *//查询所有键
type key//获取键对应的value的类型:type key
del key//删除指定key及value
- 服务运行
配置文件
①环境变量–>新建一个REDIS_HOME
②path中追加%REDIS_HOME%
在解压的 Redis 文件目录下,输入命令 redis-server.exe --service-install redis.windows.conf --loglevel verbose
(后边的 verbose 表示: 详尽,相当于Java中的 debug级别)
开启服务
redis-server --service-start
关闭服务
redis-server --service-stop
卸载服务
redis-server --service-uninstall
服务重命名
redis-server --service-name server-name
- Java操作Redis(Jedis)
jedis-2.9.0.jar(不同数据类型的操作)
Jedis jedis = new Jedis("localhost",6379); //连接redis服务器
jedis.close();
commons-pool2-2.2.jar
JedisPoolConfig config = new JedisPoolConfig();
JedisPool jedisPool = new JedisPool(config,"localhost",6379);
Jedis jedis = jedisPool.getResource(); // // 从连接池获取一个Jedis实例
- 持久化
RDB(默认)
概念:RDB持久化是把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化过程分为手动触发和自动触发。
用法: 在一段时间间隔,检测key的变化情况,然后持久化。
save 900 1
save 300 10
save 60 10000
优缺点:
优:RDB是一个紧凑压缩的二进制文件,代表Redis在某一个时间点上的数据快照。非常适合用于备份,全量复制等场景。
缺:RDB方式数据没办法做到实时持久化/秒级持久化。因为bgsave每次运行都要执行fork操作创建子进程,属于重量级操作,频繁执行成本过高。
AOF(主流)
概念:AOF(append only file)持久化,以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中命令达到恢复数据的目的。AOF的主要作用是解决了数据持久化的实时性。
开启
appendonly yes
记录每一条命令的操作
间隔 ,然后持久化(appendfsync参数)
参数 | 描述 |
---|---|
always | 每次有新命令时,就将缓冲区数据写入并同步到 AOF 文件 |
everysec(默认) | 每秒将缓冲区的数据写入并同步到 AOF 文件 |
no | 将缓冲区数据写入AOF 文件,但是同步操作到交给操作系统来处理 |