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个,各自隔离
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 {@Autowiredprivate RedisTemplate redisTemplate;@Testpublic 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();}@Testpublic void test_redis_String(){//set get setex setnxValueOperations 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"));}@Testpublic void test_redis_hash(){//hset hget hdel hkeys hvalsHashOperations 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);}@Testpublic void test_redis_list() {//lpush lrange rpop llenListOperations 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);}@Testpublic void test_redis_set(){//sadd smembers scard sinter sunion sremSetOperations 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");}@Testpublic void test_redis_zset(){//zadd zrange zincrby zremZSetOperations 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);}@Testpublic void test_redis_Common(){//keys exists del typeSet 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)
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";@Autowiredprivate 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 管理端,用户端