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

《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全面培养人才。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读752次。关系型数据库关系型数据库是一个结构化的数据库,创建在关系模型(二维表模型)基础上,一般面向于记录SQL语句(标准数据查询语言)就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作主流的关系数据库包括Oracle、Mysql、SQL Server、Microsoft Access、DB2等非关系型数据库NoSQL(nOSQL=Not Only SQL),意思是“不仅仅是SQL”,是非关系型数据库的总称。除了主流的关系型数据库外的数据库,都认为是非关系型主流的NoSQ.._redis是非关系型数据库吗
文章浏览阅读687次,点赞2次,收藏5次。商城系统中,抢购和秒杀是很常见的营销场景,在一定时间内有大量的用户访问商场下单,主要需要解决的问题有两个:1. 高并发对数据库产生的压力;2. 竞争状态下如何解决商品库存超卖;高并发对数据库产生的压力对于第一个问题,使用缓存来处理,避免直接操作数据库,例如使用 Redis。竞争状态下如何解决商品库存超卖对于第二个问题,需要重点说明。常规写法:查询出对应商品的库存,判断库存数量否大于 0,然后执行生成订单等操作,但是在判断库存是否大于 0 处,如果在高并发下就会有问题,导致库存_php库存结余并发
文章浏览阅读1.4k次。MongoTemplate开发spring-data-mongodb提供了MongoTemplate和MongoRepository两种方式访问MongoDB,MongoRepository的方式访问较为简单,MongoTemplate方式较为灵活,这两种方式在Java对于MongoDB的运用中相辅相成。_springboot插入指定的mongodb数据库
文章浏览阅读887次,点赞10次,收藏19次。1.背景介绍1. 背景介绍NoSQL数据库是一种非关系型数据库,它的特点是可以存储非结构化的数据,并且可以处理大量的数据。HBase是一个分布式、可扩展的列式存储系统,它是基于Google的Bigtable设计的。HBase是一个开源的NoSQL数据库,它的核心功能是提供高性能的随机读写访问。在本文中,我们将对比HBase与其他NoSQL数据库,例如Redis、MongoDB、Cass...
文章浏览阅读819次。MongoDB连接失败记录_edentialmechanisn-scram-sha-1
文章浏览阅读470次。mongodb抽取数据到ES,使用ELK内部插件无法获取数据,只能试试monstache抽取mongodb数据,但是monstache需要mongodb replica set 模式才能采集数据。############monstache-compose文件。#replicas set 启动服务。# 默认备份节点不能读写,可以设置。# mydb指的是需要同步的数据库。#登录主mongodb初始化rs。#primary 创建用户。# ip地址注意要修改。# ip地址注意要修改。_monstache csdn
文章浏览阅读913次,点赞4次,收藏5次。storage:fork: trueadmin登录切换数据库注意: use 代表创建并使用,当库中没有数据时默认不显示这个库删除数据库查看表清单> show tables # 或者 > show collections表创建db.createCollection('集合名称', [options])table1字段类型描述capped布尔(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。_mongodb5
文章浏览阅读862次。Centos7.9设置MongoDB开机自启(超全教程,一条龙)_mongodb centos开机启动脚本
文章浏览阅读1.3k次,点赞6次,收藏21次。NoSQL数据库使用场景以及架构介绍
文章浏览阅读856次,点赞21次,收藏20次。1.背景介绍1. 背景介绍NoSQL数据库是一种非关系型数据库,它的设计目标是为了解决传统关系型数据库(如MySQL、Oracle等)在处理大量不结构化数据方面的不足。NoSQL数据库可以处理大量数据,具有高性能、高可扩展性和高可用性。但是,与关系型数据库不同,NoSQL数据库没有固定的模式,数据结构也不一定是表格。在NoSQL数据库中,数据存储和查询都是基于键值对、列族、图形等不同的...
文章浏览阅读416次。NoSQL定义:非关系型、分布式、开放源码和具有横向扩展能力的下一代数据库。由c++编写的开源、高性能、无模式的基于分布式文件存储的文档型数据库特点:高性能、高可用性、高扩展性、丰富的查询支持、可替换已完场文档某个指定的数据字段应用场景:社交场景:使用mongodb存储用户信息游戏场景:用户信息,装备积分物流场景:订单信息,订单状态场景操作特点:数据量大;读写操作频繁;价值较低的数据,对事物性要求不高开源、c语言编写、默认端口号6379、key-value形式存在,存储非结构化数据。_nosql
文章浏览阅读1.5k次,点赞3次,收藏2次。Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: Failed to create socket. at redis.clients.jedis.DefaultJedisSocketFactory.createSocket(DefaultJedisSocketFactory.java:110) at redis.clients.jedis.Connection.connect(Conne_redis.clients.jedis.exceptions.jedisconnectionexception: failed to create so
文章浏览阅读6.5k次,点赞3次,收藏12次。readAnyDatabase(在所有数据库上都有读取数据的权限)、readWriteAnyDatabase(在所有数据库上都有读写数据的权限)、userAdminAnyDatabase(在所有数据库上都有管理user的权限)、dbAdminAnyDatabase(管理所有数据库的权限);:clusterAdmin(管理机器的最高权限)、clusterManager(管理和监控集群的权限)、clusterMonitor(监控集群的权限)、hostManager( 管理Server);_mongodb创建用户密码并授权
文章浏览阅读593次。Redis是一个基于内存的键值型NoSQL数据库,在实际生产中有着非常广泛的用处_搭建本地redis
文章浏览阅读919次。Key 的最佳实践[业务名]:[数据名]:[id]足够简短:不超过 44 字节不包含特殊字符Value 的最佳实践:合理的拆分数据,拒绝 BigKey选择合适数据结构Hash 结构的 entry 数量不要超过 1000(默认是 500,如果达到上限则底层会使用哈希表而不是 ZipList,内存占用较多)设置合理的超时时间批量处理的方案:原生的 M 操作Pipeline 批处理注意事项:批处理时不建议一次携带太多命令。Pipeline 的多个命令之间不具备原子性。_redis高级实战
文章浏览阅读1.2k次。MongoDB 递归查询_mongodb数据库 递归
文章浏览阅读1.2k次。通过实际代码例子介绍:如何通过MongoTemplate和MongoRepository操作数据库数据_springboot操作mongodb
文章浏览阅读687次,点赞7次,收藏2次。首先欢迎大家阅读此文档,本文档主要分为三个模块分别是:Redis的介绍及安装、RedisDesktopManager可视化工具的安装、主从(哨兵)模式的配置。_redis 主从配置工具
文章浏览阅读764次。天下武功,无坚不摧,唯快不破!我的名字叫 Redis,全称是 Remote Dictionary Server。有人说,组 CP,除了要了解她外,还要给机会让她了解你。那么,作为开发工程师的你,是否愿意认真阅读此心法抓住机会来了解我,运用到你的系统中提升性能。我遵守 BSD 协议,由意大利人 Salvatore Sanfilippo 使用 C 语言编写的一个基于内存实现的键值型非关系(NoSQL)..._redis 7.2 源码
文章浏览阅读2k次。MongoDB 的增删改查【1】_mongodb $inc