栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

redis中间件

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

redis中间件

文章目录
    • 作用
        • 1.替mysql分担责任
        • 2.保证线程安全
        • 3.作为消息队列
    • 数据类型
        • 1.字符型
        • 2.哈希值
        • 3.List集合
        • 4.set集合
        • 5. zset
    • java代码实现
        • 1.集成springboot
    • 服务端搭建模式
    • 使用过程中可能产生的一些问题
        • 1. 无法替mysql承担责任
            • 1 缓存穿透:
            • 2. 缓存击穿: mysql也没有数据
        • 2. 无用数据堆满了,导致新的数据进不来
        • 3. redis本身出问题了,导致数据丢失

作用 1.替mysql分担责任

1.由于mysql支持的并发访问数是有限的,所以mysql撑不起来的并发让redis承担一部分
2.数据从mysql中拿取要走磁盘io操作加载到内存,而redis直接把数据放到内存,提高响应时间

2.保证线程安全

要保证不同的进程上的线程安全问题,就要使用到一个脱离进程本身的第三方的同步控制,这是就用到了redis。synchronized只能保证同一个java进程下线程的同步。思想是由一个线程设置一个key,处理完业务逻辑后把key删掉。处理过程中其他线程无法设置key成功,自然也就阻塞了。

RLock hello = redissonClient.getLock("hello");
        hello.lock();
        try {
            //业务处理
        }finally {
            hello.unlock();
        }
3.作为消息队列 数据类型

redis是按key-value存储数据,数据类型指的是value的类型,key都是字符型

1.字符型 2.哈希值 3.List集合 4.set集合 5. zset

每个集合都对应一种数据结构,这就是数据结构的重要性
**1.压缩链表:**满足条件为当元素个数在128个之内,每个字符串元素大小在64之内。

**2.跳表:**链表的升级版,链表可以跨节点指针存储,比如第一个节点可以访问第五个节点。

java代码实现

无论哪种实现第一步都是配置服务ip和端口:

spring.redis.host: 127.0.0.1

spring:
  redis:
    port: 6379
1.集成springboot
  @Autowired
    private StringRedisTemplate stringRedisTemplate;
    
        stringRedisTemplate.opsForValue().get("stock");
        stringRedisTemplate.opsForHash().get("","");
        stringRedisTemplate.opsForZSet();
        stringRedisTemplate.opsForSet();
        stringRedisTemplate.opsForList();
        
        //引入依赖

            org.springframework.boot
            spring-boot-starter-data-redis
            2.2.4.RELEASE
 ```


#### 2 redisson

```java
@Configuration
@Slf4j
public class RedissonConfig extends CachingConfigurerSupport {
    @Value("${spring.redis.host}")
    private String host;
    @Value("${spring.redis.port}")
    private int port;
    @Bean
    public RedissonClient getRedisson() {
        Config config = new Config();
        config.useSingleServer().setAddress("redis://" + host + ":" + port);
        return Redisson.create(config);
    }
}

//在主类中使用客户端对象
  @Autowired
    private RedissonClient redissonClient;
    redissonClient.getList(" ");``


服务端搭建模式 使用过程中可能产生的一些问题 1. 无法替mysql承担责任 1 缓存穿透:

mysql里有数据,同时期望redis里也有数据,但是redis没有,大量请求打到mysql导致mysql可能撑不住。
***解决:***在第一个请求到mysql查询时把数据往redis里存一份,这里为什么要在加锁之后再做一次判断呢,因为如果不加其他请求即使在mysql把数据同步到redis后还是会走mysql。

String custom = stringRedisTemplate.opsForValue().get("custom");
        if(custom==null){
            hello.lock();
            if( stringRedisTemplate.opsForValue().get("custom")==null){
                //sql查询
                //往redis设置一份
            }else {
                stringRedisTemplate.opsForValue().get("custom");
            }
           
        }
2. 缓存击穿: mysql也没有数据 2. 无用数据堆满了,导致新的数据进不来 3. redis本身出问题了,导致数据丢失
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/826607.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号