开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第4天,点击查看活动详情
redis是一个key-value存储系统和Memcached类似,它支持存储的value类型相对更多,如下
string(字符串)、
list(链表set(集合)
zset(sorted set 有序集合)
hash(哈希类型)。
以上所有数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。---摘自百度百科
Redis 比其他key-value缓存产品有以下三个特点:
Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载到内存使用。
Redis 不仅支持简单的 key-value 类型的数据,同时还提供 list集合,set集合,zset集合,hash集合 等数据结构的存储。
Redis 支持主从复制,即 master-slave 模式的数据备份。
下面介绍一下SpringBoot整合Redis:
1.引入Pom依赖
<dependencies>
<!-- 导入Jedis 坐标 操作 Redis-->
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- 导入Spring-Data-Jedis 简化Redis操作-->
<!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-redis -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>2.7.0</version>
</dependency>
</dependencies>
Spring Data Redis中提供了-一个高度封装的类: RedisTemplate, 针对jedis客户端中大量api进行了归类封装,将同类型操作封装为operation接口 具体分类如下: ValueOperations: 简单K-V操作 SetOperations: set类型数据操作 ZSetOperations: zset类型数据操作 HashOperations:针对map类型的数据操作 ListOperations: 针对list类型的数据操作
2.操作String类型数据
redisTemplate=new RedisTemplate();
// ValueOperations valueOperations = redisTemplate.opsForValue();
// valueOperations.set("Lover","Mr.Pe");
//可以简化为: redisTemplate.opsForValue().set();
redisTemplate.opsForValue().set("Lover","Mr.Pe");
//设置过期时间 10秒
redisTemplate.opsForValue().set("keys","Mr.Li",10, TimeUnit.SECONDS);
//如果存在 设置key
redisTemplate.opsForValue().setIfAbsent("keys","Mr.Li");
2.操作Hash类型数据
redisTemplate=new RedisTemplate();
redisTemplate.opsForHash().put("Student","age","22");
redisTemplate.opsForHash().put("Student","sex","Man");
redisTemplate.opsForHash().put("Student","name","XiaoMing");
System.out.println(redisTemplate.opsForHash().get("Student", "name")); //输出XiaoMing
Set keys = redisTemplate.opsForHash().keys("Student");//获取所有keys
for (Object key : keys) {
System.out.println( key);
}
List values = redisTemplate.opsForHash().values("Student");
for (Object value : values) {
System.out.println( value);
}
3.操作List类型数据
redisTemplate=new RedisTemplate();
redisTemplate.opsForList().leftPush("stuinfo","梁启超");
redisTemplate.opsForList().leftPush("stuinfo","25");
redisTemplate.opsForList().leftPush("stuinfo","2019届");
//存入多个
redisTemplate.opsForList().leftPushAll("stuinfo","男","play soccer","like swimming");
//按照范围取出元素
List stuinfo = redisTemplate.opsForList().range("stuinfo", 0, -1);
for (Object o : stuinfo) {
System.out.println(o);
}
//获取长度
redisTemplate.opsForList().size("stuinfo");
//吹队列
redisTemplate.opsForList().rightPop("stuinfo");
redisTemplate.opsForList().leftPop("stuinfo");