文章目录
前言
为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)
发现宝藏
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。
一、 Redis客户端简介
1. Redis客户端分类
Redis的Java 客户端很多,官方推荐的有三种
- Jedis
- Lettuce
- Redisson
2. Spring 整合 Redis 的两种方式
Spring 对 Redis 客户端进行了整合,提供了 Spring Data Redis,在spring Boot项目中还提供了对应的Starter,即spring-boot-starter-data-redis
二、 使用 Jedis 操作 Redis
1. Jedis的maven坐标
1
2
3
4
5
| <dependency>
<groupld>redis.clients</groupld>
<artifactld>jedis</artifactld>
<version>2.8.0</version>
</dependency>
|
2. 使用Jedis操作Redis的步骤
- 获取连接
- 执行操作
- 关闭连接
3. Jedis 操作 Redis 示例
1. 新建maven工程,导入相关坐标
1
2
3
4
5
6
7
8
9
10
11
12
| <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.8.0</version>
</dependency>
|
2. 编写测试方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| /**
* 使用Jedis操作Redis
*/
public class JedisTest {
@Test
public void testRedis(){
//1 获取连接
Jedis jedis = new Jedis("localhost",6379);
//2 执行具体的操作
jedis.set("username","xiaoming");
//输出打印
String value = jedis.get("username");
System.out.println(value);
//删除操作
//jedis.del("username");
//哈希存储
jedis.hset("myhash","addr","bj");
//输出打印
String hValue = jedis.hget("myhash", "addr");
System.out.println(hValue);
//keys * 输出打印
Set<String> keys = jedis.keys("*");
for (String key : keys) {
System.out.println(key);
}
//3 关闭连接
jedis.close();
}
}
|
3. 启动redis服务(windows),连接客户端,测试获取 key username
4. 启动测试类,通过后再次获取key username
三、 使用 Spring Data Redis 操作 Redis
1. Spring Data Redis 的 maven 坐标
1
2
3
4
| <dependency>
<groupld>org.springframework.boot</groupld>
<artifactld>spring-boot-starter-data-redis</artifactld>
</dependency>
|
2. spring Data Redis 中 operation 接口的分类
spring Data Redis中提供了一个高度封装的类RedisTemplate,针对iedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下
- ValueOperations —- 简单K-V操作
- SetOperations —- set类型数据操作
- ZSetOperations —- zset类型数据操作
- HashOperations —- 针对map类型的数据操作
- ListOperations —- 针对list类型的数据操作
3. Spring Data Redis 操作 Redis String 类型示例(ValueOperations —- 简单K-V操作)
1. 新建 SpringBoot 工程,导入相关坐标
1
2
3
4
5
6
7
8
9
10
11
12
13
| <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
|
2. yml 配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| spring:
application:
name: springdataredis_demo
#Redis相关配置
redis:
host: localhost
port: 6379
#password: 123456
database: 0 #默认操作的是0号数据库
jedis:
#Redis连接池配置
pool:
max-active: 8 #最大连接数
max-wait: 1ms #连接池最大阻塞等待时间
max-idle: 4 #连接池中的最大空闲连接
min-idle: 0 #连接池中的最小空闲连接
|
3. 了解如何修改默认数据库数量(16)配置
4. 编写测试方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| @SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {
//yml中配置支持RedisTemplate对象自动装配
@Autowired
private RedisTemplate redisTemplate;
/**
* 操作String类型数据
*/
@Test
public void testString(){
//ValueOperations valueOperations = redisTemplate.opsForValue();
redisTemplate.opsForValue().set("city","beijing");
}
}
|
5. 运行并访问设置的 key 值
6. 设置配置类配置Redis序列化方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| /**
* Redis配置类
*/
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
//默认的Key序列化器为:JdkSerializationRedisSerializer
//String类型序列化器
redisTemplate.setKeySerializer(new StringRedisSerializer());
//hash类型序列化器
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(connectionFactory);
return redisTemplate;
}
}
|
7. 修改添加的 key 为 city123,再次运行测试类并访问新设置的 key
8. 其他测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| @SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {
//yml中配置支持RedisTemplate对象自动装配
@Autowired
private RedisTemplate redisTemplate;
/**
* 操作String类型数据
*/
@Test
public void testString(){
//ValueOperations valueOperations = redisTemplate.opsForValue();
redisTemplate.opsForValue().set("city123","beijing");
//打印输出
String value = (String) redisTemplate.opsForValue().get("city123");
System.out.println(value);
//设置超时时间
redisTemplate.opsForValue().set("key1","value1",10l, TimeUnit.SECONDS);
//当key不存在才设置value
Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("city1234", "nanjing");
System.out.println(aBoolean);
}
}
|
4. Spring Data Redis 操作 Redis hash 类型示例(HashOperations —- 针对map类型的数据操作)
1. 编写相关测试方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| @SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {
@Autowired
private RedisTemplate redisTemplate;
/**
* 操作Hash类型数据
*/
@Test
public void testHash(){
HashOperations hashOperations = redisTemplate.opsForHash();
//存值
hashOperations.put("002","name","xiaoming");
hashOperations.put("002","age","20");
hashOperations.put("002","address","bj");
//取值
String age = (String) hashOperations.get("002", "age");
System.out.println(age);
//获得hash结构中的所有字段
Set keys = hashOperations.keys("002");
for (Object key : keys) {
System.out.println(key);
}
//获得hash结构中的所有值
List values = hashOperations.values("002");
for (Object value : values) {
System.out.println(value);
}
}
}
|
2. 运行测试类,观察结果
5. Spring Data Redis 操作 Redis list 类型示例(ListOperations —- 针对list类型的数据操作)
1. 编写测试相关测试方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| @SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {
@Autowired
private RedisTemplate redisTemplate;
/**
* 操作List类型的数据
*/
@Test
public void testList(){
ListOperations listOperations = redisTemplate.opsForList();
//存1个值
listOperations.leftPush("mylist","a");
//存多个值
listOperations.leftPushAll("mylist","b","c","d");
//取值
List<String> mylist = listOperations.range("mylist", 0, -1);
for (String value : mylist) {
System.out.println(value);
}
//获得列表长度 llen
Long size = listOperations.size("mylist");
int lSize = size.intValue();
for (int i = 0; i < lSize; i++) {
//出队列
String element = (String) listOperations.rightPop("mylist");
System.out.println(element);
}
}
}
|
2. 运行测试方法,观察结果
6. Spring Data Redis 操作 Redis set 类型示例( SetOperations —- set类型数据操作)
1. 编写相关测试方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| @SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {
@Autowired
private RedisTemplate redisTemplate;
/**
* 操作Set类型的数据
*/
@Test
public void testSet(){
SetOperations setOperations = redisTemplate.opsForSet();
//存值
setOperations.add("myset","a","b","c","a");
//取值
Set<String> myset = setOperations.members("myset");
for (String o : myset) {
System.out.println(o);
}
//删除成员
setOperations.remove("myset","a","b");
//取值
myset = setOperations.members("myset");
for (String o : myset) {
![在这里插入图片描述](/img/498ec17ed8744d25a0cd5ee96fc20b73.png)
System.out.println(o);
}
}
}
|
2. 运行测试方法,观察结果
7. Spring Data Redis 操作 Redis Zset 类型示例(ZSetOperations —- zset类型数据操作)
1. 编写相关测试方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
| @SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {
@Autowired
private RedisTemplate redisTemplate;
/**
* 操作ZSet类型的数据
*/
@Test
public void testZset(){
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
//存值
zSetOperations.add("myZset","a",10.0);
zSetOperations.add("myZset","b",11.0);
zSetOperations.add("myZset","c",12.0);
zSetOperations.add("myZset","a",13.0);
//取值
Set<String> myZset = zSetOperations.range("myZset", 0, -1);
for (String s : myZset) {
System.out.println(s);
}
//修改分数
zSetOperations.incrementScore("myZset","b",20.0);
//取值
myZset = zSetOperations.range("myZset", 0, -1);
for (String s : myZset) {
System.out.println(s);
}
//删除成员
zSetOperations.remove("myZset","a","b");
//取值
myZset = zSetOperations.range("myZset", 0, -1);
for (String s : myZset) {
System.out.println(s);
}
}
}
|
2. 运行测试方法,观察结果
8. Spring Data Redis 操作 Redis 通用操作
1. 编写相关测试方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| @SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {
@Autowired
private RedisTemplate redisTemplate;
/**
* 通用操作,针对不同的数据类型都可以操作
*/
@Test
public void testCommon(){
//获取Redis中所有的key
Set<String> keys = redisTemplate.keys("*");
for (String key : keys) {
System.out.println(key);
}
//判断某个key是否存在
Boolean itcast = redisTemplate.hasKey("dongli");
System.out.println(itcast);
//删除指定key
redisTemplate.delete("myZset");
//获取指定key对应的value的数据类型
DataType dataType = redisTemplate.type("myset");
System.out.println(dataType.name());
}
}
|
2. 运行测试方法,观察结果
总结
欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下。