一、简介
Redis :一个NoSQL数据库, 常用作 缓存使用 (cache)
Redis的数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
二、Redis常用命令
2.1.客户端连接
$redis-cli -h 127.0.0.1 -p 6379 -a "mypass"
2.2.设置指定 key 的值
SET key value
2.3.获取指定 key 的值
GET key
2.3.获取所有(一个或多个)给定 key 的值
MGET key1 [key2..]
2.4.将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)
SETEX key seconds value
2.5.将 key 中储存的数字值增一
INCR key
三、Springboot搭建redis
3.1.引入相关包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
3.2.RedisTemplate或StringRedisTemplate 对象操作Redis
@Resource
private RedisTemplate redisTemplate;
@Resource
private StringRedisTemplate stringRedisTemplate;
3.3.setReids操作
// 添加数据到redis
@PostMapping("/redis/addstring")
public String addToRedis(String k, String v){
// 操作Redis中string类型的数据, 先获取ValueOperations对象
redisTemplate.opsForValue().set(k,v);
return "向redis添加string类型的数据";
}
@PostMapping("/redis/{k}/{v}")
public String addStringKV(@PathVariable String k,
@PathVariable String v){
// 使用StringRedisTemplate对象
stringRedisTemplate.opsForValue().set(k,v);
return "使用StringRedisTemplate对象";
}
3.4.getReids操作
// 从redis获取数据
@GetMapping("/redis/getk")
public String getData(String k){
String v = (String) redisTemplate.opsForValue().get(k);
return "key是"+k+",值是:"+v;
}
@GetMapping("/redis/getstr/{k}")
public String getStringValue(@PathVariable String k){
String v = stringRedisTemplate.opsForValue().get(k);
return "k的value:"+v;
}
3.4.设置key或者value的序列化方式
/**
* 使用json 序列化, 把java对象转为json存储
*/
@PostMapping("/redis/addjson")
public String addJson() {
Student student = new Student();
student.setId(1001);
student.setName("zhangsan");
student.setAge(20);
redisTemplate.setKeySerializer(new StringRedisSerializer());
// 把值作为json序列化
redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer(Student.class));
redisTemplate.opsForValue().set("mystudent", student);
return "json序列化";
}
@PostMapping("/redis/getjson")
public String getJson() {
redisTemplate.setKeySerializer(new StringRedisSerializer());
// 把值作为json序列化
redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer(Student.class));
Object obj = redisTemplate.opsForValue().get("mystudent");
return "json反序列化=" + obj;
}
四、对比StringRedisTemplate 和 RedisTemplate
StringRedisTemplate :把k,v 都是作为String处理, 使用的是String的序列化 , 可读性好。
RedisTemplate :把k,v 经过了序列化存到redis。k,v 是序列化的内容, 不能直接识别。默认使用的jdk序列化, 可以修改为前提的序列化。