前言:在开发中,普遍会使用mysql数据库进行数据的存储,但在这种情况下,用户每次的访问都要去数据库里面查找数据,当访问量过大时,就会影响到性能,为了防止出现这样的情况,我们需要使用Redis做缓存,提高性能。
一.Redis的安装
下载之后安装属于傻瓜式安装,安装完成之后,打开,目录如下
文件名 | 作用 |
redis.windows.conf | Redis的配置文件 |
redis-cli.exe | Redis客户端 |
redis-server.exe | Redis服务端 |
启动服务端,打开cmd命令
关闭服务,ctrl+c即可。
启动客户端
退出客户端输入exit命令即可 。
二.Redis的数据类型
Redis存储的数据是key-value结构的数据,其中key是字符串类型,value有五种常用的数据类型
字符串 string | 普通字符串,redis中最简单的数据类型 |
哈希 hash | 也叫散列,类似于java中的HashMap结构 (适用于存储对象) |
列表 list | 按照插入的顺序排序,可以有重复的元素,类似于java中的LinkedlList (适用于存储有顺序的数据) |
集合 set | 无序集合,没有重复元素,类似于java中的HashSet |
有序集合 sorted set/zset | 集合中每一个元素关联一个分数,根据分数升序排序,没有重复元素 (适用于存储一些排行榜的数据) |
三.Redis的数据操作
基于上面,我们清楚的知道Redis的数据类型有五种,每种数据类型的操作又有不同,我们将分开进行讨论
1.string类型
2.哈希 hash
3. 列表 list
4.集合 set
5.有序集合 sorted set/zset
通用命令
四.Spring Data Redis操作Redis
导入maven坐标
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
配置Redis数据源
spring:
redis:
host: localhost
port: 6379
database: 0
默认没有设置密码,如果设置了密码,需要配置上去,这里小编使用的是0号数据库(database可以选择不配)。
编写一个配置类,创建RedisTemplate对象
package com.sky.config;
import lombok.extern.slf4j.Slf4j;
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.StringRedisSerializer;
@Configuration
@Slf4j
public class RedisConfiguration {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
RedisTemplate redisTemplate = new RedisTemplate();
//设置Redis连接工厂对象
redisTemplate.setConnectionFactory(redisConnectionFactory);
//设置redis key的序列化器
redisTemplate.setKeySerializer(new StringRedisSerializer());
return redisTemplate;
}
}
使用RedisTemplate操作redis
package com.sky;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.connection.DataType;
import org.springframework.data.redis.core.*;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@SpringBootTest
public class SpringDataRedisTest {
@Autowired
private RedisTemplate redisTemplate;
@Test
public void test1(){
System.out.println(redisTemplate);
ValueOperations valueOperations = redisTemplate.opsForValue();
HashOperations hashOperations = redisTemplate.opsForHash();
ListOperations listOperations = redisTemplate.opsForList();
SetOperations setOperations = redisTemplate.opsForSet();
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
//字符串
valueOperations.set("city","北京");
String city = (String) valueOperations.get("city");
valueOperations.set("code","1234",3, TimeUnit.MINUTES);
valueOperations.setIfAbsent("lock",1);
//哈希类型的数据
hashOperations.put("100","name","Tom");
hashOperations.put("100","age","20");
String o = (String) hashOperations.get(100,"name");
Set keys = hashOperations.keys("100");
List values = hashOperations.values("100");
hashOperations.delete("100","age");
//列表类型数据
listOperations.leftPushAll("mylist","a","b");
listOperations.leftPush("mylist","d");
List mylist = listOperations.range("mylist", 0, -1);
listOperations.rightPop("mylist");
Long mylist1 = listOperations.size("mylist");
//集合类型的数据
setOperations.add("set1","a","b","c");
setOperations.add("set2","b","c","d");
Set members = setOperations.members("set1");
Long size = setOperations.size("set1");
Set intersect = setOperations.intersect("set1", "set2");
Set union = setOperations.union("set1", "set2");
setOperations.remove("set1","a");
//有序集合类型数据
zSetOperations.add("zset1","a",20);
zSetOperations.add("zset1","b",20.2);
zSetOperations.add("zset1","c",20.1);
Set zset1 = zSetOperations.range("zset1", 0, -1);
zSetOperations.incrementScore("zset1","c",10);
zSetOperations.remove("zset1","a","b");
//通用命令操作
Set keys1 = redisTemplate.keys("*");
Boolean name = redisTemplate.hasKey("name");
for (Object o1 : keys1) {
DataType type = redisTemplate.type(o1);
}
redisTemplate.delete("mylist");
}
}
这里,小编也是从五种数据类型进行操作的,需要知道的是,五种数据类型在java里面对用着五个不同的对象,每个对像能操作一种类型的数据。
string类型 | redisTemplate.opsForValue() |
哈希 hash | redisTemplate.opsForHash() |
列表 list | redisTemplate.opsForList() |
集合 set | redisTemplate.opsForSet() |
有序集合 sorted set/zset | redisTemplate.opsForZSet() |
总结:基于以上内容,我们认识了redis,以及如何在java代码里面对redis进行相关的操作,小编将在本系列文章的(二)里面进行讲解如何进行缓存,以及使用SpringCache框架对redis进行缓存的操作。