苍穹外卖day4 redis相关简单知识 店铺营业状态设置
内存存储 键值对 key-value 一般用于处理突发性大量请求数据操作(暂时浅显理解)
读写速度极快,常用于缓存数据,减少对数据库的访问压力,提高系统性能。例如,可以缓存用户会话、商品信息、页面数据
设置默认密码123456
Redis五种常见数据类型
哈希结构可以存对象及其属性 集合可以用来查询公共元素 让我联系到并查集的内容
有序集合zset/sorted set 可用来做排行榜
不同于MYSQL Redis操作需要判断当前数据类型 再执行特定操作命令
setex key second value 短信验证码
setnx key value 只有在key不存在时设置key的值 会在分布式锁涉及
哈希操作命令
列表操作命令 按照插入顺序排序
> lrange mylist 0 -1 从栈头到栈尾 e d c b a
> lpop mylist e
> rpop mylist a
集合操作命令 Redis集合是无序集合且不能重复出现相同元素
有序集合操作
了解类知识 接下来要部署在java项目里
原理上还是用上述语句 pom.xml配置 再创建RedisConfig配置类 在yml文件里构建redis关联
实现语句 如下 换汤不换药系列
@Configuration
@Slf4j
public class RedisConfiguration {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
RedisTemplate redisTemplate = new RedisTemplate();
//设计redis连接工厂对象
redisTemplate.setConnectionFactory(redisConnectionFactory);
//设置redis key的序列化器 避免显示乱码
redisTemplate.setKeySerializer(new StringRedisSerializer());
return redisTemplate;
}
}
在yml文件里配置redis
redis:
host: localhost
port: 6379
password: 123456
database: 0
@SpringBootTest
public class SpringDataRedisTest {
@Autowired
private RedisTemplate redisTemplate;
@Test
public void RedistTemplateTest(){
System.out.println(redisTemplate);
HashOperations hashOperations = redisTemplate.opsForHash();
ListOperations listOperations = redisTemplate.opsForList();
SetOperations setOperations = redisTemplate.opsForSet();
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
ValueOperations valueOperations = redisTemplate.opsForValue();
}
/**
* 操作字符串类型数据
*/
@Test
public void TestString(){
//set get setex setnx
redisTemplate.opsForValue().set("city","西安");
String city = (String) redisTemplate.opsForValue().get("city");
System.out.println(city);
redisTemplate.opsForValue().set("code","1234",3, TimeUnit.MINUTES);
redisTemplate.opsForValue().setIfAbsent("lock","1");
redisTemplate.opsForValue().setIfAbsent("lock","2");
}
/**
* 操作哈希类型数据
*/
@Test
public void TestHash(){
//hset hget hdel hkeys hvals
HashOperations hashOperations = redisTemplate.opsForHash();
hashOperations.put("1000","name","tom");
hashOperations.put("1000","age","20");
String name = (String) hashOperations.get("1000", "name");
System.out.println(name);
Set keys = hashOperations.keys("1000");
System.out.println(keys);
List values = hashOperations.values("1000");
System.out.println(values);
hashOperations.delete("1000","age");
}
/**
* 操作列表类型的数据
*/
@Test
public void testlist(){
//lpush lrange rpop llen
ListOperations listOperations = redisTemplate.opsForList();
listOperations.leftPushAll("mylist", "a", "b", "c");
listOperations.leftPush("mylist", "d");
List mylist = listOperations.range("mylist", 0, -1);
System.out.println(mylist);
listOperations.rightPop("mylist");
Long size = listOperations.size("mylist");
System.out.println(size);
}
/**
* 操作集合类型的数据
*/
@Test
public void testSet(){
//sadd smembers scard sinter sunion srem
SetOperations setOperations = redisTemplate.opsForSet();
setOperations.add("set1", "a", "b", "c", "d");
setOperations.add("set2", "a", "b", "x", "y");
Set members = setOperations.members("set1");
System.out.println(members);
Long size = setOperations.size("set1");
System.out.println(size);
Set intersect = setOperations.intersect("set1", "set2");
System.out.println(intersect);
Set union = setOperations.union("set1", "set2");
System.out.println(union);
setOperations.remove("set1", "a", "b");
}
/**
* 操作有序集合类型的数据
*/
@Test
public void testZset(){
//zadd zrange zincrby zrem
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
zSetOperations.add("zset1", "a", 10);
zSetOperations.add("zset1", "b", 12);
zSetOperations.add("zset1", "c", 9);
Set zset1 = zSetOperations.range("zset1", 0, -1);
System.out.println(zset1);
zSetOperations.incrementScore("zset1", "c", 10);
zSetOperations.remove("zset1", "a", "b");
}
/**
* 通用命令操作
*/
@Test
public void testCommon(){
//keys exists type del
Set keys = redisTemplate.keys("*");
System.out.println(keys);
Boolean name = redisTemplate.hasKey("name");
Boolean set1 = redisTemplate.hasKey("set1");
for (Object key : keys) {
DataType type = redisTemplate.type(key);
System.out.println(type.name());
}
redisTemplate.delete("mylist");
}
店铺营业状态设置
这里用到redis来存储当前营业状态为1(营业)还是0(未营业)
要在控制层里创建用户端和管理端 所以要创建两个ShopController 在WebMVCconfigragtion里
设置两个Docker 分别管理 用户端和管理端
随记
有点焦虑了 现在好像redis mq 和 这个项目还没敲完 也没学 啊 好麻烦 还是得学 ! 提高效率!