「建議收藏」手把手教你從零搭建一個redis服務

「建議收藏」手把手教你從零搭建一個redis服務


前言

自己在搭建redis服務的時候碰到一些問題,好多人只告訴你怎麼成功搭建,但是並沒有整理過程中遇到的問題,所有樓主就花了點時間來整理下。

  • linux環境安裝redis
  • 安裝中的碰到的問題和解決辦法
  • 怎麼在代碼中使用安裝的redis
  • 設置用戶名和密碼
  • 程序應用中碰到的問題


介紹

redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數據都是緩存在內存中。區別的是redis會週期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步。

Redis 是一個高性能的key-value數據庫。 redis的出現,很大程度補償了memcached這類key/value存儲的不足,在部 分場合可以對關係數據庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便。

一、安裝redis

1、下載安裝包

cd /www/redis/
wget http://download.redis.io/releases/redis-4.0.8.tar.gz
tar -zxvf redis-4.0.8.tar.gz
mv redis-4.0.8 redis


2、編譯redis

cd /www/redis/redis/
make MALLOC=libc
make PREFIX=/usr/local/redis install


3、準備配置文件

cd /usr/local/redis
mkdir conf
cd conf/
vi redis_6379.conf


配置文件內容如下:

bind 127.0.0.1
protected-mode no
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /www/redis/data/redis/6379/redis_6379.pid
loglevel notice
logfile "/www/redis/data/redis/6379/log.log"
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /www/redis/data/redis/6379/
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
slave-lazy-flush no
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble no
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128

latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64


4、啟動服務

mkdir -p /www/redis/data/redis/6379/
cd ../bin/
./redis-server ../conf/redis_6379.conf


5、使用客戶端鏈接

./redis-cli

判斷是否啟動成功

「建議收藏」手把手教你從零搭建一個redis服務


6、使用

查看數據

keys *

設置值

 set oneKey 測試

獲取值

get oneKey
「建議收藏」手把手教你從零搭建一個redis服務


二、安裝中的碰到的問題和解決辦法

問題一:

WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.


「建議收藏」手把手教你從零搭建一個redis服務


臨時解決辦法:

echo 511 > /proc/sys/net/core/somaxconn

永久解決辦法

vi /etc/sysctl.conf


「建議收藏」手把手教你從零搭建一個redis服務


在裡面添加net.core.somaxconn= 1024 然後執行sysctl -p 就可以永久消除這個warning

「建議收藏」手把手教你從零搭建一個redis服務

問題二:

WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.


「建議收藏」手把手教你從零搭建一個redis服務


可以參考問題一的解決

問題三:

WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled


「建議收藏」手把手教你從零搭建一個redis服務


執行命令echo never>/sys/kernel/mm/transparent hugepage/enabled

永久解決添加配置文件即可

vi /etc/rc.local


「建議收藏」手把手教你從零搭建一個redis服務



三、怎麼在代碼中使用安裝的redis呢

需要引用的jar包有

commons-pool-1.6.jar
jedis-2.9.0.jar

示例代碼

 public static void main(String[] args) {
//創建redis對象
String ip = "";
Jedis jedis=new Jedis(ip,6379);//鏈接redis
//記錄操作個數
jedis.set("name", "小明");
System.out.println("name已經賦值");
String name = jedis.get("name");
System.out.println("賦值後獲取name的值為:"+name);
jedis.del("name");
System.out.println("name已經刪除");
String nameT = jedis.get("name");
System.out.println("刪除後獲取name的值為:"+nameT);
}
//結果
name已經賦值
賦值後獲取name的值為:小明
name已經刪除
刪除後獲取name的值為:null

四、設置用戶名和密碼

1、在配置文件中redis_6379.conf直接添加requirepass 123456

2、通過命令添加

設置密碼

#設置密碼
config set requirepass 123456


「建議收藏」手把手教你從零搭建一個redis服務


查看密碼

config get requirepass

需要驗證密碼以後才可以查看

「建議收藏」手把手教你從零搭建一個redis服務

測試代碼

 public static void main(String[] args) {
//創建redis對象
String ip = "";
Jedis jedis=new Jedis(ip,6379);//鏈接redis
jedis.auth("123456");
//記錄操作個數
jedis.set("name", "小明");
System.out.println("name已經賦值");
String name = jedis.get("name");
System.out.println("賦值後獲取name的值為:"+name);

jedis.del("name");
System.out.println("name已經刪除");
String nameT = jedis.get("name");
System.out.println("刪除後獲取name的值為:"+nameT);

}
#結果
name已經賦值
賦值後獲取name的值為:小明
name已經刪除
刪除後獲取name的值為:null

五、應用中碰到的問題

鏈接被拒絕或者超時問題


「建議收藏」手把手教你從零搭建一個redis服務


redis剛開始配置的ip是默認ip和端口127.0.0.1:6379,這個ip只能服務的本地進行鏈接。解決辦法:

在配置文件中把這個ip給註釋


「建議收藏」手把手教你從零搭建一個redis服務


在阿里雲中配置安全組

「建議收藏」手把手教你從零搭建一個redis服務

修改好配置文件和安全組以後,可以通過阿里雲服務的外網ip和redis的端口訪問。

但是呢,又報一個問題,保護模式下拒絕訪問


「建議收藏」手把手教你從零搭建一個redis服務


根據提示修改配置文件redis_6379.conf中屬性protected-mode no,並重啟服務


「建議收藏」手把手教你從零搭建一個redis服務


再次測試代碼連接正常~

關注公眾號“莫非技術棧”可以免費領取學習資料哦~


分享到:


相關文章: