苍穹外卖-Redis配置(十)

mysql和redis共存,并不是redis取代mysql,而是对mysql的一个补充


**热点数据**一般用于访问量过大的时候,提高我们的读写性能
抢购、秒杀、资讯、新闻、热点商品

这个conf是修改配置端口号的,平时不用动
默认是没密码的,为了安全可以修改conf
requirepass 123456即可设置密码
启动客户端
redis-cli.exe -h localhost -p 6379 -a 123456    //这样就输入密码了,redis不用输入用户名 
exit命令退出客户端
**启动方式**
redis-server.exe redis.windows.conf
**结束**
结束也很简单,直接ctrl+c就ok了

1、导入依赖Maven坐标
spring-boot-starter-data-redis
2、配置数据源
spring:
redis:
  host: localhost
  port:6379
  password:123456
  database:10    #第几个数据库、默认是0
3、创建redis配置类
@Configuration
@Slf4j
public class RedisConfiguration {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
        log.info("创建redis模板对象");
        RedisTemplate redisTemplate = new RedisTemplate();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置redis key的序列化器
        //这里要序列化,否则redis客户端会出现乱码
        redisTemplate.setKeySerializer(new StringRedisSerializer());

        return redisTemplate;
    }
}
**关于四大类型**
ValueOperations valueOperations = new redisTemplate.opsForValue();
Hash\List\Set\Zset

获取逻辑层Redis的Bean 
@Autowired
private RedisConfiguration  redisConfiguration; 
**一、字符串类型**
```
//字符串对应的方法如下
//方法为:set、get、setex、setnx这里setex也还是set,setnx对应的是setIfAbsent
//setex表示set设定一个有效期
//这里setnx一般作为创建的方法,而不能用做修改、
//也就是这个key不存在的时候可以set可以setnx
//故set键值对,这个键不存在,方法set成功,若不存在则set失败

redisTemplate.opsForValue().set("city","北京");
String city = (String)redisTemplate.opsForValue().get("city");
redisTemplate.opsForValue().set("code","1234","3",TimeUnit.MINUTES);
```
**二、哈希类型**
```
H哈希对应的方法为hset、hget、hdel、hkeys、hvals
HashOperations hashOperations = new redisTemplate.opsForHash();
hashOperations.put("100","name","tom");
hashOperations.put("100","age","20");

hashOperations.get("100","name");

//会返回一个set集合,获得所有的key
Set keys = hashOperations.keys("100");
//获取所有的value
List values = hashOperations.values("100");

hashOperations.delete("100","name");

这里的key有两个概念,一个是redis的key,一个是哈希表的key、如果没有设置密码,就把配置文件中的密码注释掉
```
**三、List方法**

```
List方法包括lpush、lrange、rpop、llen
同样List中有key、
ListOperations listOperations = new redisTemplate.opsForList();
listOperations.leftPushAll("mylist","a","b","c");
//插入后的顺序为倒序
listOperations.leftPush("mylist","d");

List mylist = listOperations.range("mylist","0","-1");
//从右侧移除元素
listOperations.rightPop("mylist");
Long size = listOperation.size("mylist");
```
**四、Set集合类的方法**
```
sadd、smembers、scard、sinter、sunion、srem分别对应为
add(“set1”,"a","b","c")//添加元素
members("set1")//展示所有元素,返回一个Set集合、
size返回Long也就是集合的个数
intersect获得两个集合交集
union获得集合并集
remove删除集合中的元素

```
**五、Zset有序集合类的方法**顺序好像是由大到小的
```
 ZSetOperations zSetOperations = redisTemplate.opsForZSet();
        //zadd      zrange      zincrby     zrem
        
        zSetOperations.add("zset1","a",10);
        zSetOperations.add("zset1","b",11);
        zSetOperations.add("zet1","c",9);

        Set zset1 = zSetOperations.range("zset1", 0, -1);
        System.out.println(zset1);

        //zincrby       为某个集合的元素加上多少分score
        zSetOperations.incrementScore("zset1","c",10);

        //zrem
        zSetOperations.remove("zset1","a","b");

```
**六、通用命令操作**
```
 //这里就不像上面似的还要opsFor类型了
        //因为是通用命令,所以不用指定类型
        //keys  exits   type    del
        Set keys = redisTemplate.keys("*");
        System.out.println(keys);

        //exits检查某个key是否存在
        Boolean name = redisTemplate.hasKey("name");
        Boolean set1 = redisTemplate.hasKey("set1");

        //type查询一下某个key所对应的value什么类型的
        //这里key循环遍历所有的keys键
        for (Object key : keys){
            DataType type = redisTemplate.type(key);
            System.out.println(type.name());
            //这里返回具体他们都是什么类型的
        }

        //del       删除指定的key
        redisTemplate.delete("mylist");


    }
```

**关于缓存的操作**
这里缓存数据,list列表数据,例如菜品列表可以存入redis为字符串类型,标记字符串类型的key即可获取list
这里判空,若!=null && size()>0则redis查询到数据直接返回
1、直接查询redis
2、若不为空并且size>0
3、否则查询数据库,并存储进redis
**清理缓存**

1、修改数据库数据
2、删除数据库数据
3、启用或停用,都即时清缓存
4、新增

用名称+id的形式取名redis中的字符串值的key

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值