成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

redis整合springboot的helloworld

xiaoxiaozi / 1288人閱讀

摘要:喜歡在內(nèi)存操作,比在磁盤(pán)瞎忙高效多了,因此深受人們喜愛(ài)。數(shù)據(jù)結(jié)構(gòu)有五種數(shù)據(jù)結(jié)構(gòu)字符串哈希列表集合最常用的就是類(lèi)型,通常使用它做緩存,減輕直接訪問(wèn)數(shù)據(jù)庫(kù)的壓力。的話可以用來(lái)做用戶,可以用來(lái)做粉絲列表,的話可以做共同好友,可以做排行榜。

引入依賴
 compile "org.springframework.boot:spring-boot-starter-data-redis"

使用redis有兩種方法

1.Jedis

Jedis jedis = new Jedis("localhost");

2.RedisTemplate

@Autowired
private RedisTemplate redisTemplate;

如果使用RedisTemplate的話,要在application.properties中配置信息,這里我使用Jedis比較簡(jiǎn)單

redis的自動(dòng)配置

在application.properties文件下

#redis的springboot的自動(dòng)配置
# Redis數(shù)據(jù)庫(kù)索引(默認(rèn)為0)
spring.redis.database=0
# Redis服務(wù)器地址
spring.redis.host=127.0.0.1
# Redis服務(wù)器連接端口
spring.redis.port=6379  
# Redis服務(wù)器連接密碼(默認(rèn)為空)
spring.redis.password=
# 連接池最大連接數(shù)(使用負(fù)值表示沒(méi)有限制)
spring.redis.pool.max-active=8  
# 連接池最大阻塞等待時(shí)間(使用負(fù)值表示沒(méi)有限制)
spring.redis.pool.max-wait=-1  
# 連接池中的最大空閑連接
spring.redis.pool.max-idle=8  
# 連接池中的最小空閑連接
spring.redis.pool.min-idle=0  
# 連接超時(shí)時(shí)間(毫秒)
spring.redis.timeout=0
Jedis使用
package com.test.booleanjava.helloRS.util;

import redis.clients.jedis.Jedis;

/**
 * @author booleanjava
 * Date: 2019/7/2 19:48
 * description:redis的工具類(lèi)
 */
public class RedisUtil {
    static Jedis jedis = new Jedis("localhost");

    /**
     * 插入key,如果存在就更新
     * @param key
     * @param value
     * @return
     */
    public static   String set(String key, String value){
        return  jedis.set(key, value);
    }

    /**
     * 獲取key的值
     * @param key
     * @return
     */
    public static String get(String key) {
        return jedis.get(key);
    }

    /**
     * 刪除key
     * @param key
     * @return
     */
    public static Long del(String key){
        return jedis.del(key);
    }

    /**
     * 設(shè)置一個(gè)有過(guò)期時(shí)間的key(秒)
     * @param key
     * @param seconds
     * @param value
     * @return
     */
    public static String setex(final String key, final int seconds, final String value){
        return jedis.setex(key, seconds, value);
    }

    /**
     * 如果不存在就執(zhí)行操作,用作簡(jiǎn)單分布式鎖
     *
     * @param key
     * @param value
     * @return true表示執(zhí)行,false表示沒(méi)有執(zhí)行
     */
    public static Boolean setnx(final String key, final String value){
        return jedis.setnx(key, value) == 1;
    }

}
RedisTemplates使用
package com.test.booleanjava.helloRS.util;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

/**
 * @author boolean
 * Date: 2019/7/2 19:48
 * description:
 */

@Component
public class Redisplus {

    @Autowired
    private  RedisTemplate redisTemplate;

    public  void set(String key, String value){
        redisTemplate.opsForValue().set(key, value);

    }
}
測(cè)試
package com.test.booleanjava.helloRS.controller;


import com.test.booleanjava.helloRS.entity.User;
import com.test.booleanjava.helloRS.util.Redisplus;
import com.test.booleanjava.helloRS.service.IUserService;
import com.test.booleanjava.helloRS.util.RedisUtil;
import com.test.base.core.util.LogUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;

/**
 * @author booleanjava
 * Date: 2019/7/2 19:48
 * description:
 */
@RestController
@RequestMapping("/helloRS/redisHello")
public class RedisHello {
    private final static Logger logger = LoggerFactory.getLogger(RedisHello.class);

    private final static String USERKEY = "com.test.booleanjava.helloRS.controller.setex";
    private final static String LOCKKEY = "com.test.booleanjava.helloRS.controller.lock";


    @Autowired
    private IUserService iUserService;

    @Autowired
    private Redisplus redisplus;

    @Autowired
    private RedisTemplate redisTemplate;
    RedisSerializer redisSerializer =new StringRedisSerializer();

    @RequestMapping("/hello")
    public String  hello(){
        LogUtil.info("redis的展示:[{}]", redisTemplate);
        return "hello, redis";
    }

    @RequestMapping("/set")
    public String  set(){
        Date date = new Date();
        redisTemplate.setKeySerializer(redisSerializer);
        redisTemplate.opsForValue().set("q", "1");
        redisTemplate.opsForValue().get("q");
        System.out.println(redisTemplate.opsForValue().get("q"));
        RedisUtil.set("a1", String.valueOf(1));
        logger.info("redis的展示:[{}]", redisTemplate);
        return "hello, set一下redis";
    }

    @RequestMapping("/setex")
    public String setex( ){
//        String key = "1min";
//        int seconds = 10;
//        String value = "陳";
//        RedisUtil.setex(key, seconds, value);
//        String rs = RedisUtil.get(key);
//        logger.info("獲取的值:[{}]", rs);
        String value = RedisUtil.get(USERKEY);
        if (value != null) {
            logger.info("緩存的user值:[{}]", value);
            return value;
        }
        User user = iUserService.query().eq("name", "chen").one();
        logger.info("user的值:[{}]",user.toString());
        if (user != null ) {
            RedisUtil.setex(USERKEY, 60, user.toString());
        }
        return "hello,booleanjava,設(shè)置了有時(shí)限的key";
    }

    @RequestMapping("/del")
    public String del(String key) {
        redisTemplate.delete(key);
        return "hello, del一下redis";
    }

    /**
     * 做分布鎖,
     *先加鎖,寫(xiě)業(yè)務(wù),最后解鎖
     * @return
     */
    @RequestMapping("/lock")
    public String lock() {
        //加鎖
        RedisUtil.setnx(LOCKKEY,LOCKKEY);
        //寫(xiě)業(yè)務(wù)代碼,一人我飲酒醉

        //解鎖
        RedisUtil.del(LOCKKEY);

        return "hello, lock一下redis";
    }
}
源碼

https://github.com/blackdogss...

深入 背景

互聯(lián)網(wǎng)公司大部分通常使用myslq作為數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù),但是mysql存數(shù)據(jù)是以影響IO為代價(jià)的,所以mysql是系統(tǒng)的常見(jiàn)瓶頸,為解決這個(gè)問(wèn)題,redis這種非關(guān)系型數(shù)據(jù)庫(kù)就出現(xiàn)了,存在即合理。redis喜歡在內(nèi)存操作,比mysql在磁盤(pán)瞎忙高效多了,因此深受人們喜愛(ài)。

數(shù)據(jù)結(jié)構(gòu)

redis有五種數(shù)據(jù)結(jié)構(gòu)

1.String 字符串

2.Hash哈希

3.List列表

4.Set集合

5.Sorted Set

最常用的就是String類(lèi)型,通常使用它做緩存,減輕直接訪問(wèn)數(shù)據(jù)庫(kù)的壓力。Hash的話可以用來(lái)做用戶id,List可以用來(lái)做粉絲列表,Set的話可以做共同好友,Sorted Set可以做排行榜。

分布式鎖

redis處理上面列舉的例子,還有就是可以做分布式鎖,在分布式系統(tǒng)中,接口面臨的是多進(jìn)程多線程訪問(wèn),如果依賴java的鎖是不能解決問(wèn)題的,因?yàn)檫M(jìn)程之間不共享內(nèi)存;利用數(shù)據(jù)庫(kù)加鎖又顯得笨重,因此還得用redis來(lái)加鎖。redis怎么加鎖,主要還是利用setnx命令,該命令作用是如果key存在就不執(zhí)行操作,不存在的話就設(shè)置value,這種特性就是為鎖打造的啊。

公眾號(hào)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/75225.html

相關(guān)文章

  • Spring Boot 《一》開(kāi)發(fā)一個(gè)“HelloWorld web 應(yīng)用

    摘要:一概括,如果使用開(kāi)發(fā)一個(gè)的應(yīng)用創(chuàng)建一個(gè)項(xiàng)目并且導(dǎo)入相關(guān)包。創(chuàng)建一個(gè)編寫(xiě)一個(gè)控制類(lèi)需要一個(gè)部署應(yīng)用的服務(wù)器如,特點(diǎn)設(shè)計(jì)目的是用來(lái)簡(jiǎn)化新應(yīng)用的初始搭建以及開(kāi)發(fā)過(guò)程。啟動(dòng)器可以和位于同一個(gè)包下,或者位于的上一級(jí)包中,但是不能放到的平級(jí)以及子包下。 一,Spring Boot 介紹 Spring Boot不是一個(gè)新的框架,默認(rèn)配置了多種框架使用方式,使用SpringBoot很容易創(chuàng)建一個(gè)獨(dú)立運(yùn)...

    chaosx110 評(píng)論0 收藏0
  • SpringBoot非官方教程 | 第九篇: SpringBoot整合Redis

    摘要:經(jīng)過(guò)上述兩步的操作,你可以訪問(wèn)數(shù)據(jù)了。數(shù)據(jù)訪問(wèn)層通過(guò)來(lái)訪問(wèn)分鐘過(guò)期單元測(cè)試啟動(dòng)單元測(cè)試,你發(fā)現(xiàn)控制臺(tái)打印了單元測(cè)試通過(guò)源碼下載參考資料 這篇文章主要介紹springboot整合redis 引入依賴 在pom文件中添加redis依賴: org.springframework.boot spring-boot-starter-data-redis 配置數(shù)據(jù)源 spri...

    csRyan 評(píng)論0 收藏0
  • 【Spring Boot】Spring Boot——HelloWorld

    摘要:使用嵌入式容器,應(yīng)用無(wú)需達(dá)成包。自動(dòng)依賴與版本控制。準(zhǔn)生產(chǎn)環(huán)境的運(yùn)行時(shí)應(yīng)用監(jiān)控。告訴開(kāi)啟自動(dòng)配置功能,這樣自動(dòng)配置才能生效。其組成為為的底層注解,表明給容器中導(dǎo)入一個(gè)組件,導(dǎo)入的組建由類(lèi)提供。 Spring Boot——入門(mén) spring boot簡(jiǎn)化了spring的開(kāi)發(fā),是J2EE一站式解決方案。 Spring Boot 的優(yōu)缺點(diǎn) 優(yōu)點(diǎn) 快速創(chuàng)建獨(dú)立運(yùn)行的服務(wù),與主流框架集成。 使...

    hellowoody 評(píng)論0 收藏0
  • 兩年了,我寫(xiě)了這些干貨!

    摘要:開(kāi)公眾號(hào)差不多兩年了,有不少原創(chuàng)教程,當(dāng)原創(chuàng)越來(lái)越多時(shí),大家搜索起來(lái)就很不方便,因此做了一個(gè)索引幫助大家快速找到需要的文章系列處理登錄請(qǐng)求前后端分離一使用完美處理權(quán)限問(wèn)題前后端分離二使用完美處理權(quán)限問(wèn)題前后端分離三中密碼加鹽與中異常統(tǒng)一處理 開(kāi)公眾號(hào)差不多兩年了,有不少原創(chuàng)教程,當(dāng)原創(chuàng)越來(lái)越多時(shí),大家搜索起來(lái)就很不方便,因此做了一個(gè)索引幫助大家快速找到需要的文章! Spring Boo...

    huayeluoliuhen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<