远程访问:开外网 布置节点:
服务和端口的关系
对外开放的服务(一般是需要联网的服务(包括局域网)内网/外网)就要用到端口
协议和服务
协议就是规则的集合。在网络中药做到有条不紊地交换数据,就必须遵循一些事先约定好的规则。这些规则明确规定了所交换的数据的格式以及相关的 同步问题。这些为进行网络中的数据交换而建立的规则、标准或约定称为网络协议(Network Protocol),它是控制两个(或多个)对等实体进行通信的规则的集合,也就是水平的。网络协议也简称为协议
协议和服务在概念上是不一样的 。首先,本层协议的实现才能保证向上一层提供服务。本层的服务用户只能看到服务而无法看见下面的协议,即下面的协议对上层的服务用户是透明的。其次,协议是“水平的”,即协议是控制对等实体之间通信的规则。但服务是“垂直的”,即服务是由下层通过层间接口向上层提供的。另外,并非在一层内完成的全部功能都称为服务,只有那些能够被高一层实体“看得见”的功能才称为服务。
dubbo是服务,对外默认端口号20880
zookeeper是注册中心,服务的提供者和消费者向注册中心提供服务和订阅服务,其服务实际上还是在提供者那儿。
http://47.95.69.217:8120/项目名…
dubbo服务地址:http://ip:port/aubbo-admin
1.dubbo-admin dubbo服务后台管理平台
大数据主要做推广;
nosql数据库(非关系型数据库)的优点:
高并发:对数据库高并发读写的需求
高负载:海量数据量的高效率存储和访问需求
高可扩展(高可用性):对数据库的扩展
种类:redis mongoDB hBase
redis是c语言写的,redis中存储的是key-value 没有数据库表的概念 其中的key相当于mysql数据库的表
支持类型:字符串 散列类型(hash) 列表类型(linkedlist有序可重复) 集合类型(set无序不可重复) 有序集合类型(sortset,有序唯一)
根据官方测试:50个并发执行100000个请求,读的速度是11万次/s,写的速度是81000次/s
redis应用:
缓存(数据查询 端连接 新闻内容 商品内容等)
分布式集群架构中存session
聊天室消息列表
redis的安装和使用: redis安装前需要先进行编译
redis是c语言开发的,安装前需要先安装c语言环境(yum install gcc-c++),解压redis(tar -xvf redis.jar.gz -C 安装到的目标路径 ),在c环境编译redis(进入redis文件夹,使用make命令编译redis)变成可执行安装包,安装(make PREFIX=/redis安装路径 install),进入安装后redis文件夹bin目录中 执行./redis-server ,redis启动成功 (端口号6379),
重新进入bin目录执行./redis-cli(客户端)就可以在redis中存数据了…《前端启动模式》
在redis安装目录中找到redis配置文件redis.conf拷贝到bin目录下…
打开redis.conf 修改daemonize为yes
重新启动 ./redis-server redis.conf 《后端启动模式》
exit退出
退出服务端 kill -9 pid (杀死进程就行)
jedis //获取连接对象 jedis同mysql中的Connection
jedis.set(“key”,“value”);
jedis.get(key);
value可以存json串
redis连接池
通过jedis的pool获取jedis连接对象(redis自己提供)
new jedisPool(poolConfig,“ip”,port);
xml文件解析需要dom4j;properties文件(存储的是key-value)不需要解析,直接InputStream in=Jedis.class.getClassLoader().getResourceAsStream(“aa.properties”);
new property();
pro.load(in);
直接从pro.get(key);获取key的值 关于对象配置参数的封装
redis中存储的是key-value 没有数据库表的概念
字符串在redis中是以二进制存储的,存什么取出来就是什么(字符串存储是最基础也是最重要的,最长一个字符串存储512M)
redis命令
String :
set k v
getset
del key
nil零
incr ++
decr –
incrby num 12(i=i+12)
append key value
hash: 通过key获得map,然后通过map中的key获得value
hset key field value存储
hget key field 获取
hmset key field1 value1
hmget key field1 field2…
hgetall key
hdel key field
hdel key
hincrby key field 10 增加10
hexists key field 存在1 不存在2
hlen key 获取key中包含hash的长度
hkeys key
hvals key
list (链表存储linkedlist)
arraylist 底层是数组 查询快 有脚标
linkedlist 底层是链表 增删快,断链,增链 key left value1|value2|value3… right
lpush key vals 存(从左加) 压栈 l代表左 r代表右
rpush key vals (从右加)
lrang key 从哪到哪 显示key内容
lpop key 弹栈 取值从头取
lrem key count val 从左删除count个值为val
lset key index val 从中间插(替换,原位置值没有了)
rpoplpush list1 list2 从1右边弹出一个放到2的左边
消息发布系统:
队列list 满足条件 放一个list1
不满足条件 方另一个list2
set集合 无序不可重复
set中不允许出现重复元素
sadd myset vals…
smembers key 获取全部
srem key vals 删除某元素
sismember key val 是否存在 1 0
sdiff key1 key2 求1,2的差集 set特有运算 差并交
sinter key1 key2 交集
sunion key1 key2 并集
scard key 元素数量
srandmember key 随机获取一个
sdiffstore myset3 key1 key2 1和2的差集放到3
sunionstore 同上
sinterstore 同上
sortedset存储
有序不可重复 (通过权重排序) 可以用于排名 微博排名 NBA排名
zadd key score val score val2 score val3… 存储 score为权重分数
zcard key 数量
zrem key val… 删除
zrange key 0 -1 (withscores) 范围查询
zrevrange key index index 从大到小排reverse
zremrangerank key startindex stopindex 按排名删除(默认从权重小到大排)
zremrangbyscore key min max 按分数删
zrangebyscore key 0 100 limit 0 3 分页查询
key的通用操作
keys pattern(规则) *任意多个 ?任意一个
keys * 查所有key
del key1,key2… 删除
exists key 是否存在 1 0
rename key newkey1 从命名
expire key 设置过期时间
ttl key 获取剩余超时时间 没有设置超时 -1 已经过期-2
type key 获取key的类型
redis 多数据库(16个库。默认使用db0库)
移库:
select 1 选择1库
move key 1 key移到1号库
服务器命令
ping 测试连接是否存货
echo 在命令行打印一些内容
select 选库
quit /exit 退出连接 退出某个服务等 ctrl+c 退出某个命令
flushdb 删除当前库中所有key
flushall 删除所有哭的所有key
消息订阅与发布 用于即时通讯 如QQ等
在redis客户端使用
subscribe channel 订阅频道
psubscribe channel* 批量订阅频道
publish channel content 在指定频道发布内容
redis事务 不回滚
multi 开启事务
执行命令1
–queued
执行命令2
–queued
…
exet 提交事务
成功的成功,失败的失败
discard 事务回滚
redis持久化 (nosql数据库,一般是内存型数据库)备份 主从复制
把内存中的数据写到磁盘上 持久化
持久化方式:RDB(默认)、AOF方式
rdb方式是以快照(备份)形式存在磁盘 注重结果
aof方式是以日志形式存在磁盘(把所有写操作命令存在文件中,启动服务器后再重新执行一遍命令即可恢复数据) 注重过程
rdb存储大量数据;可能会丢失数据(快照隔一段时间产生一次),有一个存储时机
15分
5分
1分
aof即时存储 ;存储大数据量 卡
存储时机
always 每次数据发生改变时会写入aof中
everysec 每秒同步一次,缺省策略
no 从不同步
集群: