前言

自己在搭建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

判断是否启动成功

6、使用

查看数据

  1. keys *

设置值

  1. set oneKey 测试

获取值

  1. get oneKey

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

问题一:

  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

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

问题二:

  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.

可以参考问题一的解决

问题三:

  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

执行命令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

查看密码

  1. config get requirepass

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

测试代码

  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. name已经赋值
  18. 赋值后获取name的值为:小明
  19. name已经删除
  20. 删除后获取name的值为:null

五、应用中碰到的问题

链接被拒绝或者超时问题

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

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

在阿里云中配置安全组

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

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

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

再次测试代码连接正常~

【编辑推荐】

从零搭建一个Redis服务的更多相关文章

  1. 适合新手:从零开发一个IM服务端(基于Netty,有完整源码)

    本文由“yuanrw”分享,博客:juejin.im/user/5cefab8451882510eb758606,收录时内容有改动和修订. 0.引言 站长提示:本文适合IM新手阅读,但最好有一定的网络 ...

  2. 从零搭建一个SpringCloud项目之Feign搭建

    从零搭建一个SpringCloud项目之Feign搭建 工程简述 目的:实现trade服务通过feign调用user服务的功能.因为trade服务会用到user里的一些类和接口,所以抽出了其他服务需要 ...

  3. 从零搭建一个IdentityServer——聊聊Asp.net core中的身份验证与授权

    OpenIDConnect是一个身份验证服务,而Oauth2.0是一个授权框架,在前面几篇文章里通过IdentityServer4实现了基于Oauth2.0的客户端证书(Client_Credenti ...

  4. 从零搭建一个IdentityServer——会话管理与登出

    在上一篇文章中我们介绍了单页应用是如何使用IdentityServer完成身份验证的,并且在讲到静默登录以及会话监听的时候都提到会话(Session)这一概念,会话指的是用户与系统之间交互过程,反过来 ...

  5. 从零搭建一个IdentityServer——资源与访问控制

    IdentityServer作为授权服务器它的最终目的是用于对资源进行管控,这里所说的资源有两种,其一是API资源,实际上也就是OIDC协议中客户端(RP)所需要访问的一系列受保护的资源(API),授 ...

  6. 搭建一个web服务下载HDFS的文件

    需求描述 为了能方便快速的获取HDFS中的文件,简单的搭建一个web服务提供下载很方便快速,而且在web服务器端不留临时文件,只做stream中转,效率相当高! 使用的框架是SpringMVC+HDF ...

  7. 利用OpenStreetMap(OSM)数据搭建一个地图服务

     http://www.cnblogs.com/LBSer/p/4451471.html 图 利用OSM数据简单发布的北京地图服务   一.OSM是什么 开放街道图(OpenStreetMap,简称O ...

  8. 通过express快速搭建一个node服务

    Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台.可以理解为是运行在服务端的 JavaScript.如果你是一个前端程序员,不太擅长像PHP.Python或Ruby等 ...

  9. 从零搭建一个IdentityServer——目录(更新中...)

    从零搭建一个IdentityServer--项目搭建 从零搭建一个IdentityServer--集成Asp.net core Identity 从零搭建一个IdentityServer--初识Ope ...

随机推荐

  1. 解决MarkDown打开出现:awesomium web-brower framework This view has crashed

    当在windows 8 以上操作系统安装markdown 的时候,可能会出现这样的错误 解决方法: 官网链接:http://markdownpad.com/faq.html#livepreview-d ...

  2. A*(A_star)搜索总结

    \(A^*(A star)\)搜索总结 标签:算法--搜索 阅读体验:https://zybuluo.com/Junlier/note/1299772 定义 先复制一则定义 \(A^*\)算法在人工智 ...

  3. Mysql共享锁、排他锁、悲观锁、乐观锁

    一.相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁定一行) |--共享锁(S锁,MyISAM 叫做读锁) |--排他锁(X锁,MyISAM 叫做写锁) |--间隙锁( ...

  4. NancyFx 2.0的开源框架的使用-ConstraintRouting

    新建一个空的Web项目 然后在Nuget库中安装下面两个包 Nancy Nancy.Hosting.Aspnet 然后在根目录添加三个文件夹,分别是models,Module,Views 然后往Mod ...

  5. Docker镜像恢复与迁移

    首先我们先删除掉 mycentos_new:1.1 镜像(注意先停止并删除所有引用了的容器) docker rmi mycentos_new:1.1 然后执行此命令进行恢复 mycentos_new: ...

  6. powerdesigner数据库设计

    (1)创建物理数据模型 打开PowerDesigner,然后点击File-->New  Model然后选择如下图所示的物理数据模型(物理数据模型的名字自己起,然后选择自己所使用的数据库即可) ( ...

  7. SSM中前台传数组。后台接受的问题

    当时写得时候,忘记考虑json的jar,做个记录. 第一步:先带入jar <dependency> <groupId>com.fasterxml.jackson.core< ...

  8. [SDOI2011]消防(贪心,图论,树的直径)

    [SDOI2011]消防 题目描述 某个国家有n个城市,这n个城市中任意两个都连通且有唯一一条路径,每条连通两个城市的道路的长度为zi(zi<=1000). 这个国家的人对火焰有超越宇宙的热情, ...

  9. kernel32.dll提供的接口分析

    HANDLE hToken = NULL; DWORD cursessionid; HMODULE hInstKernel32 = NULL; hInstKernel32 = LoadLibrary( ...

  10. bzoj5178 [Jsoi2011]棒棒糖 主席树+线段树二分

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=5178 https://lydsy.com/JudgeOnline/problem.php?id ...