《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
优势,社交网络,利用图结构的相关算法
劣势,必要对整个图做算法分析,不利于分布式方案
回到顶部(go to top)
C语言编写的高性能键值对数据,支持的键值数据类型:
字符串类型
列表类型
有序集合类型
散列
集合类型
Redis的应用场景:
缓存
网站拜访统计
任务队列
数据过期处理
应用排行榜
分布式集群架构中的session分离
回到顶部(go to top)
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)
redis有支持非常多种语言编写的客户端,可以从官网查看 https://redis.io/clients ,redis-py是redis官方网站首选的python客户端开发包,本人只会点点python,所以从这个入门.
redis-py的github地址:https://github.com/andymccurdy/redis-py
回到顶部(go to top)
键值对种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不存在,则创建该key,并赋值为0,0自减后为-1,等同于增加 【key,-1】键值对
如果该key存在,则value自减1
decr key
自增指定值
如果该key不存在,则创建该key,并赋值为0,0自增numbers,等同于增加 【key,numbers】键值对
如果该key存在,则value自增numbers
incrby key numbers
自减指定值
如果该key不存在,则创建该key,并赋值为0,0自减numbers,等同于增加 【key,-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)
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.1 多数据库
redis最多支持16个数据,下标0-15表示第几个数据库.默认是在0号数据.切换数据库可以通过select dbnumber 来切换,也可以通过move 来移动key从当前数据到指定的数据库.
489034603
7.2 事务
事务的指令:multi、exec、discard.redis中,如果某个命令执行失败,后面的命令还会继续执行.multi,开启事务,这个指令后的指令默认为在同一个事务内,exec等同于提交,discard等同于回滚.
489034603
回到顶部(go to top)
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
检查数据
有些代码似乎不可以上传,必要更多学习资料和指导可以添加图片下方的交流群,愿在成长的道路上能够相互助力.
维易PHP培训学院每天发布《NOSQL相关入门掌握知识,你过关了吗》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。
转载请注明本页网址:
http://www.vephp.com/jiaocheng/9230.html