redis常用操作及spring整合redis流程
1、基本知识
-
基于键值对的NOSQL数据库,它的key是string,值支持多种数据结构:strings、hashes、lists、sets、sorted sets
-
所有的数据都存放在内存中,所以他的读写性能惊人
-
持久化方式:RDB、AOF
- RDB将数据以快照的方式保存在硬盘,耗时易堵塞,可能影响业务,不适合实时操作,适用于几个小时一次
- AOF实时性高,将日志以命令的方式存储,占磁盘空间,恢复速度慢。
- 两者适合结合在一起用
- 使用简单、支持数据类型多
-
适用于:缓存、排行榜热门的帖子、计数器(帖子浏览量)、社交网络(点赞、关注、点踩)、消息队列等
-
内置了16个库,用索引切换,默认为0
-
cmd输入redis-cli可启动redis
-
常用操作
- select 1 选择库1
- flushdb 清空数据库
- 存字符串示例
- set test:count 1 设置test:count 为1
- get test:count 取test:count 的值
- incr test:count test:count 对应的值+1
- decr test:count test:count 对应的值-1
- 存哈希值示例
- hset test:user id 1 存key为id,值为1的哈希值,索引为test:user
- hget test:user id 取test:user 中key为id的哈希值
- 存列表示例,可改为队列 栈等,左进右进左出右出等
- lpush test:ids 101 102 103 分别把101 102 103 从左边(left)存入
- llen test:ids 查看list长度
- lindex test:ids 0 查看test:ids 索引为0的值
- lrange test:ids 0 2 查看test:ids 索引从0到2的值
- rpop test:ids 从test:ids 右边pop一个值
- 集合操作示例,无序不可重复
- sadd test:stu aaa bbb ccc ddd eee 向集合test:stu 存放五个数据
- scard test:stu 统计test:stu 元素个数
- spop test:stu 随机test:stu 弹出一个元素
- smembers test:stu 查看test:stu 中元素
- 有序集合示例
- zadd test:stu 10 aaa 20 bbb 30 ccc 存放了test:stu 三个人的分数和名字
- zcard test:stu 统计个数
- zscore test:stu ccc 查test:stu 中ccc的个数
- zrank test:stu ccc 返回test:stu 中ccc的排名
- zrange test:students 0 2 取test:stu 中排名0-2的人
全局数据的操作 - keys * 查找库里所有的key
- keys test* 查找库里所有test开头的key
- type test:stu 查看test:stu 的类型
- del test:stu 删除test:stu
- exists test:stu 判断test:stu 是否存在
- expire test:stu 10 设置test:stu 的过期时间为10s
2、redis结合IDEA开发流程
引入依赖
配置Redis
配置数据库参数
编写配置类,构造RedisTemplate
-
pom.xml引入redis jar包
-
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
-
application.properties配置文件写入相关配置
-
#RedisProperties spring.redis.database=11 #一共16个数据库,随便选 spring.redis.host=localhost #本机 spring.redis.port=6379 #端口号
-
新建配置类
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
// 将redis注入工厂
RedisTemplate<String,Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
// 设置key的序列化方式
template.setKeySerializer (RedisSerializer.string());
//设置value的序列化方式
template.setValueSerializer (RedisSerializer.json());
// 设置hash的key的序列化方式
template. setHashKeySerializer (RedisSerializer.string());
// 设置hash的value的序列化方式
template.setHashValueSerializer (RedisSerializer.json());
// 使设置生效
template.afterPropertiesSet();
return template;
}
}