加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

NOSQL相关入门掌握知识,你过关了吗

发布时间:2020-12-13 14:06:58 所属栏目:百科 来源:网络整理
导读:《NOSQL相关入门掌握知识,你过关了吗》要点: 本文介绍了NOSQL相关入门掌握知识,你过关了吗,希望对您有用。如果有疑问,可以联系我们。 什么是noSQL not only sql 非关系型数据库 为什么必要NoSQL web2.0大规模动态网站的兴起 high performance,高并发读

《NOSQL相关入门掌握知识,你过关了吗》要点:
本文介绍了NOSQL相关入门掌握知识,你过关了吗,希望对您有用。如果有疑问,可以联系我们。

  • 什么是noSQL

  • not only sql

  • 非关系型数据库

  • 为什么必要NoSQL

  • web2.0大规模动态网站的兴起

  • high performance,高并发读写,动态页面展示与交互,好比微博点赞评论等操作,实时统计在线人数排行榜等

  • huge storage,海量数据的高效存储和拜访,大型网站的用户登录系统

  • high scalability && high availability,高可扩展性和高可用性

  • 主流NOSQL产品

  • redis,mongodb,couchdb

  • NoSQL的特点

  • 易扩展

  • 灵活数据模型

  • 大数据量,高性能

  • 高可用

  • NoSQL数据库的四大分类

  • 键值存储,redis

  • 优势,快速查询

  • 劣势,存储数据缺少结构化

  • 列存储,hbase

  • 优势,功能局限

  • 文档数据库,mongodb

  • 优势,数据结构要求不严格

  • 劣势,查询性能并非特别高,缺少统一查询的语法

  • 图形数据库,infogate

  • 优势,社交网络,利用图结构的相关算法

  • 劣势,必要对整个图做算法分析,不利于分布式方案

NOSQL相关入门掌握知识,你过关了吗

回到顶部(go to top)

2 redis概述

C语言编写的高性能键值对数据,支持的键值数据类型:

  • 字符串类型

  • 列表类型

  • 有序集合类型

  • 散列

  • 集合类型

Redis的应用场景:

  • 缓存

  • 网站拜访统计

  • 任务队列

  • 数据过期处理

  • 应用排行榜

  • 分布式集群架构中的session分离

回到顶部(go to top)

3 redis安装和使用

3.1 redis安装

  • 依赖环境

  • gcc-c++

1 环境准备

#官网下载 redis 3.2.5版本wget http://download.redis.io/releases/redis-4.0.1.tar.gz #安装 C 编译环境 yum -y install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc gcc-c++2安装 解压安装包后,进入文件目录编译,编译结束时,会提示 Hint: It's a good idea to run 'make test',建议在安装前先测试预安装下,make test预安装后,遇到错误:You need tcl 8.5 or newer in order to run the Redis test,缺失安装包tcl,所以必要先安装这个 安装包后再次运行 make test,正常后再进行redis安装. 详细步骤如下: #解压二进制包tar -zvxf /opt/redis-3.2.5 #进入到文件目录cd redis-3.2.5 #编译make #测试安装(稍微耗费点时间)make test #可能会提醒必要安装最新版的tcl#yum install tcl #指定路径安装make PREFIX=/usr/local/redis install

安装结束后,进入到安装路径中,

[root@bogon bin]# ls -lh /usr/local/redis/bin/

total 22M

-rwxr-xr-x. 1 root root 2.4M Aug 13 18:40 redis-benchmark

-rwxr-xr-x. 1 root root 5.5M Aug 13 18:40 redis-check-aof

-rwxr-xr-x. 1 root root 5.5M Aug 13 18:40 redis-check-rdb

-rwxr-xr-x. 1 root root 2.5M Aug 13 18:40 redis-cli

lrwxrwxrwx. 1 root root 12 Aug 13 18:40 redis-sentinel -> redis-server

-rwxr-xr-x. 1 root root 5.5M Aug 13 18:40 redis-server

这几个指令用途分别是:

  • redis-benchmark

  • 性能测试工具

  • redis-check-aof

  • aof文件修复工具

  • redis-check-rdb

  • rdb文件检查工具

  • redis-cli

  • redis客户端

  • redis-server

  • redis服务器启动命令

  • redis-sentinel

3.2 配置文件修改

按 Ctrl+C 复制代码

按 Ctrl+C 复制代码

3.3 服务启动与关闭

按 Ctrl+C 复制代码

按 Ctrl+C 复制代码

回到顶部(go to top)

4 redis-py的入门

redis有支持非常多种语言编写的客户端,可以从官网查看 https://redis.io/clients,redis-py是redis官方网站首选的python客户端开发包,本人只会点点python,所以从这个入门.

redis-py的github地址:https://github.com/andymccurdy/redis-py

回到顶部(go to top)

5 redis数据类型

键值对种key的注意事项:

  • 不要过长

  • 最好不要超过1024个字节

  • 不仅消耗内存,也影响查找效率

  • 不要过短

  • 好比设置为a,没有实际意义,可能会降低key的可读性

  • 统一命名规范

5.1字符串 string

string中的一个key对应一个value,values最长可达512Mb.

string常用命令:

  • 赋值

  • set key value

  • 取值

  • get key

  • 取值后赋值

  • getset key value

  • 数值增减

  • 自增1

  • 如果该key不存在,则创建该key,并赋值为0,0自增后为1,等同于增加 【key,1】键值对

  • 如果该key存在,则value自增加1

  • incr key

  • 自减1

  • 如果该key不存在,0自减后为-1,-1】键值对

  • 如果该key存在,则value自减1

  • decr key

  • 自增指定值

  • 如果该key不存在,0自增numbers,numbers】键值对

  • 如果该key存在,则value自增numbers

  • incrby key numbers

  • 自减指定值

  • 如果该key不存在,0自减numbers,-numbers】键值对

  • 如果该key存在,则value自减numbers

  • decrby key numbers

  • 删除

  • del key

  • 扩展

  • value追加string内容

  • append key string

5.2 哈希 hash

hash可以存储多个键值对之间的映射,它就像是一个迷你型的redis.

  • 赋值

  • hset key field value

  • hmset key field value [field value ... ]

  • 取值

  • hget key field

  • hmget key field [field ...]

  • hgetall key

  • 增加数字

  • hincrby key field number

  • 删除

  • hdel key field

  • del key

  • 自学命令

  • hexists key field

  • hlen key

  • hkeys key

  • hvals key

5.3 字符串列表 list

lish的顺序是依照插入的顺序,可以在头部跟尾部插入数据,如果是在list的两头进行操作,那么效率是很高的,但是如果在list中,则会耗费一定时间.

list的类型:

  • arraylist使用数组方式

  • 根据索引查询速度是非常快的

  • 但是新增跟删除操作涉及到位移操作,则会比拟慢

  • linkedlist使用双向链接方式

  • 每个元素都记录了前后元素的指针,删除跟新增只必要修改前后指针,数据操作较快

list常用的命令:

  • 两端添加

  • lpush key value [value ...]

  • rpush key value [value ...]

  • 查看列表

  • lrange key start stop

  • 指定位置push

  • lset key index value

  • 列表中第几个位置插入value,注意位置从0开始

  • 指定value插入值

  • linsert key before|after pivot value

  • 在列表中,从左到右,第一个等于pivot这个值的前面或者后面,插入valuse

  • 两端弹出

  • lpop key

  • 删除列表最左边的value

  • rpop key

  • 删除列表最右边的value

  • rpoplpush source distination

  • 从source列表右边删除一个value,并把这个value存储进入distination列表中

  • 适用于消息发布过程中的备份操作

  • 获取列表元素个数

  • llen key

  • 获取列表的长度

  • 扩展命令

  • lpushx key value

  • 如果列表存在,则从左端插入push valuse进入列表中,否则返回0

  • rpushx key value

  • 如果列表存在,则从右端插入push valuse进入列表中,否则返回0

  • lrem key count value

  • count>0,从列表的左端开始删除 值等于 value,一共删除count个

  • count<0,从列表的右端开始删除 值等于 value,一共删除count个

  • count=0,删除 整个列表中所有 值等于 value

5.4 字符串集合 set

和list类型不同的是,set集合中不允许出现重复的元素,set最大可以包括的元素是 4294967295 .注意,set中是没有顺序的.

用于维护用户对象的唯一性,以及处理数据对象之间的关联关系,可以进行并集交集差集运算.好比购买A产品的用户ID,放在一个set中,购买另外一个B产品的用户ID,放在另外一个set中,这样就很方便计算同时购买两个产品的用户等.

list常用指令:

  • 添加删除元素

  • sadd key member [member ...]

  • srem key member [member ...]

  • del key

  • 获取集合中的元素

  • smembers key

  • 差集运算

  • sdiff key1 [key ...]

  • 求集合key1与其他集合的差集

  • sdiffstore destination key1 [key ...]

  • 求集合key1与其他集合的差集,并把结果存储在destination集合中

  • 交集运算

  • sinter key [key...]

  • 求多个集合的交集

  • sinterstore destination key [key...]

  • 求多个集合的交集,并把结果存储在destination集合中

  • 并集运算

  • sunion key [key...]

  • 求多个集合的并集

  • sunionstore destination key [key...]

  • 求多个集合的并集,并把结果存储在destination集合中

  • 扩展命令

  • sismember key member

  • 查看member在key中是否存在

  • srandmember key [count]

  • 集合key中随机放回 count 个元素

  • scard key

  • 查看集合个数

5.5 有序字符串集合 sorted set

sorted set跟set是比较类似的,集合中不允许出现重复的元素,那么有啥区别呢?sorted set有顺序,从小到大排序,更新操作非常快,拜访数据也非常高效.

应用场景:游戏排名、微博热点

常用命令:

  • 获得元素

  • zscore key member

  • 获取有序集合中的某个元素的score值

  • zrange key start stop [withscores]

  • zrangebyscore key mim max [withscores] [limit offset count]

  • 添加元素

  • zadd key score member [score member ...]

  • 删除元素

  • zrem key member [member...]

  • zremrangebyscore key min max

  • 扩展查询

  • zincrby key increment member

  • zscore key member

  • zcount key min max

回到顶部(go to top)

6 keys的通用操作

  • keys *

  • 查看所有keys

  • del key [key...]

  • 删除多个key

  • exists key

  • 判断某个key是否存在,存在返回1,不存在返回0

  • rename key newkey

  • 重命名某个key

  • expire key seconds

  • 设置某个key的生命期,过了这个时间就是过期数据

  • ttl key

  • 查看该key的生命还剩下多少秒

  • type key

  • 查看key的类型

回到顶部(go to top)

7 redis的特性

7.1 多数据库

redis最多支持16个数据,下标0-15表示第几个数据库.默认是在0号数据.切换数据库可以通过select dbnumber 来切换,也可以通过move 来移动key从当前数据到指定的数据库.

NOSQL相关入门掌握知识,你过关了吗

489034603

7.2 事务

事务的指令:multi、exec、discard.redis中,如果某个命令执行失败,后面的命令还会继续执行.multi,开启事务,这个指令后的指令默认为在同一个事务内,exec等同于提交,discard等同于回滚.

NOSQL相关入门掌握知识,你过关了吗

489034603

回到顶部(go to top)

8 redis的持久化

redis的高性能是因为数据都在内存中,如果数据库重启,则所有数据都会丢失,那么如何进行数据持久化呢?

  • RDB持久化

  • 默认支持,在指定的时间内,把内存的数据写入磁盘

  • AOF持久化

  • 以日志的形式记录每一个操作,启动的时候,重新执行所有log

  • 无持久化

  • 不进行持久化,则认为redis的作用为缓存,无需持久化数据

  • RDB与AOF同时使用

8.1 RDB持久化

  • 优势

  • redis数据库仅包括一个文件,对于文件备份是非常方便的,如果系统出现灾难时,较容易恢复

  • 灾难恢复时,备份文件较为容易单独转移到其他存储介质

  • 数据量很大的时候,启动速度快

  • 劣势

  • 不能够保证数据无丢失,数据丢失时间 = 当前时间-最近备份时间

  • 子进程完成持久化工作,如果数据集很大的时候,可能会造成短时间内redis所在服务器停止对外服务

  • 配置

  • save 900 1 :900秒内至少有1个数据变化,则进行持久化

  • RDB默认配置文件中就有,可以查看redis.conf文件中关于save的设置

  • save 300 10 :300秒内至少有10个数据发生变化,则进行持久化

  • save 60 10000 : 60秒内至少有1w个数据发生变化,则进行持久化

  • dbfilename 则是命名当前持久文件的名字

  • dir,则是定义当前持久化文件的存放路径

8.2 AOF持久化

  • 优势

  • 更高的数据平安性

  • 每秒同步,最高丢失1s数据

  • 每操作数同步,每次发生数据的变化都会立即记录到磁盘中,性能最低

  • append追加文件备份

  • 备份过程中出现问题,不会破坏之前的日志备份

  • 如果写入了一半数据,然后出现系奔溃的问题,在redis下一次启动之前,可以通过redis_check_aof工具办理数据一致性问题

  • 如果日志备份过大

  • redis会自动启动日志重写机制,append过程中,会把备份数据写入到老的备份文件中,并且会用一个新文件,记录此期间的修改数据语句

  • AOF包括一个格式清晰的数据修改操作语句的日志文件

  • 劣势

  • 相同数量的数据集文件,比RDB的要打

  • AOF效率低于RDB

  • 必要人员配置,非默认配置

  • 配置

  • 在redis.conf文件中,配置一下内容

  • appendonly yes:启动appendonly,开启AOF备份

  • appendfilename "appendonly.aof" :AOF备份的文件名

  • appendfsync always :每个修改操作同步备份一次

  • appendfsync everysec:1s同步备份一次

  • appendfsync no :不同步

  • 测试配置

  • 简单测试案例

  • redis中配置AOF,选择每操作一次就备份的机制,增删改数据后,执行flushall,然后通过备份文件来恢复数据到flushall之前

  • 步骤

  • 启动AOF,选择每操作一次就备份

  • appendonly yes

  • appendfsync always

  • 重启redis

  • /usr/local/redis/bin/redis-cli shutdown

  • /usr/local/redis/bin/redis-server /etc/redis.conf

  • 造数据

  • 执行flushall

  • 处理备份文件

  • vim /usr/local/redis/appendonly.aof

  • 删除flushall的操作记录

  • 重启数据库

  • /usr/local/redis/bin/redis-cli shutdown

  • /usr/local/redis/bin/redis-server /etc/redis.conf

  • 检查数据

有些代码似乎不可以上传,必要更多学习资料和指导可以添加图片下方的交流群,愿在成长的道路上能够相互助力.

NOSQL相关入门掌握知识,你过关了吗

编程之家PHP培训学院每天发布《NOSQL相关入门掌握知识,你过关了吗》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读