自己在搭建redis服务的时候碰到一些问题,好多人只告诉你怎么成功搭建,但是并没有整理过程中遇到的问题,所有楼主就花了点时间来整理下。
[[274854]]
前言
自己在搭建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/
- wgethttp://download.redis.io/releases/redis-4.0.8.tar.gz
- tar-zxvfredis-4.0.8.tar.gz
- mvredis-4.0.8redis
2、编译redis
- cd/www/redis/redis/
- makeMALLOC=libc
- makePREFIX=/usr/local/redisinstall
3、准备配置文件
- cd/usr/local/redis
- mkdirconf
- cdconf/
- viredis_6379.conf
配置文件内容如下:
- bind127.0.0.1
- protected-modeno
- port6379
- tcp-backlog511
- timeout0
- tcp-keepalive300
- daemonizeyes
- supervisedno
- pidfile/www/redis/data/redis/6379/redis_6379.pid
- loglevelnotice
- logfile"/www/redis/data/redis/6379/log.log"
- databases16
- always-show-logoyes
- save9001
- save30010
- save6010000
- stop-writes-on-bgsave-erroryes
- rdbcompressionyes
- rdbchecksumyes
- dbfilenamedump.rdb
- dir/www/redis/data/redis/6379/
- slave-serve-stale-datayes
- slave-read-onlyyes
- repl-diskless-syncno
- repl-diskless-sync-delay5
- repl-disable-tcp-nodelayno
- slave-priority100
- lazyfree-lazy-evictionno
- lazyfree-lazy-expireno
- lazyfree-lazy-server-delno
- slave-lazy-flushno
- appendonlyyes
- appendfilename"appendonly.aof"
- appendfsynceverysec
- no-appendfsync-on-rewriteno
- auto-aof-rewrite-percentage100
- auto-aof-rewrite-min-size64mb
- aof-load-truncatedyes
- aof-use-rdb-preambleno
- lua-time-limit5000
- slowlog-log-slower-than10000
- slowlog-max-len128
- latency-monitor-threshold0
- notify-keyspace-events""
- hash-max-ziplist-entries512
- hash-max-ziplist-value64
4、启动服务
- mkdir-p/www/redis/data/redis/6379/
- cd../bin/
- ./redis-server../conf/redis_6379.conf
5、使用客户端链接
- ./redis-cli
判断是否启动成功
6、使用
查看数据
- keys*
设置值
- setoneKey测试
获取值
- getoneKey
二、安装中的碰到的问题和解决办法
问题一:
- WARNING:TheTCPbacklogsettingof511cannotbeenforcedbecause/proc/sys/net/core/somaxconnissettothelowervalueof128.
临时解决办法:
- echo511>/proc/sys/net/core/somaxconn
永久解决办法
- vi/etc/sysctl.conf
在里面添加net.core.somaxconn= 1024 然后执行sysctl -p 就可以永久消除这个warning。
问题二:
- WARNINGovercommit_memoryissetto0!Backgroundsavemayfailunderlowmemorycondition.Tofixthisissueadd'vm.overcommit_memory=1'to/etc/sysctl.confandthenrebootorrunthecommand'sysctlvm.overcommit_memory=1'forthistotakeeffect.
可以参考问题一的解决
问题三:
- WARNINGyouhaveTransparentHugePages(THP)supportenabledinyourkernel.ThiswillcreatelatencyandmemoryusageissueswithRedis.Tofixthisissuerunthecommand'echonever>/sys/kernel/mm/transparent_hugepage/enabled'asroot,andaddittoyour/etc/rc.localinordertoretainthesettingafterareboot.RedismustberestartedafterTHPisdisabled
执行命令echo never>/sys/kernel/mm/transparent hugepage/enabled
永久解决添加配置文件即可。
- vi/etc/rc.local
三、怎么在代码中使用安装的redis呢
需要引用的jar包有:
- commons-pool-1.6.jar
- jedis-2.9.0.jar
示例代码:
- publicstaticvoidmain(String[]args){
- //创建redis对象
- Stringip="";
- Jedisjedis=newJedis(ip,6379);//链接redis
- //记录操作个数
- jedis.set("name","小明");
- System.out.println("name已经赋值");
- Stringname=jedis.get("name");
- System.out.println("赋值后获取name的值为:"+name);
- jedis.del("name");
- System.out.println("name已经删除");
- StringnameT=jedis.get("name");
- System.out.println("删除后获取name的值为:"+nameT);
- }
- //结果
- name已经赋值
- 赋值后获取name的值为:小明
- name已经删除
- 删除后获取name的值为:null
四、设置用户名和密码
1、在配置文件中redis_6379.conf直接添加requirepass 123456
2、通过命令添加
设置密码
- #设置密码
- configsetrequirepass123456
查看密码
- configgetrequirepass
需要验证密码以后才可以查看
测试代码
- publicstaticvoidmain(String[]args){
- //创建redis对象
- Stringip="";
- Jedisjedis=newJedis(ip,6379);//链接redis
- jedis.auth("123456");
- //记录操作个数
- jedis.set("name","小明");
- System.out.println("name已经赋值");
- Stringname=jedis.get("name");
- System.out.println("赋值后获取name的值为:"+name);
- jedis.del("name");
- System.out.println("name已经删除");
- StringnameT=jedis.get("name");
- System.out.println("删除后获取name的值为:"+nameT);
- }
- #结果
- name已经赋值
- 赋值后获取name的值为:小明
- name已经删除
- 删除后获取name的值为:null
五、应用中碰到的问题
链接被拒绝或者超时问题
redis刚开始配置的ip是默认ip和端口127.0.0.1:6379,这个ip只能服务的本地进行链接。解决办法:
在配置文件中把这个ip给注释
在阿里云中配置安全组
修改好配置文件和安全组以后,可以通过阿里云服务的外网ip和redis的端口访问。
但是呢,又报一个问题,保护模式下拒绝访问。
根据提示修改配置文件redis_6379.conf中属性protected-mode no,并重启服务。
再次测试代码连接正常~
©本文为清一色官方代发,观点仅代表作者本人,与清一色无关。清一色对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。本文不作为投资理财建议,请读者仅作参考,并请自行承担全部责任。文中部分文字/图片/视频/音频等来源于网络,如侵犯到著作权人的权利,请与我们联系(微信/QQ:1074760229)。转载请注明出处:清一色财经