目录
键值数据库 NoSQL 非关系型数据库
非结构化的、无关联的、非SQL、BASE
键值类型(Redis)、文档类型(MongoDB)、列类型(HBase)、Graph类型(Neo4j)
SQL | NoSQL | |
---|---|---|
数据结构 | 结构化 | 非结构化 |
数据关联 | 关联的 | 非关联的 |
查询方式 | SQL查询 | 非SQL |
事务特性 | ACID | BASE |
存储方式 | 磁盘 | 内存 |
扩展性 | 垂直 | 水平 |
使用场景 | 1)数据结构固定2)相关业务对数据安全性、一致性要求较高 | 数据结构不固定;对一致性、安全性要求不高;对性能要求 |
Redis: 远程词典服务器
特征:
键值型、单线程、低延迟,速度快(基于内存、IO多路复用、良好的编码)、支持数据持久化、支持主从集群、分片集群、支持多语言客户端
1Redis常见命令
1.1Redis数据结构
Redis是一个key-value的数据库,key一般是String类型。
value类型:
基本类型:String、Hash、List、Set、SortedSet
特殊类型:GEO、BitMap、HyperLog
查看不同命令:https://redis.io/commands
1.2Redis通用命令
通过help [command] 可以查看一个命令的具体用法
- KEYS:查看符合模板的所有key,不建议在生产环境设备上使用
- DEL:删除一个指定的key
- EXISTS:判断key是否存在
- EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除
- TTL:查看一个key的剩余有效期
1.3String类型
根据字符串的格式不同,将String类型分为三类:
- string:普通字符串
- int:整数类型,可以做自增、自减操作
- float:浮点类型,可以做自增、自减操作
底层都是字节数组形式存储;字符串类型的最大空间不能超过512M。
String类型的常见命令
命令 | 说明 | 格式 |
---|---|---|
SET | 添加或者修改已经存在的一个String类型的键值对 | set key value |
GET | 根据key获取String类型的value | get key |
SETNX | 添加一个String类型的键值对,前提是这个key不存在,否则不执行 | setnx key value |
GETRANGE | 获取存储在指定key中字符串的子字符串,由start和end(均包含)决定 | GETRANGE key start end |
MSET | 批量添加多个String类型的键值对 | key1 value1 key2 value2… |
SETEX | 添加一个String类型的键值对,并指明有效期(单位s) | setex key timeout value |
DECR | 自减1; key不存在,key会先被初始化为0,然后再执行; 值限制在64为有符号数字表示之内 | DECR key |
DECRBY | 将key所存储的值减去指定的减量值,返回值是减后key值 | DECRBY key amount |
MGET | 根据多个key获取多个String类型的value | MGET key1… |
INCR | 让一个整型的key自增1,限制64位 | INCR key |
STRLEN | 获取长度,必须是字符串值 | STRLEN key |
INCRBY | 让一个整型的key加上指定增量 | INCRBY key amount |
INCRBYFLOAT | 让一个浮点类型的数字自增指定增量 | INCRBYFLOAT key amount |
怎么区分不同类型的key?没有mysql中table的概念。
key 的结构
项目名:业务名:类型:id
1.4Hash类型
String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便。Hash节后可以将对象中的每个字段独立存储,可以对单个字段做CRUD。
Hash类型的常见命令
命令 | 说明 | 格式 |
---|---|---|
HSET | 将哈希表 key 中的字段 field 的值设为 value | HSET key field value |
HGET | 获取存储在哈希表中指定字段的值 | HGET key field |
HDEL | 删除存储在哈希表中的指定字段 | HDEL key field |
HKEYS | 获取哈希表中所有字段 | HKEYS key |
HVALS | 获取哈希表中所有值 | HVALS key |
HGETALL | 获取在哈希表中指定 key 的所有字段和值 | HGETALL key |
1.5List类型
Redis 列表是简单的字符串列表,按照插入顺序排序
List类型的常见命令
命令 | 说明 | 格式 |
---|---|---|
LPUSH | 将一个或多个值插入到列表头部 | LPUSH key value1 [value2] |
LRANGE | 获取列表指定范围内的元素 | LRANGE key start stop |
RPOP | 移除并获取列表最后一个元素 | RPOP key |
LLEN | 获取列表长度 | LLEN key |
BRPOP | 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超 时或发现可弹出元素为止 | BRPOP key1 [key2 ] timeout |
1.6set类型
Redis set 是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据
set类型的常见命令
命令 | 说明 | 格式 |
---|---|---|
SADD | 向集合添加一个或多个成员 | SADD key member1 [member2] |
SMEMBERS | 返回集合中的所有成员 | SMEMBERS key |
SCARD | 获取集合的成员数 | SCARD key |
SINTER | 返回给定所有集合的交集 | SINTER key1 [key2] |
SUNION | 返回所有给定集合的并集 | SUNION key1 [key2] |
SDIFF | 返回给定所有集合的差集 | SDIFF key1 [key2] |
SREM | 移除集合中一个或多个成员 | SREM key member1 [member2] |
1.7sorted set类型
Redis sorted set 有序集合是 string 类型元素的集合,且不允许重复的成员。每个元素都会关联一个double类型的分数(score) 。redis正是通过分数来为集合中的成员进行从小到大排序。有序集合的成员是唯一的,但分数却可以重复。
sorted set类型的常用命令
命令 | 说明 | 格式 |
---|---|---|
ZADD | 向有序集合添加一个或多个成员,或者更新已存在成员的 分数 | ZADD key score1 member1 [score2 member2] |
ZRANGE | 通过索引区间返回有序集合中指定区间内的成员 | ZRANGE key start stop [WITHSCORES] |
ZINCRBY | 序集合中对指定成员的分数加上增量 increment | ZINCRBY key increment member |
ZREM | 移除有序集合中的一个或多个成员 | ZREM key member [member …] |
2在JAVA中操作Redis
Spring 对 Redis 客户端进行了整合,提供了 Spring Data Redis,在Spring Boot项目中还提供了对应的Starter,即 spring-boot-starter-data-redis。
2.1Jedis
Jedis 是 Redis 的 Java 版本的客户端实现。
使用 Jedis 操作 Redis 的步骤:
- 获取连接:new Jedis(“localhost”,6379);
- 执行操作: jedis.
- 关闭连接: jedis.close();
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.8.0</version>
</dependency>
2.2Spring Data Redis
Spring Data Redis 是 Spring 的一部分,提供了在 Spring 应用中通过简单的配置就可以访问 Redis 服务,对 Redis 底层开发包进行了高度封装。在 Spring 项目中,可以使用Spring Data Redis来简化 Redis 操作。
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>2.4.8</version>
</dependency>
<!--SpringBoot提供了对应的starter、maven坐标-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
Spring Data Redis中提供了一个高度封装的类:RedisTemplate,针对 Jedis 客户端中大量api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下:
- ValueOperations:简单K-V操作
- SetOperations:set类型数据操作
- ZSetOperations:zset类型数据操作
- HashOperations:针对hash类型的数据操作
- ListOperations:针对list类型的数据操作
使用方式
1、编写启动类@SpringBootApplication
2、配置相关yml:redis相关配置
3、提供配置类@Configuration:继承CachingConfigurerSupport,RedisTemplate成为Bean注入。默认的Key序列化器为:JdkSerializationRedisSerializer。配置类非必须,SpringBoot框架会自动装配RedisTemplate对象,但默认的key序列化器为JdkSerializationRedisSerializer,导致我们存到Redis中后的数据和原始数据有差别。
4、测试类@SpringBootTest、@RunWith(SpringRunner.class)
测试类方法基本和命令相同,但是存值前:
- 操作字符串类型
- ValueOperations valueOperations = redisTemplate.opsForValue();
- 操作Hash类型
- HashOperations hashOperations = redisTemplate.opsForHash();
- 操作列表类型
- ListOperations listOperations = redisTemplate.opsForList();
- 操作集合类型
- SetOperations setOperations = redisTemplate.opsForSet();
- 操作有序集合类型
- ZSetOperations zSetOperations = redisTemplate.opsForZSet();