Redis 是一个开源的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。缓存就是数据交换的缓冲区(称作:Cache),他把一些外存上的数据保存在内存上,为什么保存在内存上,我们运行的所有程序里面的变量都是存放在内存中的,所以如果想将值放入内存上,可以通过变量的方式存储。在JAVA中一些缓存一般都是通过Map集合来实现的。
一,新建springboot项目并且配置yml文件
redis项目的配置结构体
server:
port: 8080
servlet:
context-path: /redisTest
spring:
application:
name: test-one
profiles:
active: dev
spring:
redis:
host: 127.0.0.1
password:
port: 6379
jedis:
pool:
max-active: 8
min-idle: 0
lettuce:
shutdown-timeout: 0
二. redis的五种数据类型
String(字符串) 、list(列表)、set(集合)、hash(散列)、Zset(有序集合)
redisTemplate.opsForValue();//操作字符串
redisTemplate.opsForHash();//操作hash
redisTemplate.opsForList();//操作list
redisTemplate.opsForSet();//操作set
redisTemplate.opsForZSet();//操作有序set
新建一个测试类,并添加注解
@RunWith(SpringRunner.class)
@SpringBootTest
1.redis操作String类型
首先注入StringRedisTemplate类,然后使用redisTemplate中的方法操作redis,直接上测试代码:
/**
* 操作String
*/
@Test
public void test1() {
redisTemplate.opsForValue().set("myKey", "haiYang");
redisTemplate.opsForValue().get("mykey");
//点击量减少
redisTemplate.opsForValue().decrement("myKey");
//区别在与会判断当前的键的值是否为v,是的话不作操作,不实的话进行替换。如果没有这个键也不会做任何操作。
redisTemplate.opsForValue().setIfPresent("", "");
ValueOperations<String, String> valueOper = redisTemplate.opsForValue();
RedisOperations<String, String> redisOperations = valueOper.getOperations();
redisOperations.delete("mykey");
//点击量计算
valueOper.increment("aaa");
//这三个方法和上面有些相似,区别在与会判断当前的键的值是否为v,是的话不作操作,不实的话进行替换。如果没有这个键也不会做任何操作。
System.out.println(valueOper.setIfPresent("myKey", "haiyangaa"));
}
2.redis操作List类型
/**
* 操作List
*/
@Test
public void test2() {
ListOperations<String, String> valueOperations = redisTemplate.opsForList();
RedisOperations<String, String> redisOperations = valueOperations.getOperations();
//在redis表的上方插入数据,即数据头插入数据
redisTemplate.opsForList().leftPush("money", "200yuan");
//在redis表的上方插入多条数据,即数据头插入多条数据数据
redisTemplate.opsForList().leftPushAll("", "", "", "");
//在redis下方插入数据,即从数据尾插入数据
redisTemplate.opsForList().rightPush("money", "800dollers");
//在redis下方插入数据,即从数据尾插入数据
redisTemplate.opsForList().rightPushAll("", "", "", "");
//取redis中的表最上的一条数据
String list1 = redisTemplate.opsForList().leftPop("money");
System.out.println(list1);
//取redis表中最下的一条数据
String list2 = redisTemplate.opsForList().rightPop("money");
System.out.println(list2);
//取键为"key"的集合的全部
List<String> keyList = redisTemplate.opsForList().range("money", 0, -1);
for (String i : keyList) {
System.out.println(i);
}
}
3.redis操作Hash类型
操作Hash类型可以将要存储的对象转换成JSON字符串进行存储,或者将对象序列化存储,否则存储到redis中会出现乱码,虽然可以用java取出来,但是在redis管理工具中可读性差
/**
* 操作Hash
*/
@Test
public void test3() {
HashOperations<String, Object, Object> opsForHash = this.redisTemplate.opsForHash();
//redis添加参数
opsForHash.put("zoo", "three", "pig");
//redis根据键获取键值
opsForHash.get("zoo", "one");
//redis删除指定的一条HASH数据
opsForHash.delete("zoo", "two");
//根据key值获取map对象
opsForHash.entries("zoo");
Object obj = JSONArray.toJSON(new User(1,"zhangsan","boy"));
String jsonString = JSON.toJSONString(obj);
System.out.println(jsonString);
opsForHash.put("zoo","four", jsonString);
}
下图为使用json存储的对象
使用json字符串存储的,该数据即为上图代码运行的测试结果
redis操作Hash将对象序列化存储
@Test
public void test1() {
this.redisTemplate.setHashKeySerializer(new StringRedisSerializer());
this.redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
HashOperations opsForHash = this.redisTemplate.opsForHash();
User user = new User();
user.setId(1);
user.setName("李四");
user.setSex("男");
opsForHash.put("user".toString(), "1", user);
User user1= (User) opsForHash.get("user","1");
System.out.println(user1);
}
序列化存储结果
4.redis操作Set类型
redis会将要存入的属性自动进行排序
/**
* 操作Set
*/
@Test
public void test4() {
SetOperations<String, String> opsForSet = this.redisTemplate.opsForSet();
//添加Set集合
opsForSet.add("number", "one", "two", "three", "four");
//取出有序集合
opsForSet.members("number");
}
5.redis操作ZSet类型
redis操作ZSet,第三个属性则为排序规则
/**
* 操作Zset
*/
@Test
public void test5() {
ZSetOperations<String, String> opsForZSet = this.redisTemplate.opsForZSet();
//添加ZSet集合,后面的数字为排序规则
opsForZSet.add("haochide", "rou", 1);
opsForZSet.add("haochide", "cai", 2);
}
上面即为redis在springboot中的五种类型的基本操作,调用的方法基本满足日常开发的需要。redis的深入学习还在继续,希望各位大佬们别忘点个赞。