1.Redis入门

Redis基于内存 的**key-value(键值对)**结构数据库
基于内存存储,读写性能高
适合存储热点数据(热点商品,资讯,新闻)[顿时间内大量访问]
企业应用广泛
MySQL 磁盘 二维表
1.1 String
setex key seconds value 几秒后会失效,短信验证码
1.2 hash

队列 先进先出
1.3 list

1.4 set
1.5 zset
1.6 通用命令
2. 在Java中操作Redis---------- Spring Data Redis
database 0-15 16个,各自隔离

java
package com.sky.test;
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 RedisTemplateTest {
@Autowired
private RedisTemplate redisTemplate;
@Test
public void test_RedisTemplate(){
System.out.println(redisTemplate);
ValueOperations valueOperations = redisTemplate.opsForValue();
HashOperations hashOperations = redisTemplate.opsForHash();
ListOperations listOperations = redisTemplate.opsForList();
SetOperations setOperations = redisTemplate.opsForSet();
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
}
@Test
public void test_redis_String(){
//set get setex setnx
ValueOperations valueOperations = redisTemplate.opsForValue();
valueOperations.set("name","zhangsan");
System.out.println(valueOperations.get("name"));
valueOperations.set("age",18,60, TimeUnit.SECONDS);
System.out.println(valueOperations.get("age"));
valueOperations.setIfAbsent("name","mike");
System.out.println(valueOperations.get("name"));
}
@Test
public void test_redis_hash(){
//hset hget hdel hkeys hvals
HashOperations hashOperations = redisTemplate.opsForHash();
hashOperations.put("user:1","name","zhangsan");
hashOperations.put("user:1","age",18);
hashOperations.put("user:1","gender","男");
String name =(String) hashOperations.get("user:1", "name");
System.out.println(name);
//System.out.println(hashOperations.get("user:1","age"));
//System.out.println(hashOperations.get("user:1","gender"));
hashOperations.delete("user:1","age");
Set keys = hashOperations.keys("user:1");
System.out.println(keys);
List values = hashOperations.values("user:1");
System.out.println(values);
}
@Test
public void test_redis_list() {
//lpush lrange rpop llen
ListOperations listOperations = redisTemplate.opsForList();
listOperations.leftPush("mylist","a");
listOperations.leftPushAll("mylist","b","c","d");
List range = listOperations.range("mylist", 0, -1);
System.out.println(range);
Object a = listOperations.rightPop("mylist");
System.out.println(a);
Long mylist = listOperations.size("mylist");
System.out.println(mylist);
}
@Test
public void test_redis_set(){
//sadd smembers scard sinter sunion srem
SetOperations setOperations = redisTemplate.opsForSet();
setOperations.add("set1","a","b","c","d");
setOperations.add("set2","a","b","e","f");
Set members = setOperations.members("set1");
System.out.println(members);
Long set1 = setOperations.size("set1");
System.out.println(set1);
Set intersect = setOperations.intersect("set1", "set2");
System.out.println(intersect);
Set union = setOperations.union("set1", "set2");
System.out.println(union);
setOperations.remove("set1","a");
}
@Test
public void test_redis_zset(){
//zadd zrange zincrby zrem
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
zSetOperations.add("zset1", "a", 10.1);
zSetOperations.add("zset1", "b", 2.5);
zSetOperations.add("zset1", "c", 3.6);
Set range = zSetOperations.rangeWithScores("zset1", 0, -1);
System.out.println(range);
Double score = zSetOperations.incrementScore("zset1", "b", 5);
System.out.println(score);
zSetOperations.remove("zset1","a");
Long zset1 = zSetOperations.size("zset1");
System.out.println(zset1);
}
@Test
public void test_redis_Common(){
//keys exists del type
Set keys = redisTemplate.keys("*");
System.out.println(keys);
System.out.println(redisTemplate.hasKey("name"));
DataType type = redisTemplate.type("name");
System.out.println(type.name());
System.out.println(redisTemplate.delete("name"));
}
}
修改bean的名称,在RestController(xxxx)

java
package com.sky.controller.admin;
import com.sky.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.web.bind.annotation.*;
@RestController("adminStatusController")
@RequestMapping("/admin/shop")
@Api(tags = "管理端-营业状态管理")
@Slf4j
public class StatusController {
private static final String SHOP_STATUS = "SHOP_STATUS";
@Autowired
private RedisTemplate redisTemplate;
/**
* 设置营业状态
* @param status
* @return
*/
@PutMapping("/{status}")
@ApiOperation("设置营业状态")
public Result setStatus(@PathVariable Integer status){
log.info("管理端设置营业状态为:{}",status == 1 ? "营业中" : "打烊中");
redisTemplate.opsForValue().set(SHOP_STATUS,status);
return Result.success();
}
/**
* 获取营业状态
* @return
*/
@GetMapping("/status")
@ApiOperation("获取营业状态")
public Result<Integer> getStatus(){
Integer status = (Integer) redisTemplate.opsForValue().get(SHOP_STATUS);
log.info("获取营业状态: {}",status == 1 ? "营业中" : "打烊中");
return Result.success(status);
}
}
doc.html 管理端,用户端