数据存储层相关


12/2/2018 数据层 后端 语言进阶 所有文章

自己遇到的错误
主要是sql的相关知识其他的会用即可

# Mysql

留坑了

# mongodb

字典一样的数据结构,面向文档式的管理

  • 区分大小写
  • key唯一,不可重复
  • 文档可嵌套
  • 键值对是有序的 集合许多文档构成了一个集合(表) 命名规则
  1. 不能是空字符串("")
  2. 不能包含\0字符(空字符)
  3. 不能使用system.的前缀(系统保留)
  4. 建议不包含保留字“$"
  5. 用.分割不同命名空间的子集合(如:blog.users,blog.posts)
    每个数据库有独立的权限,不要和保留的重合admin,local,config 只有在服务启动的状态下才会提供服务

# 安装远程访问和可视化

win下我不说了简单的很,注意那个附加软件下载很慢,mongo的数据库启动
linux下我直接从宝塔安装,wget安装也行网上一大堆,把bin连接到path就行了
修改配置文件/etc/mongodb.conf,把bindip 改为0.0.0.0,防火墙开放27017端口 auth=true
这时不要关闭mongo,进入mongo命令行,use admin,db.createUser({user:"root",pwd:"654321",roles:[{role:"userAdminAnyDatabase",db:"admin"},{role:"__system",db:"admin"}]})
在使用mongo的命令的时候会报错,所以先执行db.auth("root","123456") 返回1表示验证成功可以正常执行

注意

db.addUser("root","123456") 在3.6版本中已经不支持这个方法了,只能使用createUser函数
设置roles的时候,一定要加上 __system (有两个下划线) 这个角色

然后重启服务远程访问应该可以了

mongoadmin

git地址在这里 需要有git,node ,npm(用yum安装,我用宝塔失败了)
进入adminmongo,npm install 按照github说的编辑这个文件,添加

{
    "app": {
        "host": "0.0.0.0",
        "port": 4321,
        "password": "自己设置一个密码",
        "locale": "en",
        "context": "dbApp",
        "monitoring": false
    }
}

不过注意的是没有中文,把de改为en,host改为0.0.0.0全监听然后一个密码
最后npm start 进入你的ip(不是云服务器的话就是127)http://127.0.0.1:1234

上面那个是我新建好的,给你的连接起一个名字,然后string的地方
mongodb://用户名(root):你adduser的密码@127.0.0.1:/
完成!

# 操作

win下命令行直接mongod --dbpath 某个文件夹路径

  • db; 查看自己现在在那个db下面
  • show; dbs 显示所有的db
  • use **; 使用某个db,没有的话自己创建

# Redis

用途

存在于内存中的,分布式,高性能缓存数据库 数据库、缓存和消息中间件

类型

字符串(strings) 散列(hashes) 列表(lists) 集合(sets) 有序集合(sorted sets)

# 安装可视化远程连接

首先安装redis
yum install epel-release

yum install redis
一路按y就行了
vim /etc/redis.conf 修改配置文件
bind 127.0.0.1 改为 0.0.0.0
protected-mode 注释掉
requirepass 你的密码

WARNING

配置文件项前面不能有空格,靠到最右边

可视化

下载(我也很奇怪为什么在这种xx软件站上下载但是这个能用) 直接解压,jre和jar包+exe都解压出来放在一个文件夹下,直接运行

# 操作

操作需要密码auth + 你的密码就可以了
或者登陆验证 redis-cli -h 127.0.0.1 -p 6379 -a 你的密码

  • 字符串(String)相关操作

    [root@izuf6720onwdpnl2xfy65lz ~]# redis-cli
    127.0.0.1:6379> set cat 铃铛
    (error) NOAUTH Authentication required.
    127.0.0.1:6379> auth 你的密码
    OK
    127.0.0.1:6379> set cat 铃铛
    OK
    127.0.0.1:6379> get cat
    "\xe9\x93\x83\xe9\x93\x9b"#中文编码问题
    127.0.0.1:6379> ls
    (error) ERR unknown command `ls`, with args beginning with:
    127.0.0.1:6379>
    127.0.0.1:6379> mset user1 a user2 b
    OK
    127.0.0.1:6379> mget user1 user2 animal
    1) "a"
    2) "b"
    3) (nil)#这个意思是这个值不存在
    127.0.0.1:6379> del user1
    (integer) 1#受影响的字符串长度
    127.0.0.1:6379> get user1
    (nil)
    127.0.0.1:6379> append animal cat
    (integer) 3
    127.0.0.1:6379> get animal
    "cat"
    127.0.0.1:6379> append cat cat
    (integer) 9
    127.0.0.1:6379> get cat
    "\xe9\x93\x83\xe9\x93\x9bcat"
    127.0.0.1:6379> get user1
    (nil)
    127.0.0.1:6379> delete user1#打错了....
    (error) ERR unknown command `delete`, with args beginning with: `user1`,
    127.0.0.1:6379> del user1
    (integer) 0
    127.0.0.1:6379>
    
  1. set--设置值
  2. get--获取值
  3. mset--设置多个键值对
  4. mget--获取多个键值对
  5. append--添加字符串
  6. del--删除
  7. incr/decr--给这个数字值加减1(因为是给字符串表示的数字,所以这么设置)
    很多情况下会设置user:jhon;age:17 '123445'存储用户信息

过期设置

set cat 铃铛 EX 数字(多少秒之后过期)

  • 列表(List)相关操作
    :::wanring 本篇的l都可以替换成r,从左操作还是从右操作 :::
  1. lpush listname a b c d -- 依次放到列表中a,b,c,d
  2. blpop listname 数量 超时 -- 从列表的左端拿出数量的元素若不够就等待超时时间返回nil/成功返回列表名字和元素的值没有元素就会被删除
  3. brpoplpush a b timeout --从a的左边拿出一个放到b的右边
  4. lindex listname 3 -- 从列表中拿出下标为3的元素从1开始数
  5. llen listname -- 获得列表长度
  6. lpop listname -- 拿到一个左端元素
  7. lrange listname 开始 结束-- 从左开始拿开始到结束
  8. lrem listname 几次 值 -- 把列表中的值移除几次如果设置为1一处过一次就不再移除了
  • 集合(Set)相关操作
  1. sadd setname v v v v v -- 把这些v都添加到集合中去自己就会去重
  2. sismember setname v --看看这个v在不在这里面
  3. smembers setname -- 所有的成员
  4. sdiffer a b -- 返回a和b的差集
  5. sdifferstort a b c --把b和c的差集保存在a中(会更新a)
  6. sinter a b --返回a b的交集
  7. sinterstore a b c --将b和c的交集存在a中
  8. sunion a b--返回a b的并集
  9. sunion a b c-- 把b c 的并集放在a中
  • 有序集合

  • 散列(Hash)相关操作

  1. hmset(Hash many set)hashname k v k v --一次设置多个键-值对,同样可以用hset hashname k v 设置一个
  2. hmget(Hash many set)hashname k k k --通过多个键一次拿取多个值,同样可以用hget hashname k 拿到一个
  3. hgetall hashname -- 拿到这个hash的所有映射
  4. hlen hashname -- 查看长度
  5. hexists hashname k -- 看看这个k在不在hash中,在就返回1不再返回0
  6. hkeys hashname --拿到所有的k
  7. hvals hashname--拿到所有的value
  8. hsetnx hashname k-- k不存在的时候才设置这个k存在了就不动
  9. hincrby hashname k value--给k字段(整数)+value
  10. hincrbyfloat hashname k value --给k字段(浮点)+value

# RabbitMQ

服务无法启动

Last Updated: 11/8/2019, 3:50:25 PM