教你从零搭建Redis服务花点时间整理一下。linux环境下安装redis遇到的问题及解决办法如何在代码中使用安装好的redis设置用户名和密码程序应用中遇到的问题介绍redis是一个key-value存储系统。与Memcached类似,它支持相对更多的值类型进行存储,包括string(字符串)、list(链表)、set(集合)、zset(sortedset——有序集合)和hash(散列类型)。这些数据类型支持push/pop、add/remove、intersection、union、difference等更丰富的操作,而且这些操作是原子的。在此基础上,redis支持多种方式的排序。和memcached一样,数据缓存在内存中以保证效率。不同的是redis会周期性的将更新的数据写入磁盘或者将修改操作写入附加的记录文件,并在此基础上实现主从(master-slave)同步。Redis是一个高性能的键值数据库。redis的出现很大程度上弥补了memcached等key/value存储的不足,在某些场合可以对关系型数据库起到很好的补充作用。它提供了Java、C/C++、C#、PHP、JavaScript、Perl、Object-C、Python、Ruby、Erlang等客户端,使用起来非常方便。1、安装redis1,下载安装包cd/www/redis/wgethttp://download.redis.io/releases/redis-4.0.8.tar.gztar-zxvfredis-4.0.8.tar.gzmvredis-4.0.8redis2,编译rediscd/www/redis/redis/makeMALLOC=libcmakePREFIX=/usr/local/redisinstall3,准备配置文件cd/usr/local/redismkdirconfcdconf/viredis_6379.conf配置文件内容如下:/www/redis/data/redis/6379/redis_6379.pidloglevelnoticelogfile"/www/redis/data/redis/6379/log.log"databases16always-show-logoyessave9001save30010save6010000stop-writes-on-bgsave-erroryesrdbcompressionyesrdbchecksumyesdbfileirnamedu/www.redis3/data79/redis/6log.log"data/redis/6379/slave-serve-stale-datayesslave-read-onlyyesrepl-diskless-syncnorepl-diskless-sync-delay5repl-disable-tcp-nodelaynoslave-priority100lazyfree-lazy-evictionnolazyfree-lazy-expirenolazyfree-lazy-server-delnoslave-lazy-flushnoappendonlyyesappendfilename"appendonly.aof"appendfsynceverysecno-appendfsync-on-rewritenoauto-aof-rewrite-percentage100auto-aof-rewrite-min-size64mbaof-load-truncatedyesaof-use-rdb-preamblenolua-time-limit5000slowlog-log-slower-than10000slowlog-max-len128latency-monitor-threshold0notify-keyspace-events""hash-max-ziplist-entries512hash-max-ziplist-value644,启动服务mkdir-p/www/redis/data/redis/6379/cd../bin/./redis-server../conf/redis_6379.conf5.使用客户端链接./redis-cli判断是否启动成功6.使用查看数据键*设置值setoneKey测试获取值getoneKey2.安装过程中遇到的问题及解决方法问题一:WARNING:无法强制执行511的TCP积压设置,因为/proc/sys/net/core/somaxconnis设置为较低的值128。临时解决方案:echo511>/proc/sys/net/core/somaxconn永久解决方案vi/etc/sysctl.conf添加net.core.somaxconn=1024执行sysctl-p就可以永久消除这个警告问题二: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'以root身份添加到你的/etc/rc.localinordertoretainthesettingafterareboot.RedismustberestartedafterTHPisdisabled执行命令echonever>/sys/kernel/mm/transparenthugepage/enabled永久解决添加配置文件的问题。vi/etc/rc.local3.如何在代码中使用安装的redis?需要引用的jar包有:commons-pool-1.6.jarjedis-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后assignment值为:小明名字已被删除,删除后得到的名字值为:null4.设置用户名和密码1.在配置文件redis_6379.conf中直接添加requirepass1234562,通过添加设置的密码命令#Setpasswordconfigsetrequirepass123456查看密码configgetrequirepass需要验证测试代码只有输入密码后才能查看publicstaticvoidmain(String[]args){//创建redis对象Stringip="";Jedisjedis=newJedis(ip,6379);//链接redisjedis.auth("123456");//记录操作数jedis.set("name","小明");System.out.println("name已赋值");字符串gname=jedis.get("name");System.out.println("name赋值后得到的值为:"+name);jedis.del("name");System.out.println("name有beendeleted");StringnameT=jedis.get("name");System.out.println("获取name删除后的值:"+nameT);}#结果name已经赋值,name删除后的值赋值是:小明名字删除后得到的名字的值已被删除:null5.申请中遇到的问题链接被拒绝或超时。redis一开始配置的ip是默认ip和端口127.0.0.1:6379。此ip只能在本地提供服务。链接解决方案:在配置文件中注释掉这个ip,在阿里云中配置安全组。修改配置文件和安全组后,可以通过阿里云服务的外网ip和redis端口访问。但是又报了一个问题,保护模式下访问被拒绝。根据提示修改配置文件redis_6379.conf中的属性protected-modeno,并重启服务。再次测试代码连接~
