NoSql
内容
非关系型数据库,数据与数据之间没有关系,以键值对的形式存储
优点
1.易扩展
2.高性能
3.灵活的数据类型
补充
关系型数据库由于数据在硬盘上存储,查询时需要与硬盘发生Io(读操作),可能导致数据库崩溃,所以出现了非关系型数据库
Redis
内容
远程字典服务,是一个开源的,使用C语言编写的,支持网络交互的,内存中的Key-Value数据结构存储系统,支持多种语言,它可以用作数据库、缓存和消息中间件
特点
1.直接将数据存储在内存中
2.数据结构简单(以键值对的形式存储)
3.高性能
4.支持数据持久化(以键值对的形式可以备份在硬盘上)
数据类型(值)
1.String
单值缓存
set key value 设置一个键值对
get value 通过键获取值
del key 删除键
key * 列出所有的键
对象缓存
set user {name:jim,age:20}
计数器(用于文章访问量)
set key 0
incr key 自增1
decr key 自减1
get key 获取当前数值
2.Hash(哈希)
用于存储对象(对象中的值被修改)
hset key field value 存储一个哈希表key的键值
hmset key field value [field value …] 存储多个键值对
hget key field 获取哈希表key对应的field键值
hmget key field [field …] 批量获取哈希表key中多个field键值
hdel key field [field …] 删除哈希表key中的field键值
hlen key 返回哈希表key中的field的数量
hgetall key 返回哈希表key中所有的键值
hincrby key field 增加的值(减少给负数)
使用场景:电商购物车
3.List(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
lpush key value[value…] 将一个或多个值插入到key列表的表头(最左边)
rpush key value[value…] 将一个或多个值插入到key列表的表尾(最右边)
lpop key 移除并返回key列表的头元素
rpop key 移除并返回key列表的尾元素
lrange key start stop 返回列表key中指定区间内的元素,区间以偏移量start和stop
适用场景:可以用来存储接收到的消息数据
4.Set(集合)
Redis 的 Set 是无序集合。
sadd key member[member…] 往集合key中存入元素,元素存在则忽略,若key不存在则新建
srem key member[member…] 从集合key中删除元素
smembers key 获取集合key中所有元素
scard key 获取集合key的元素个数
5.Zset(sorted set:有序集合)
redis zset 也是不允许重复的成员,但是是有序的。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。、
zadd key score member[[score member]…] 往有序集合key中加入带分值元素
zrem key member[member…] 从有序集合key中删除元素
zscore key member 返回有序集合key中元素member的分值
zincrby key increment member 为有序集合key中元素member的分值加上increment
zcard key 返回有序集合key中元素个数
zrange key start stop[withscores] 正序获取有序集合keyastart下标到stop下标的元素
使用场景:记录微信朋友圈记录点赞用户
设置失效时间
例如缓存,验证码等数据,我们希望它们能在一定时间内自动的被销毁。redis提供了一些命令,能够让我们对key设置过期时间,并且让key过期之后被自动删除.
设置值时直接设置有效时间
EX 表示以秒为单位
PX表示以毫秒为单位 EX,PX不区分大小写
set name jim EX 30 设置失效时间为30秒
ttl 键 查看剩余时间(秒)
pttl 键 查看剩余时间(毫秒)
设置值后设置有效时间
expire 键 时间(秒)
pexpire 键 时间(毫秒)
SpringBoot集成Redis
搭建
1.添加redis依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.配置连接redis
spring:
redis:
host: 192.168.31.100
port: 6379
password: 111
database: 0
pool:
max-active: 8 # 连接池最大连接数(使用负值表示没有限制)
max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle: 8 # 连接池中的最大空闲连接
min-idle: 0 # 连接池中的最小空闲连接
timeout: 5000ms # 连接超时时间(毫秒)
3.注入RedisTemplate
@Autowired
RedisTemplate redisTemplate;
4.测试
注:RedisTemplate中的两个方法
hasKey(key) 判断是否有这个key
delete(key) 删除这个key以及对应的值
序列化配置类
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfig {
/**
* 序列化键,值
* @param connectionFactory
* @return
*/
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(connectionFactory);
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
StringRedisSerializer redisSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(redisSerializer);设置string类型的key,序列化方式是String
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);//设置string类型的值,序列化方式为json
//redisTemplate.setHashKeySerializer(redisSerializer);
//redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
return redisTemplate;
}
}