从零搭建一个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、下载安装包

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

2、编译redis

  1. cd /www/redis/redis/ 
  2. make MALLOC=libc 
  3. make PREFIX=/usr/local/redis install 

3、准备配置文件

  1. cd /usr/local/redis 
  2. mkdir conf 
  3. cd conf/ 
  4. vi redis_6379.conf 

配置文件内容如下:

  1. bind 127.0.0.1 
  2. protected-mode no 
  3. port 6379 
  4. tcp-backlog 511 
  5. timeout 0 
  6. tcp-keepalive 300 
  7. daemonize yes 
  8. supervised no 
  9. pidfile /www/redis/data/redis/6379/redis_6379.pid 
  10. loglevel notice 
  11. logfile "/www/redis/data/redis/6379/log.log" 
  12. databases 16 
  13. always-show-logo yes 
  14. save 900 1 
  15. save 300 10 
  16. save 60 10000 
  17. stop-writes-on-bgsave-error yes 
  18. rdbcompression yes 
  19. rdbchecksum yes 
  20. dbfilename dump.rdb 
  21. dir /www/redis/data/redis/6379/ 
  22. slave-serve-stale-data yes 
  23. slave-read-only yes 
  24. repl-diskless-sync no 
  25. repl-diskless-sync-delay 5 
  26. repl-disable-tcp-nodelay no 
  27. slave-priority 100 
  28. lazyfree-lazy-eviction no 
  29. lazyfree-lazy-expire no 
  30. lazyfree-lazy-server-del no 
  31. slave-lazy-flush no 
  32. appendonly yes 
  33. appendfilename "appendonly.aof" 
  34. appendfsync everysec 
  35. no-appendfsync-on-rewrite no 
  36. auto-aof-rewrite-percentage 100 
  37. auto-aof-rewrite-min-size 64mb 
  38. aof-load-truncated yes 
  39. aof-use-rdb-preamble no 
  40. lua-time-limit 5000 
  41. slowlog-log-slower-than 10000 
  42. slowlog-max-len 128 
  43. latency-monitor-threshold 0 
  44. notify-keyspace-events "" 
  45. hash-max-ziplist-entries 512 
  46. hash-max-ziplist-value 64 

4、启动服务

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

5、使用客户端链接

  1. ./redis-cli 

判断是否启动成功

「建议收藏」手把手教你从零搭建一个redis服务

6、使用

查看数据

  1. keys * 

设置值

  1. set oneKey 测试 

获取值

  1. get oneKey 
「建议收藏」手把手教你从零搭建一个redis服务

二、安装中的碰到的问题和解决办法

问题一:

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

临时解决办法:

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

永久解决办法

  1. vi /etc/sysctl.conf 
「建议收藏」手把手教你从零搭建一个redis服务

在里面添加net.core.somaxconn= 1024 然后执行sysctl -p 就可以永久消除这个warning

「建议收藏」手把手教你从零搭建一个redis服务

问题二:

  1. 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服务

可以参考问题一的解决

问题三:

  1. 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

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

  1. vi /etc/rc.local 

三、怎么在代码中使用安装的redis呢

需要引用的jar包有

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

示例代码

  1. public static void main(String[] args) { 
  2.  //创建redis对象 
  3.  String ip = ""; 
  4.  Jedis jedis=new Jedis(ip,6379);//链接redis 
  5.  //记录操作个数 
  6.  jedis.set("name", "小明"); 
  7.  System.out.println("name已经赋值"); 
  8.  String name = jedis.get("name"); 
  9.  System.out.println("赋值后获取name的值为:"+name); 
  10.  jedis.del("name"); 
  11.  System.out.println("name已经删除"); 
  12.  String nameT = jedis.get("name"); 
  13.  System.out.println("删除后获取name的值为:"+nameT);  
  14.  } 
  15. //结果 
  16. name已经赋值 
  17. 赋值后获取name的值为:小明 
  18. name已经删除 
  19. 删除后获取name的值为:null 

四、设置用户名和密码

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

2、通过命令添加

设置密码

  1. #设置密码 
  2. config set requirepass 123456 
「建议收藏」手把手教你从零搭建一个redis服务

查看密码

  1. config get requirepass 

需要验证密码以后才可以查看

「建议收藏」手把手教你从零搭建一个redis服务

测试代码

  1.  public static void main(String[] args) { 
  2.  //创建redis对象 
  3.  String ip = ""; 
  4.  Jedis jedis=new Jedis(ip,6379);//链接redis 
  5.  jedis.auth("123456"); 
  6.  //记录操作个数 
  7.  jedis.set("name", "小明"); 
  8.  System.out.println("name已经赋值"); 
  9.  String name = jedis.get("name"); 
  10.  System.out.println("赋值后获取name的值为:"+name); 
  11.  jedis.del("name"); 
  12.  System.out.println("name已经删除"); 
  13.  String nameT = jedis.get("name"); 
  14.  System.out.println("删除后获取name的值为:"+nameT); 
  15.   
  16.  } 
  17.  #结果 
  18. name已经赋值 
  19. 赋值后获取name的值为:小明 
  20. name已经删除 
  21. 删除后获取name的值为:null 

五、应用中碰到的问题

链接被拒绝或者超时问题

「建议收藏」手把手教你从零搭建一个redis服务

redis刚开始配置的ip是默认ip和端口127.0.0.1:6379,这个ip只能服务的本地进行链接。解决办法:

在配置文件中把这个ip给注释

「建议收藏」手把手教你从零搭建一个redis服务

在阿里云中配置安全组

修改好配置文件和安全组以后,可以通过阿里云服务的外网ip和redis的端口访问。

但是呢,又报一个问题,保护模式下拒绝访问

「建议收藏」手把手教你从零搭建一个redis服务

根据提示修改配置文件redis_6379.conf中属性protected-mode no,并重启服务

再次测试代码连接正常~

【编辑推荐】

posted @ 2019-08-26 10:27  gujob  阅读(2724)  评论(0编辑  收藏  举报