Nosql里典型的数据库
Nosql里典型的数据库 Redis 对网站服务器进行写入 传统关系式数据库无法过多的写入 对数据库要求: 数据库高并发读写需求 解决方案: (1:读写分离 两台主如果同时写入会发生冲突 (2:水平分割: 关系式数据库 数据之间有操作
海量数据的高效率存储和访问的需求 用户如果在海量数据中查询某一条数据 记录 数据库的高扩展性和高可用性 ############################################### 任何一个领域,如果不能通过自己的努力 去获取或者超出其他人的竞争优势的话 想胜出,确实挺困难的!!! ################################################ 关系型数据库: 关系:可以理解为一张二维表,每个关系都具有一个关系名,就是通常说的表名。 元组:可以理解为二维表中的一行,在数据库中经常被称为记录。 属性:可以理解为二维表中的一列,在数据库中经常被称为字段。 域:属性的取值范围,也就是数据库中某一列的取值限制。 关键字:一组可以唯一标识元组的属性。数据库中常称为主键,由一个或多个列组成。 关系模式:指对关系的描述,其格式为:关系名(属性1,属性2,…,属性N)。在数据库中通常称为表结构。 Nosql版本 存储方式不一样 Redis 存在缓存中 很稳定资格较老,成熟方案较多 mongoDB 存在文件中 社区活跃,更新活跃 HBASE memcached:数据只保存在缓存中 cassandra sequoiaDB:只跟ibm捆绑 redis 通过键值存储数据 键值对应数据如变量 Memcache 速度较快、不能备份、支持十几万QPS (对一个服务器在一个时间范围内处理 的数据量的多少) MONGODB 文档型的数据库,查询功能强大,支持 索引,最接近关系式数据库的nosql 结构相对单一 REDIS 基于缓存,速度较快,支持多种数据结构 消耗内存相对较多,支持数万的QPS 通过其他软件配合支持本地存储 Redis安装配置: 1:安装gcc* /usr/src/ Redis-3.0.3.tar.gz Tcl-8.5.7-6.e16.x86 Tar ?Czxvf redis-3.03 Cd redis-3.03 Make Rpm ?Civh Tcl-8.5.7-6.e16.x86 make test make PREFIX=/usr/local/redis install redis-check-aof redis-check-dump 以上为两种日志 Cd!$ Vim redis.config /daemonize Daemonize yes后台运行 如果我想看一下数据库里有什么键值 Keys * Set age 19 Set设置 Get查看 测试指定的并发类型
官方网站:http://www.redis.cn/ Redis.io String字符串 String字符串在一个键里面只能有一个值 Set设置键 Get查看键 ./redis-cli 防止覆盖: Setnx name zhangsan 显示为0不成功 Setnx name1 zhangsan 显示为1则成功创建 Setex aa 30 111设置临时的键 Ttl aa查看生存周期 -1为永久生效 -2目标键为不存在 Hexists c b3 批量设置多个键: MSET a3 333 a4 444 a5 555 成功返回ok,失败返回0 mget批量查看键 msetnx批量设置新建,防止覆盖 MSETNX a5 555 a6 aaa 替换操作 Set b1 ‘hi zhangsan’ Get b1 替换指定键的键值从3里面开始替换 SETRANGE b1 3 lisi (替换的内容) Get b1查看原值,并替换新值 整个内容替换成别的值并可以查看原来的值 Getset b1‘hello zhangsan’查看新值并替换新值 Getrange b1 0 5查看部分键值 查找第一个到第五个字符 键值增减 Set c1 1 Set c2 2 Get c1 INCR c1 以上会发生增加变化如果不想让他加1 yici加10 INCRBY c1 +10 (必须为整数)则依次增长10
DECRBY c1 10则每次执行依次减10 APPEND b1 lisi追加内容为lisi四个字符 Strlen b1查看键值长度 Del b1删除b1只能一次删除一个 Hash字符串 在一个键里面可以有多个值
Hset d1 name1 zhangsan创建一个为hash字段 键名字段键值 HGET d1 name1查看d1键名中name1字段值 一个键里面存放两组数据 Hsetnx设置新建防止它覆盖 HSETNX d1 name3 xxx1为成功 Hmget d1 name1 name2 name3批量查看字段的值 Hkeys查看指定键中的字段名称: HKEYS d1只查看名字 Hgetall查看指定键的值 HDEL d1 name3删除指定字段 Hset d2 a 1 字段名a数值1 Hkeys d2 Hincrby d2 a 5增加指定字段的值 List双向队列 双向队列就是一种特殊的string类型 只是做了一个排序有一个前后顺序
服务在建立连接的时候有个队列 如何将这些消息排成一列进行管理 有一个先后顺序服务质量 队列里的每一个数据就可以看成一个string数据类型 有两种排列顺序一种是从左到右0 1 2 3 一种是从右到左-1 -2 -3 0 1 2 3个数据 Lpush list1 1从左往右插入 Lpush list1 2 Lrange list1 0 -1查看从左边第一个到右边第一个 Rpush list2 one two three four从右往左插入 Lrange list2 0 -1查看 Linsert list2 before two 3 hi After (在之后) 插入到队列lisi2中在two之前插入了hi
Lset list2 1‘five’在list2中从左往右第二个位置把hi改为five Rpush list3 hi 1 hi 2 hi 3 hi 4 Lrange list3 0 -1查看总共八个元素 Lrem list3 -2 hi删除指定队列中重复的元素 把倒数第一个第二个给删除 Lrange list1 0 -1查看 Ltrim list1 1 2删除list1表里面第1个第2个 Lrange list1 0 -1查看已经删除 Lpush list8 11 12 13 14 15 16新建队列 Ltrim list8 0 3保留前三个 Lrange list8 0 -1查看所有 Lpop list8 删除指定队列中左边的第一个元素 Rpop list8删除指定队列中右边的第一个元素
如果我想删除的同时还能够把这个 元素放到其他队列里 Lrange list8 0 -1 Lrance list2 0 -1 Rpoplpush list8 list2将list8队列中的最后一个元素 移动到list2队列中 Llen查看队列长度 Lien list2 1通过下标来查看队列中元素的值 Lindex list2 0 Zset有序集合 Sorted set(zset)是set的升级版本, 它在的基础上增加了一个顺序属性, 这一属性在添加修改元素的时候可以指定, 每次指定后,会自动重新按新得值调整顺序。 可以理解为有两列的mysql表, 一列存value,一列存顺序。操作中key理解为的名字。 Set 如qq中的好有推荐 值分数下标 Sadd q1 1添加集合 Smembers q1查看集合所有元素 Sadd q1 234 Srandmember q1随机调用值 Spop q1随机删除一个值 Srem q1 4指定随机删除一个值 Scard q1查看总共有几个元素 Sismember q1 3查看3是否为集合里的元素 Sadd q2 1 2 3 4 Sadd q3 3 4 5 6 Sdiff q2 q3查看查集以第一个指定集合为主 Sdiffstore q4 q3 q2查看并把q3 q2集合写入q4 Smembers q4 Smembers q2查看集合中所有元素 Smembers q3 Sinter q2 q3查看交集 Sinterstore q8 q2 q3需要有一样的才能保存到新集合 查看交集并保存到新集合 Sunion q2 q3查看并集 Sunionstore q9 q2 q3 Smove q2 q3 1先写源集合在写目标集合把q2的值移动到q3中 移动集合中的元素 有序集合:比原来的集合多一个分数 能够实现实时同步 Zadd z1 1 aa 3 bb 2 cc 2 dd Zrange z1 0 -1分数是按照从小到大的排序 查看集合内元素 Zrange z1 0 -1 withscores分数是按照从小到大的排序 Zrevrange z1 0 -1 withscores 会按照分数从大到小排列 Zrangebyscore z1 2 3 withscores 查看分数从2到3的 Zrem z1 dd 删除值 Zincrby z1 5 aa Zincrby z1 4 dd创建出来并把分数设为4 添加分数如不存在则创建 Zrange z1 0 -1 withscores Zrank z1 aa 按照分数从小到大的顺序获取指定值的下标 Zrevrank z1 aa按照分数从小到大顺序获取指定值的下标 Zcard z1统计集合中元素个数 Zcount z1 4 10统计指定分数范围内的元素个数 Zrank z1 cc Zremrangebyrank z1 1 2删除了bb和dd 删除下标在指定范围内的元素 Zremrangebyscore z1 1 3 根据分数来删除1到3之间的 删除分数在指定范围内的元素 Zadd z2 1 one 2 two 3 three Zadd z3 2 two 3 three 3 four Zinterstore z4 2 z2 z3做交集 用z4做集合、有两个分别是z2、z3 Zrange z4 0 -1查看他们的交集是对了两边都有 Zrange z4 0 -1 withscores取交集并保存至新集合 有序集合取出以后分数是要叠加的 在有序集合里插集无意义因为没有那个命令 并集: Zrange z2 0 -1 withscores创建one1 two2 three3 Zrange z3 0 -1 withscores创建two2 three3 four4 Zunionstore z5 2 z2 z3取并集并保存至新集合(分数叠加) Zrange z5 0 -1 withscores查看新集合 全局的管理命令 Keys * Dbsize统计键的数量 Exists a2查看某个键是否存在0不存在1存在 -1永久-2临时 Ttl a2 Expire q4 20可以设置为生效时间的键 设置q4有效时间为20秒 Ttl q4会有变化 Rename d1 d2改名将d1改为d2 Type a1查看键的数据类型 (如string list set zset) Info查看版本信息 Select 1选择去哪一个数据库默认为0数据库 一共有0-15 16个数据库 Move d2 1把一个键移动到其他数据库中 在当前数据库中就无法看到d2啦! Select 1到1数据库里就可以看到啦! Flushdb清空当前数据库 Flushall清空所有数据库(16个数据库里变量) 数据库应用
密码验证: Yum ?Cy install gcc* make make test Cd /usr/local/redis Vim redis.conf打开主配置文件 Daemonizeyes设置为后台启动 /requirepass搜索 Requirepass 123.com去掉注释写入密码 Wq! Pkill redis重启一下redis ./bin/redis-server ./redis.conf ./bin/redis-cli登入 Keys *会看不到任何的内容 Auth 123.com需要提供认证认证 或者登入的时候加选项指定密码?Ca 123.com 备份: Nosql是能保存数据的nosql 是怎样来保存的! /usr/local/redis/bin/redis-server空格 /usr/local/redis/redis.conf开启服务 以上为一行 /usr/local/redis/bin/redis-cli ?Ca 123.com登入 Keys *就能看到啦 Save保存 Exit Pkill redis Cd /root/ /usr/local/redis/bin/redis-server /usr/local/redis/redis.conf /usr/local/redis/bin/redis-cli ?Ca 123.com Keys *为空的! Vim /usr/local/redis/redis.conf /dir /usr/local/redis(修改以前为dir ./) 开启 /usr/local/redis/bin/redis-cli -a 123.com登入 Keys *就会看到有不用去配置文件找 主从同步: 实验需求:一台服务器上做主从 需要在一台服务器上创建两个工作目录 Mysql mysqld 1从:从服务器的配置(一台服务器上) Cd /usr/local/redis/进入工作目录 Ls会看到主配置文件redis.conf Cd /usr/local/ Cp -r redis/ redis-slave/ Ls就会有两个工作目录 Vim redis-slave/redis.conf Pidfile /usr/local/redis-slave/redis.pid修改为这个文件 Port 6380改端口 dir /usr/local/redis-slave (修改以前为dir ./) /slaveof查找/ slaveof 127.0.0.1 6379主服务器ip、端口 masterauth 123.com wq! /usr/local/redis-slave/bin/redis-server空格 /usr/local/redis-slave/redis.conf 以上两行为一行 netstat -anpt查看端口有6380 6379 验证登入主服务器(在一台机器上做) /usr/local/redis/bin/redis-cli ?Ca 123.com Keys *有变量 Set bb 111创建一个bb 用从服务器登入 Keys * 看到bb则代表创建成功 如果是在两台服务器上搭建则只需要 从服务器主配置文件里从服务器的ip地址指到主就行 Redis的五种数据结构以及使用场景介绍 String――字符串 1.String――字符串 String数据结构是简单的key-value类型,value不仅可以是,也可以是数字(当数字类型用Long可以表示的时候encoding就是整型,其他都存储在sdshdr当做字符串)。使用Strings类型,可以完全实现目前Memcached的功能,并且效率更高。还可以享受Redis的定时持久化(可以选择RDB模式或者AOF模式),操作日志及Replication等功能。除了提供与一样的get、setincrdecr等操作外,还提供了下面一些操作: 1.LENniushuai:O(1)获取字符串长度 2.APPENDniushuairedis:往字符串append内容,而且采用智能分配内存(每次2倍) 3.设置和获取字符串的某一段内容 4.设置及获取字符串的某一位(bit) 5.批量设置一系列字符串的内容 6.原子计数器 7.GETSET命令的妙用,请于清空旧值的同时设置一个新值,配合原子计数器使用 1.Hash――字典 存储、读取、修改用户属性 1.List――列表 1.微博TimeLine 2.消息队列 Set――集合 1.共同好友、二度好友 2.利用唯一性,可以统计访问网站的所有独立IP 3.好友推荐的时候,根据tag求交集,大于某个threshold就可以推荐 Sorted Set――有序集合 和Sets相比,Sorted Sets是将Set中的元素增加了一个权重参数score,使得集合中的元素能够按进行有序排列,比如一个存储全班同学成绩的,其集合value可以是同学的学号,而就可以是其考试得分,这样在数据插入集合的时候,就已经进行了天然的排序。另外还可以用来做带权重的队列,比如普通消息的为1,重要消息的2,然后工作线程可以选择按的倒序来获取工作任务。让重要的任务优先执行。 1.带有权重的元素,比如一个游戏的用户得分排行榜 二、其他功能使用场景 订阅-发布系统 Pub/Sub从字面上理解就是发布(Publish)与订阅(Subscribe),在中,你可以设定对某一个key值进行消息发布及消息订阅,当一个值上进行了消息发布后,所有订阅它的客户端都会收到相应的消息。这一功能最明显的用法就是用作实时消息系统,比如普通的即时聊天,群聊等功能。
2:事务――Transactions 谁说NoSQL都不支持事务,虽然Transactions提供的并不是严格的ACID的事务(比如一串用EXEC提交执行的命令,在执行中服务器宕机,那么会有一部分命令执行了,剩下的没执行),但是这个还是提供了基本的命令打包执行的功能(在服务器不出问题的情况下,可以保证一连串的命令是顺序在一起执行的,中间有会有其它客户端命令插进来执行)。还提供了一个Watch功能,你可以对一个进行,然后再执行,在这过程中,如果这个Watched的值进行了修改,那么这个会发现并拒绝执行。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |