阿西吧,自己太菜了,用SpringBoot調用Redis緩存的時候,出了各種問題,記錄一下,大家別學我
本文有自己的經驗,也有從其他博客整理來的零零散散的經驗。
1、安裝Redis
安裝redis,一般有很多方法,比如yun安裝,npm安裝,直接壓縮包安裝,docker運行等等等等
先說yum裏面的
yum安裝比較簡單
首先安裝epel源
yum install -y epel-release
然後安裝redis
yum install -y redis
設置成開機自啓動
chkconfig redis on
卸載redis
yum remove redis
yum安裝的配置文件的位置
配置文件在/etc/redis.conf
服務器和客戶端在 /usr/bin/redis-server redis-cli
whereis redis 可以查看配置文件在哪
docker安裝
docker會用的話,應該很清晰,
docker search redis
docker pull 鏡像名
docker images 查看鏡像
docker 默認沒有配置文件,所以,默認使用問題很大
docekr 自定義配置文件啓動 https://www.jianshu.com/p/ff599cddc869
壓縮包安裝
來自菜鳥
**下載地址:**http://redis.io/download,下載最新穩定版本。
$ wget http://download.redis.io/releases/redis-2.8.17.tar.gz
$ tar xzf redis-2.8.17.tar.gz
$ cd redis-2.8.17
$ make
make完後 redis-2.8.17目錄下會出現編譯後的redis服務程序redis-server,還有用於測試的客戶端程序redis-cli,兩個程序位於安裝目錄 src 目錄下:
下面啓動redis服務.
$ cd src
$ ./redis-server
注意這種方式啓動redis 使用的是默認配置。也可以通過啓動參數告訴redis使用指定配置文件使用下面命令啓動。
$ cd src
$ ./redis-server ../redis.conf
redis.conf 是一個默認的配置文件。我們可以根據需要使用自己的配置文件。
默認使用的是redis目錄下的redis.conf文件,可以直接修改這個文件,也可以新建一個文件(這樣比較保險)
2、redis配置文件
這裏先不說高級配置
下面給了箇中文翻譯的配置文件(看不懂英文了可以看這個)
redis配置文件詳解https://www.jianshu.com/p/41f393f594e8
就最簡單的,讓你的本地程序能訪問遠程服務器上的redis
錯誤:無法鏈接redis,默認情況下,外網是沒辦法訪問redis的,需要修改配置
找到redis的配置文件 redis.conf
修改 protected-mode yes 改爲:protected-mode no
註釋掉 #bin 127.0.0.1
另外redis.conf中設置了密碼也會出現這種情況,註釋掉 #requirepass 這行
設置密碼兩種辦法:
原文https://www.cnblogs.com/tenny-peng/p/11543440.html
需要使用./redis-cli進入redis,
客戶端使用config get requirepass命令查看密碼
>config get requirepass
1)"requirepass"
2)"" //默認空
客戶端使用config set requirepass yourpassword命令設置密碼
>config set requirepass 123456
>OK
一旦設置密碼,必須先驗證通過密碼,否則所有操作不可用
>config get requirepass
(error)NOAUTH Authentication required
使用auth password驗證密碼
>auth 123456
>OK
>config get requirepass
1)"requirepass"
2)"123456"
另外一種辦法
- 配置文件設置密碼
在redis根目錄下找到redis.windows.conf配置文件,搜索requirepass,找到註釋密碼行,添加密碼如下:
# requirepass foobared
requirepass tenny //注意,行前不能有空格
重啓服務後,客戶端重新登錄後發現
>config get requirepass
1)"requirepass"
2)""
密碼還是空?
網上查詢後的辦法:創建redis-server.exe 的快捷方式, 右鍵快捷方式屬性,在目標後面增加redis.windows.conf, 這裏就是關鍵,你雖然修改了.conf文件,但是exe卻沒有使用這個conf,所以我們需要手動指定一下exe按照修改後的conf運行,就OK了。
所以,這裏我再一次重啓redis服務(指定配置文件)
>redis-server.exe redis.windows.conf
客戶端再重新登錄,OK了。
>redis-cli.exe -h 127.0.0.1 -p 6379 -a 123456
>config get requirepass
1)"requirepass"
2)"123456"
3、SpringBoot與Redis的坑
SpringBoot除去註解式的緩存外,還可以使用RedisTemplate來訪問
注意RedisTemplate是RedisAutoConfiguration中,在系統啓動時注入在系統中的Bean,所以我們使用需要引入
然後使用RedisTemplate獲取ValueOperations類,用此進行操作。
@Autowired
StringRedisTemplate stringRedisTemplate;
@Test
void redisTest(){
ValueOperations valueOperations=stringRedisTemplate.opsForValue();
valueOperations.set("456","465");
System.out.println(valueOperations.get("123"));
}
java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
這個看報錯信息你應該知道是缺少了類,認真看一下是缺少了一個依賴(想不到吧,只是redis的依賴還不夠)
引入依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>