赞
踩
数据库的作用:数据仓库(存储大量的数据)
1.关系型数据库 :存储数据时采用表来存储数据,表和表之间是可以建立起关联关系,关系型数据库中除了表的概念外,还有视图,索引,触发器,存储过程,事务...... 关系型数据库在操作时,采用的时sql语句(命令)来操作数据库
2.非关系型数据库:存储在计算机的缓存中,没有表的概念,以 "键值对" 的方式来存储数据。
而非关系型数据库是没有sql语句的
key1 ------------------ value1
key2 ------------------ value2
key3 ------------------ value3
NoSQL(not only sql),意思为不仅仅是sql,泛指非关系型数据库。
随着互联网网站的兴起,传统的关系型数据库在应付动态网站,特别是高并发和超大规模的纯动态网站已经显得力不从心,暴露了很多难以克服的困难。如 商城网站中对商品信息进行频繁查询、热搜商品排行的统计、订单超时问题以及微信的朋友圈(音频、视频的存储)等使用关系型数据库实现就会显得非常复杂。NoSQL这个技术门类的出现,更好的解决了这些问题。
# 1.说明: - 这一类的数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据 # 2.特点 - 对于IT系统的优势在于简单、易部署 - 只对部分值进行更新时,效率低 # 3.相关产品 - Redis (内存中) - SSDB (硬盘中)
# 1.说明 - 这部分数据库通常是用来应对分布式存储的海量数据 # 2.特点 - 键仍然存在,但它的特点是指向了多个列。这些列由列家族来安排 # 3.相关产品 - HBase(用列来存储数据的)
# 1.说明 - 它是一种跟键值存储类似的数据库,该数据的类型模型是模板化的文档,比如JSON # 2.特点 - 以文档形式存储 - 查询效率高 # 3.相关产品 - MongoDB
# 1.说明 - 以灵活的图形模型,并且能扩展到多个服务器上 (二进制数据的处理) # 2.相关产品 - Neo4J、InfoGrid
数据模型比较简单
需要灵活性更强的IT系统
对数据库性能要求较高
不需要数据的高度一致性(离不开关系型数据库)
内存型非关系型数据库 (读写快)
# 1.高性能的key-value内存型数据库 # 2.支持丰富的数据类型 string(字符串) ;2、hash(哈) ;3、list(列表) ;4、set(集合) ;5、5orted set (有序集 台) zset类型 # 3.Redis支持持久化(可以将内存中的数据持久化到硬盘中) # 4.Redis单线程,单进程(线程安全)
# 1.准备环境 - vmware workstation - centos 7.+ # 2.下载源码包 http://download.redis.io/releases/redis-4.0.10.tar.gz # 3.将下载后的源码包上传到linux系统中并解压缩 # 4.安装gcc (用来编译C语言的依赖库) - yum install -y gcc # 5.进入到redis源码包的解压目录执行如下命令进行编译 - make MALLOC=libc # 6.编译完成后执行如下命令安装Redis - make install PREFIX=/usr/local/software/redis # 7.进入Redis安装目录下bin目录中,启动Redis服务器(默认端口 6379) - cd /usr/local/software/redis/bin - ./redis-server 启动Redis服务器 # 8.客户端连接redis服务器端 - 克隆新会话,进入redis安装目录的bin目录中启动客户端并连接Redis服务器端 - cd /usr/local/software/redis/bin - ./redis-cli -h 192.168.xxx.xx -p 6379 - 本地直接指向./redis-cli即可
# 1.redis启动服务的细节 - 注意:直接使用./redis-server方式启动是redis-server这个shell脚本的默认配置 # 2.如何在启动Redis时使用默认配置文件启动? - 注意:在安装完redis后安装目录中没有任何配置文件,需要在源码目录中复制配置文件redis.conf 到安装目录,步骤如下: # 2-1:进入源码目录中,复制redis.conf文件到redis安装目录中 - cp redis.conf /usr/local/software/redis # 2-2:进入redis安装目录中,查看配置文件 - cd /usr/local/software/redis - ls - 修改配置vim ./redis.conf 把6379修改为6380 # 2-3:进入安装目录的bin目录,加载配置启动 - ./redis-server ../redis.conf - 克隆新会话 - ./redis-cli -p 6380 --raw - 也可以 - ./redis-cli -h 192.168.xxx.xx -p 6380 --raw [root@localhost bin]# vim /usr/lib/firewalld/services/ssh.xml [root@localhost bin]# systemctl restart firewalld.service
# 1.redis中的库用来存放数据的基本单元,1个库中可以存放key-value的键值对 # 2.redis中每一个库都有一个唯一名称,编号从0开始,默认库的个数为16个,意味着库的名称是从0~15,默认使用的数据库是 0 # 3.切换库 - select 库名称 - 例:select 1 # 4.redis中清除库的指令 - 4.1:FLUSHDB 清除当前库中数据 - 4.2:FLUSHALL 清除所有库中的数据
# 1.查询库中所有的key keys * # 2.添加key set key value 例:set name ztf # 3.删除key del key1 key2 .. keyn 例:del name age birthday # 4.判断指定的key是否存在,存在返回1,不存在则返回0 exists key 例:exists name # 5.设置key的生存时间(s),设置成功返回1(秒为单位) expire key seconds 例:expire name 5 # 10.查看key的过期时间(超时时间)返回秒,返回-1为永久key,返回-2为不存在key,返回其他指超时时间 ttl key 例:ttl name # 9.设置key的生存时间(ms),设置成功返回1 (毫秒为单位) pexpire key milliseconds # 11.查看key的过期时间(超时时间)返回毫秒 pttl key 例:pttl name # 6.通配符 * 匹配任意多个字符 ? 匹配一个字符 例:keys n?me [] 指定范围 # 7.移动key到指定的库 move key database 例:move name 2 # 8.获取中文数据时需要更改客户端连接方式,添加后缀 --raw ./redis-cli -p 6379 --raw # 12.随机返回一个key(幸运抽奖) RANDOMKEY # 13.重命名key rename oldkey newkey 例:rename name names # 14.查询key的类型,返回none代表查找的key不存在 type key 例:type names
redis中的数据类型和java中数据类型是完全不一样的(两码事)
redis中的数据类型类似于java中的集合框架
# key - value 均为 string类型 # string类型常用指令 1.set:设置一个key/value 例:set name ztf 2.get:根据key获取对应的value 例:get name 3.mset:一次性可设置多个key/value 例:mset name ztf age 18 height 1.75 4.mget:一次性可获取多个key的value 例:mget name age height 5.getset:获取原始key的值,同时设置新值 例:getset name ztf2 6.strlen:获取对应key存储的value的长度 例:strlen name 7.append:为对应的key的value追加内容 例:append name 22 8.getrange(索引0开始):截取value的内容 -1代表末尾 例:getrange name 0 2 9.setex:添加数据并且设置key的有效期(以秒为单位) 例:setex sex 10 boy 10.psetex:添加数据并且设置key的有效期(以秒为单位)(毫秒) 例:psetex sex 10 boy 11.setnx原子操作:如果redis中存在key则不做任何操作,否则就增加数据 例:setnx name zhangsan NOTE:如果存在name这个key,则返回0,数据未发生改变,如果不存在name这个key,则做添加数据的操作 12.msetnx原子操作:如果redis中存在多个key则不做任何操作,否则就增加数据 例:msetnx name zhangsan age 18 13.decr:对字符串是数值型的值依次减1 例:decr age 14.decrby:根据提供的数据做相应的减法操作 例:decrby age 10 依次减10 15.incr:对字符串是数值型的值依次加1 例:incr age 16.incrby:根据提供的数据做相应的加法操作(整数) 例:incrby age 2 依次加2 17.incrbyfloat:根据提供的数据做相应的加法操作(小数) 例:incrbyfloat age 0.5
# 相当于java中的list集合,元素有序,且可以重复
# key:string value:list # list类型常用指令 1.lpush:创建一个列表并设置多个值(从左边添加值) 例:lpush lists zhangsan lisi xiaoming 2.lrange:获取某一下标区间内的元素 例:lrange lists 0 -1 获取lists中下标从0到末尾的值 3.llen:获取list列表的长度 例:llen lists 4.rpush:创建一个列表并设置多个值(从右边添加值) 例:rpush lists wangwu maliu 6.rpushx:给 “已创建的列表” 中添加值,如果列表不存在则返回0(列表中的key必须存在) 例:rpushx ages 18 7.lpop:返回并且移除列表左边的第一个元素 例:lpop lists 8.rpop:返回并且移除列表右边的第一个元素 例:rpop lists 9.lset:根据指定的索引更改值,索引必须存在 例:lset lists 3 wangerxiao 10.lindex:根据指定的索引获取对应的列表中的值 例:lindex lists 3 11.lrem:移除列表中重复元素 例:lrem lists 2 lisi 12.ltrim:保留列表中特定区间内的值(根据索引) 例:ltrim lists 0 1 13.linsert:在某一元素之前或者之后插入新的元素 例:linsert lists after xiaoming 666 在元素xiaoming后插入新的值666 例:linsert lists before xiaoming 666 在元素xiaoming前插入新的值666
# 相当于java中的set集合,元素无序(无索引,无下标),且不可以重复
# key:string value:set # set类型常用指令 1.sadd:为集合添加元素 例:sadd sets zhangsan lisi wangwu maliu 2.smembers:查看集合中所有元素 例:smembers sets 3.scard:查看集合中所有元素的个数 例:scard sets 4.spop:随机返回集合中一个元素,并将该元素中集合中删除 例:spop sets 5.smove:从一个集合向另一个集合移动元素 例: sadd sets2 18 19 20 - 创建新的set集合 smove sets sets2 lisi - 将sets集合中的lisi移动到sets2中 6.srem:从一个set集合中删除指定的元素(可删除多个) 例:srem sets lisi 7.sismember:判断集合中是否有指定的元素(包含返回1) 例:sismember sets wangwu 8.srandmember:随机返回元素(可指定返回的元素个数) 例:srandmember sets2 9.sinter:求多个集合的交集 例:sinter sets sets2 10.sunion:求多个集合的并集 例:sunion sets sets2
# 元素无序,且不可重复,但是可根据一定的条件排序,每个值都带有一个 “分数”
# key:string value:Zset # Zset类型常用指令 1.zadd:添加一个有序集合元素 例:zadd names 1 zhangsan 2 lisi 3 wanger NOTE: 1 2 3 指每个值的分数,可随意自定义 2.zrange:返回一个范围内的元素 例:zrange names 0 -1 withscores NOTE:0 -1 从开头到末尾 withscores 可查看分数 3.zcard:返回集合中元素的个数 例:zcard names 4.zrangebyscore:按照分数查找一个指定范围内的元素 例:zrangebyscore names 0 2 withscores 5.zrank:返回排名 例:zrank names lisi 6.zrevrank:倒序排名 例:zrevrank names wanger 7.zscore:显示某一元素的分数 例:zscore names wanger 8.zrem:移除某一元素 例:zrem names wanger
# 类似于Java中的map类型,相当于map中又嵌套了一个map # key是string类型 value是一个Map结构(key-value)
# Hash类型常用指令 1.hset:设置一个键值对 例:hset maps name ztf maps:redis中的键 name键 ztf值:redis中键对应的值 2.hget:获得一个key对应的value 例:hget maps name 3.hgetall:获得所有的键值对(Hash的遍历) 例:hgetall maps 4.hdel:删除hash中的某一个键值对 例:hdel hash name 5.hexists:判断hash中某一个key是否存在(存在返回1,不存在返回0) 例:hexists hash age 6.hkeys:获取hash中所有的键 例:hkeys hash 7.hvals:获取hash中所有的值 例:hvals hash 8.hmset:设置多个键值 例:hmset hash address bj height 1.75 9.hmget:获取多个key的value值 例:hmget hash name age address 10.hsetnx:设置一个不存在的键的值,如果存在键则不做任何操作,否则就添加数据 例:hsetnx hash name ztf 11.hincrby:给指定的值做加法运算 例:hincrby hash age 1 12.hincrbyfloat:给指定的值做加法运算(增加浮点型数据) 例:hincrbyfloat hash age 1.5
# NOTE: Redis服务器默认是没有开启远程连接的,也就是拒绝所有客户端工具访问。 # Redis 开启远程连接的步骤 1.vim编辑Redis安装目录中 redis.conf 文件,找到 bind 127.0.0.1 修改为 0.0.0.0(允许一切客户端连接) 2.修改完配置文件后一定要重启Redis服务器,重启时千万记得一定要加载配置文件启动,否则不生效
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。