redis 小结

1.1 什么是NoSQL Not Only SQL 泛指非关系型数据库。 随着web2.0的快速发展,非关系型、分布式数据存储得到了快速的发展,它们不保证关系数据的ACID特性。NoSQL概念在2009年被提了出来。NoSQL最常见的解释是“non-relational”,“Not Only SQL”也被很多人接受。(“NoSQL”一词最早于1998年被用于一个轻量级的关系数据库的名字。) 1.2 为什么要使用NoSQL 1.2.2 NoSql数据库的优势 易扩展   NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。也无形之间,在架构的层面上带来了可扩展的能力。 大数据量,高性能   NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。一般MySQL使用Query Cache,每次表的更新Cache就失效,是一种大粒度的Cache,在针对web2.0的交互频繁的应用,Cache性能不高。而NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说就要性能高很多了。 灵活的数据模型   NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。这点在大数据量的web2.0时代尤其明显。 高可用 NoSQL在不太影响性能的情况,就可以方便的实现高可用的架构。比如Cassandra,HBase模型,通过复制模型也能实现高可用。 2 redis 2.1 redis简介 全称:REmote DIctionary Server(远程字典服务器)。是完全开源免费的,用C语言编写的, 遵守BCD协议。是一个高性能的(key/value)分布式内存数据库, 基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为数据结构服务器。 redis的特点: i)Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用 ii)Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储 2) Redis支持数据的备份,即master-slave模式的数据备份 2.1 Redis优势 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性 2.2 redis应用场景 新浪微博、facebook、电商系统的商品查询…… 2.3 redis下载 (1)Http://redis.io/ (2)Http://www.redis.cn/ 2.4 redis版本 3.x(支持集群) 2.x不支持集群 (课程中是用3.0版本) 副版本号为偶数时,表示是稳定版本,建议在生产环境中使用 副版本号为基数时,表示是测试版本,不建议在生产环境中是用 2.5 redis安装 redis没有基于windows的版本。在Linux系统中使用。课程中是用centOS。 2.5.1 单机版安装 2.5.1.1 安装gcc 安装文件是一个压缩包,但由于redis本身是采用c++ 编写的,所以解压完成后,需要编译和安装。所以先要在系统中安装 c++的编译器 gcc-c++ gcc的安装方式分为两种: 1 在线安装(有网络环境) yum install -y gcc-c++ 2离线安装(无网络环境) 可以到 http://vault.centos.org/6.5/os/x86_64/Packages/ 下载需要的安装文件。 需要的安装文件如下: ppl-0.10.2-11.el6.x86_64.rpm ppl-devel-0.10.2-11.el6.x86_64.rpm gmp-devel-4.3.1-7.el6_2.2.x86_64.rpm cloog-ppl-devel-0.15.7-1.2.el6.x86_64.rpm cpp-4.4.7-4.el6.x86_64.rpm glibc-devel-2.12-1.132.el6.x86_64.rpm glibc-headers-2.12-1.132.el6.x86_64.rpm libstdc++-4.4.7-4.el6.x86_64.rpm libstdc++-devel-4.4.7-4.el6.x86_64.rpm gcc-4.4.7-4.el6.x86_64.rpm gcc-c++-4.4.7-4.el6.x86_64.rpm kernel-headers-2.6.32-431.el6.x86_64.rpm mpfr-2.4.1-6.el6.x86_64.rpm 逐个安装: 使用命令为: rpm –ivh ***.rpm 2.5.1.2 安装redis 1 使用 root 用户登录,把redis安装文件(压缩文件)拷贝到linux系统中 (这里拷贝到了root用户的opt目录中) 2 解压这个文件 tar –zxvf redis-3.0.0.tar.gz 3 进入解压后的目录,对里面的文件进行编译和安装 这里采用编译和安装同时进行的方式。 命令: make install PREFIX=/usr/local/redis /usr/local/redis是redis的安装路径,目录名不是一定要叫redis可以自己定义 4 进入redis的安装路径中bin路径,查看里面的文件 其中 redis-server文件就是redis的启动文件 5 ./redis-server 运行这个文件,如果看到一个图形界面,界面中显示redis的版本、软件位数、监听的端口(6379)、PID等信息 说明redis的安装和启动成功。 注意: 这里的启动叫做前置启动。 前置启动的特点,当redis 启动后,linux操作界面将不能输入执行其他命令!!! 2.5.2 redis启动 redis启动分为前置启动和后置启动。 2.5.2.1 前置启动(一般不用) ./redis-server 特点: redis启动后,将不能输入其他命令。 退出前置启动的方式 ctrl+c 2.5.2.2后置启动 1 到redis的解压目录中拷贝 redis.conf 到 redis的安装目录中(和redis-server在同一个目录) 2打开这个文件(vim命令),修改这个文件中 daemonize 的值为yes(默认为no) 3在启动redis时, 使用 ./redis-server redis.conf(启动时,指定配置文件) 4测试后置启动是否成功:多种方式 (1) ps aux|grep redis 查看这个进程是否存在 (2) 使用redis自带的客户端工具 10.0.1 redis清空 redis清空 进入redis目录下 redis-cli flushall ./redis-cli进入 输入ping 如果返回一个pong 则表示redis启动成功 退出redis客户端的方式: 1 ctrl+c 2 quit 3 exit 2.5.3 停止redis l 强制结束程序。强制终止redis进程可能会导致redis持久化数据丢失。 l 正确停止redis的方式应该是向redis发送SHUTDOWN命令,方法为(关闭默认的端口) [root@zrgk redis]# ./bin/redis-cli shutdown 2.6 redis文件介绍 (redis.conf) 1) daemonize yes 修改启动方式 2) port 6379 redis端口 3) database 16 redis默认开启16个库,也就是16个存储空间来存储数据 注意:这16个之间是数据隔离的 4) cluster-enabled yes 配置redis集群 ,这个配置默认是被注释的,也就是默认不开启集群 5) save 900 1 这个表示redis的持久化方案 (RDB) 6)dbfilename dump.rdb redis持久化时,存放数据的文件 7)appendonly no 是否开启redis的aof 持久化方案 8) appendfilename “appendonly.aof” aof持久化方案存放的文件 2.7 redis持久化方案 redis的持久化方案:两种 RDB方案 和 AOF方案 2.7.1 什么是redis的持久化方案 redis 除了可以作为缓存技术,也可以作为非关系型数据库。 作为缓存技术,数据默认是存放在内存中的,(这样可以提升存取速度) 但内存不是持久化设备,不能永久保存数据,一旦机器发生问题, 将会造成数据丢失。因此,redis为了解决这个文件,提供了数据的持久化方案(memcahe 没有这个能力) 2.7.2 RDB方案 默认开启的一种持久化方案。它会根据时间轴,以及key的数量改变,来完成持久化动作。 save 900 1 该备份策略表示 在 900 秒内,如果有一个或多个key的值发生了变化就触发redis的持久化机制。 2.7.3 AOF方案 该持久化方案,redis默认情况下没有开启。需要手动开启。 redis.conf 中的 appendonly no 配置成 yes aof的持久化策略为:redis会记录当前用户执行的,且改变数据的命令。 这种持久化的密度会更细。当然也会对redis的性能产生影响。 注意:即使采用aof的持久化策略,一旦内存崩溃,也会至少丢失一秒的数据。 因此,在很多系统中,RDB方案和AOF方案,同时开启 2.8 redis常用命令 2.8.1redis中的常用类型 String(字符串) Hash(哈希) List(链表) {lpush /rpush/lrange=========>l 是指左进,r 指右} {lpop 出栈,rpop} {lindex 按照索引下标,获得元素(从上到下)} {lrem 删除N个值} {ltrim list 0,3 截取0-3 的值赋给ltrim } {rpoplpush list01 list02 可以理解为rpop list01 lpush list02 } Set(集合) SortSet(有序集合) 2.8.2 常用命令展 set 将一个键值对以字符串类型存储 (覆盖赋值) get 通过key获取value 。只能操作字符串类型 ping 测试redis是否链接 如果已链接返回 PONG echo 测试redis是否链接 如果已链接返回 echo命令后给定的值 keys 返回所有的key 可以加*通配 exists 判断string类型一个key是否存在 如果存在返回1 否则返回0 del 删除一个key或者多个 expire 设置一个key的过期时间 ttl 查看建的失效时间 select 选择数据库(0-15) move 将当前数据库中的key转移到其他数据库中 persist 移除给定key的过期时间 randomkey 随机返回key空间的一个key type 返回值的类型 quit 退出连接 (6)执行 PING 命令,该命令用于检测 redis 服务是否启动。 (7)Redis DEL 命令用于删除已存在的键,不存在的 key 会被忽略。   语法:DEL KEY_NAME (8)Redis DUMP 命令用于序列化给定 key ,并返回被序列化的值。   语法:DUMP KEY_NAME (9)Redis EXISTS 命令用于检查给定 key 是否存在,若 key 存在返回 1 ,否则返回 0。   语法:EXISTS KEY_NAME (10)Redis Expire 命令用于设置 key 的过期时间。key 过期后将不再可用,会自动删除该key值。(秒为单位)。   语法:Expire KEY_NAME TIME_IN_SECONDS (11)Redis Expireat 命令用于以 UNIX 时间戳(unix timestamp)格式设置 key 的过期时间,key 过期后将不再可用。   语法:Expireat KEY_NAME TIME_IN_UNIX_TIMESTAMP (12)Redis PEXPIREAT 命令用于设置 key 的过期时间,已毫秒技,key 过期后将不再可用。   语法:PEXPIREAT KEY_NAME TIME_IN_MILLISECONDS_IN_UNIX_TIMESTAMP (13)Redis Keys 命令用于查找所有符合给定模式 pattern 的 key 。   语法:KEYS PATTERN (14)Redis MOVE 命令用于将当前数据库的 key 移动到给定的数据库 db 当中。   语法:MOVE KEY_NAME DESTINATION_DATABASE (15)Redis PERSIST 命令用于移除给定 key 的过期时间,使得 key 永不过期。   语法:PERSIST KEY_NAME (16)Redis Pttl 命令以毫秒为单位返回 key 的剩余过期时间。   语法:PTTL KEY_NAME (17)Redis TTL 命令以秒为单位返回 key 的剩余过期时间。   语法:TTL KEY_NAME (18)Redis RANDOMKEY 命令从当前数据库中随机返回一个 key 。   语法:RANDOMKEY (19)Redis Rename 命令用于修改 key 的名称 。   语法:RENAME OLD_KEY_NAME NEW_KEY_NAME (20)Redis Renamenx 命令用于在新的 key 不存在时修改 key 的名称 。   语法:RENAMENX OLD_KEY_NAME NEW_KEY_NAME (21)Redis Type 命令用于返回 key 所储存的值的类型。   语法:TYPE KEY_NAME 字符串常用命令 (1)Redis SET 命令用于设置给定 key 的值。如果 key 已经存储其他值, SET 就覆写旧值,且无视类型。   语法:SET KEY_NAME VALUE (2)Redis Get 命令用于获取指定 key 的值。如果 key 不存在,返回 nil 。如果key 储存的值不是字符串类型,返回一个错误。   语法:GET KEY_NAME (3)Redis Getrange 命令用于获取存储在指定 key 中字符串的子字符串。字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。   语法:GETRANGE KEY_NAME start end (4)Redis Getset 命令用于设置指定 key 的值,并返回 key 旧的值。   语法:GETSET KEY_NAME VALUE (5)Redis Getbit 命令用于对 key 所储存的字符串值,获取指定偏移量上的位(bit)。   语法:GETBIT KEY_NAME OFFSET (6)Redis Mget 命令返回所有(一个或多个)给定 key 的值。 如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。   语法:MGET KEY1 KEY2 .. KEYN (7)Redis Setbit 命令用于对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。   语法:Setbit KEY_NAME OFFSET (8)Redis Setex 命令为指定的 key 设置值及其过期时间。如果 key 已经存在, SETEX 命令将会替换旧的值。   语法:SETEX KEY_NAME TIMEOUT VALUE (9)Redis Setnx(SET if Not eXists) 命令在指定的 key 不存在时,为 key 设置指定的值。   语法:SETNX KEY_NAME VALUE (10)Redis Setrange 命令用指定的字符串覆盖给定 key 所储存的字符串值,覆盖的位置从偏移量 offset 开始。   语法:SETRANGE KEY_NAME OFFSET VALUE (11)Redis Strlen 命令用于获取指定 key 所储存的字符串值的长度。当 key 储存的不是字符串值时,返回一个错误。   语法:STRLEN KEY_NAME (12)Redis Mset 命令用于同时设置一个或多个 key-value 对。   语法:MSET key1 value1 key2 value2 .. keyN valueN (13)Redis Msetnx 命令用于所有给定 key 都不存在时,同时设置一个或多个 key-value 对。   语法:MSETNX key1 value1 key2 value2 .. keyN valueN (14)Redis Psetex 命令以毫秒为单位设置 key 的生存时间。   语法:PSETEX key1 EXPIRY_IN_MILLISECONDS value1 (15)Redis Incr 命令将 key 中储存的数字值增一。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。   语法:INCR KEY_NAME (16)Redis Incrby 命令将 key 中储存的数字加上指定的增量值。   语法:INCRBY KEY_NAME INCR_AMOUNT (17)Redis Incrbyfloat 命令为 key 中所储存的值加上指定的浮点数增量值。   语法:INCRBYFLOAT KEY_NAME INCR_AMOUNT (18)Redis Decr 命令将 key 中储存的数字值减一。   语法:DECR KEY_NAME (19)Redis Decrby 命令将 key 所储存的值减去指定的减量值。本操作的值限制在 64 位(bit)有符号数字表示之内。   语法:DECRBY KEY_NAME DECREMENT_AMOUNT (20)Redis Append 命令用于为指定的 key 追加值。   语法:APPEND KEY_NAME NEW_VALUE 哈希(Hash)常用命令 (1)Redis Hdel 命令用于删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略。   语法:HDEL KEY_NAME FIELD1.. FIELDN (2)Redis Hexists 命令用于查看哈希表的指定字段是否存在。   语法:HEXISTS KEY_NAME FIELD_NAME (3)Redis Hget 命令用于返回哈希表中指定字段的值。   语法:HGET KEY_NAME FIELD_NAME (4)Redis Hgetall 命令用于返回哈希表中,所有的字段和值。   语法:HGETALL KEY_NAME (5)Redis Hincrby 命令用于为哈希表中的字段值加上指定增量值。增量也可以为负数,相当于对指定字段进行减法操作。   语法:HINCRBY KEY_NAME FIELD_NAME INCR_BY_NUMBER (6)Redis Hincrbyfloat 命令用于为哈希表中的字段值加上指定浮点数增量值。如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。   语法:HINCRBYFLOAT KEY_NAME FIELD_NAME INCR_BY_NUMBER (7)Redis Hkeys 命令用于获取哈希表中的所有字段名。   语法:HKEYS KEY_NAME (8)Redis Hlen 命令用于获取哈希表中字段的数量。   语法:HLEN KEY_NAME (9)Redis Hmget 命令用于返回哈希表中,一个或多个给定字段的值。   语法:HMGET KEY_NAME FIELD1...FIELDN (10)Redis Hmset 命令用于同时将多个 field-value (字段-值)对设置到哈希表中。此命令会覆盖哈希表中已存在的字段。   语法:HMSET KEY_NAME FIELD1 VALUE1 ...FIELDN VALUEN (11)Redis Hset 命令用于为哈希表中的字段赋值 。   语法:HSET KEY_NAME FIELD VALUE (12)Redis Hsetnx 命令用于为哈希表中不存在的的字段赋值 。   语法:HSETNX KEY_NAME FIELD VALUE (13)Redis Hvals 命令返回哈希表所有字段的值。   语法:HVALS KEY_NAME 列表(List)常用命令 (1)Redis Blpop 命令移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。   语法:BLPOP LIST1 LIST2 .. LISTN TIMEOUT (2)Redis Brpop 命令移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。   语法:BRPOP LIST1 LIST2 .. LISTN TIMEOUT (3)Redis Brpoplpush 命令从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。   语法:BRPOPLPUSH LIST1 ANOTHER_LIST TIMEOUT (4)Redis Lindex 命令用于通过索引获取列表中的元素。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。   语法:LINDEX KEY_NAME INDEX_POSITION (5)Redis Linsert 命令用于在列表的元素前或者后插入元素。 当指定元素不存在于列表中时,不执行任何操作。 当列表不存在时,被视为空列表,不执行任何操作。 如果 key 不是列表类型,返回一个错误。   语法:LINSERT KEY_NAME BEFORE EXISTING_VALUE NEW_VALUE (6)Redis Llen 命令用于返回列表的长度。 如果列表 key 不存在,则 key 被解释为一个空列表,返回 0 。 如果 key 不是列表类型,返回一个错误。   语法:LLEN KEY_NAME (7)Redis Lpop 命令用于移除并返回列表的第一个元素。   语法:Lpop KEY_NAME (8)Redis Lpush 命令将一个或多个值插入到列表头部。列表不存在时建立空列表。   语法:LPUSH KEY_NAME VALUE1.. VALUEN (9)Redis Lpushx 将一个或多个值插入到已存在的列表头部,列表不存在时操作无效。   语法:LPUSHX KEY_NAME VALUE1.. VALUEN (10)Redis Lrange 返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。   语法:LRANGE KEY_NAME START END (11)Redis Lrem 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。   count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT.   count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值   count = 0 : 移除表中所有与 VALUE 相等的值   语法:LREM KEY_NAME COUNT VALUE (12)Redis Lset 通过索引来设置元素的值。   语法:LSET KEY_NAME INDEX VALUE (13)Redis Ltrim 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。   语法:LTRIM KEY_NAME START STOP (STOP 可以为负数,倒数) (14)Redis Rpop 命令用于移除并返回列表的最后一个元素。   语法:RPOP KEY_NAME (15)Redis Rpoplpush 命令用于移除列表的最后一个元素,并将该元素添加到另一个列表并返回。   语法:RPOPLPUSH SOURCE_KEY_NAME DESTINATION_KEY_NAME (16)Redis Rpush 命令用于将一个或多个值插入到列表的尾部(最右边)。如果列表不存在,创建空列表、   语法:RPUSH KEY_NAME VALUE1..VALUEN (17)Redis Rpushx 命令用于将一个或多个值插入到已存在的列表尾部(最右边)。如果列表不存在,操作无效   语法:RPUSHX KEY_NAME VALUE1..VALUEN    dbsize 返回当前数据库中的key的数目 info 获取服务器的信息和统计 flushdb 删除当前选择的数据库中的key flushall 删除所有数据库中的所有key 如何使用以上命令? 先进入redis客户端 ./redis-cli,在客户端中使用以上命令 2.8.3 String(字符串) key value形式存储数据 关于key的说明: 1 key 不要太长,不要超过1024个字节。这样会消耗内存,也会降低查询效率 2 key 不要太短。这样会降低可读性。 3一个项目中,key的命名采用同一的规范。 关于value的说明: String类型存储时,value的最大长度为512M 命令: 1、 set (set key value) 存键值对到redis中 set name “zhangsan” “” 可加可不加 set password 123 set aa bb 2、 get (get key) 根据键取值 get name 3、 incr 让当前键值以1的数量递增,并返回递增后的值 set aa 11 incr aa 返回 12 4、 incrby 可以指定参数一次增加的数值,并返回递增后的值 set aa 11 incrby aa 10 返回 21 5、 decr 让当前键值以1的数量递减 并返回递减后的值 6、 decrby 可以指定参数一次递减的数值,并返回递减后的值 7、 incrbyfloat 可以递增一个双精度浮点数 8、 append 作用是向键值的末尾追加value。如果键不存在则将该键的值设置为value。返回值是追加后字符串的总长度。 set aa hello append aa world 返回10 表示拼接后的值得长度 get aa 返回helloworld 9、 mget/mset 作用与get/set相似,不过mget/mset可以同时获得/设置多个键的键值 mset xxx 111 yyy 222 zzz 333 mget xxx yyy zzz 返回 “111” “222” “333” 转载自 :https://www.cnblogs.com/zls1024/articles/9614412.html 通过Jedis客户端连接不到redis 主要是防火墙的问题,但是因为redis自身也有配置来限制外网的访问今天主要以redis配置的角度来看一下,如何解决外网访问redis的问题。 Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused: connect at redis.clients.jedis.Connection.connect(Connection.java:207) at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:93) at redis.clients.jedis.Connection.sendCommand(Connection.java:126) at redis.clients.jedis.Connection.sendCommand(Connection.java:121) at redis.clients.jedis.BinaryClient.ping(BinaryClient.java:106) at redis.clients.jedis.BinaryJedis.ping(BinaryJedis.java:195) at com.atguigu.redis.test.TestPing.main(TestPing.java:10) Caused by: java.net.ConnectException: Connection refused: connect at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) at java.net.AbstractPlainSocketImpl.connect(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at redis.clients.jedis.Connection.connect(Connection.java:184) ... 6 more 首先,通过查看linux的防火墙,看看是否是防火墙搞的鬼: [root@localhost ~]# systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead) 结果是这样的,inactive是不活动的意思,和active相反,这个比较好理解。 然后使用windows的telnet来试一下,上一篇关于远程连接redis的文章中没有关于telnet的信息,这次不上, C:\Users\Administrator>telnet 192.168.1.118 6379 结果连接不上 原来是redis默认只能localhost登录,所以需要开启远程登录。解决方法如下:   在redis的配置文件redis.conf中,找到bind localhost注释掉。     注释掉本机,局域网内的所有计算机都能访问。     band localhost 只能本机访问,局域网内计算机不能访问。     bind 局域网IP 只能局域网内IP的机器访问, 本地localhost都无法访问。 在redis.conf 中有个bind 127.0.0.1 . 需要添加上redis的IP地址 bind 10.146.173.41 即可连接成功 Beyond Compare 4 Licensed to: Huawei Technologies Co., Ltd Quantity: World-wide users Serial number: 7069-1739 License type: Pro Edition for Windows/Linux/OS X --- BEGIN LICENSE KEY --- VErpepLezNP0xt383CQz43LYV8Q6VHkDlLusjClOAaTA6iqdAVSXgKDzH rAzBBuMSP388G9DwNwK0mSlSf6MMvKwv9X6ifB9NXkFI-yhSKe35vk6TN r6q6Ih08wIa6rxoaTrKwiJQaqg7tvvE46qCyRNr+hAQyR0k0C9tKU4jke kSn-UbZs9HrYW6wuvvMrg6oMz3lsjzkfrTxbtS0YguB2KE8q7IlKUWu7X 0wusjjKvmRn5s3Kz+gmycL8mXlEUa-5ZXdZBISbKP4JSL-VOcgZYY8lxu f3clex3A7nrBHkFAPkCMuXGugr0YrlbN9593ACO4MvOj3BWJy94c2vBA+ --- END LICENSE KEY -----
posted @ 2019-02-28 11:55  kisshappyboy  阅读(173)  评论(0编辑  收藏  举报