《NOsql相关入门掌握知识,你过关了吗》要点:
本文介绍了NOsql相关入门掌握知识,你过关了吗,希望对您有用。如果有疑问,可以联系我们。
什么是nosql
为什么必要Nosql
web2.0大规模动态网站的兴起
high scalability && high availability,高可扩展性和高可用性
主流NOsql产品
redis,mongodb,couchdb
Nosql的特点
易扩展
灵活数据模型
大数据量,高性能
高可用
键值存储,redis
列存储,hbase
优势,功能局限
文档数据库,mongodb
图形数据库,infogate
优势,社交网络,利用图结构的相关算法
劣势,必要对整个图做算法分析,不利于分布式方案
回到顶部(go to top)
2 redis概述
字符串类型
列表类型
有序集合类型
散列
集合类型
Redis的应用场景:
回到顶部(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
按 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
自减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
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
添加元素
删除元素
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从当前数据到指定的数据库.
489034603
7.2 事务
事务的指令:multi、exec、discard.redis中,如果某个命令执行失败,后面的命令还会继续执行.multi,开启事务,这个指令后的指令默认为在同一个事务内,exec等同于提交,discard等同于回滚.
489034603
回到顶部(go to top)
8 redis的持久化
redis的高性能是因为数据都在内存中,如果数据库重启,则所有数据都会丢失,那么如何进行数据持久化呢?
RDB持久化
默认支持,在指定的时间内,把内存的数据写入磁盘
AOF持久化
以日志的形式记录每一个操作,启动的时候,重新执行所有log
无持久化
不进行持久化,则认为redis的作用为缓存,无需持久化数据
RDB与AOF同时使用
8.1 RDB持久化
优势
劣势
不能够保证数据无丢失,数据丢失时间 = 当前时间-最近备份时间
子进程完成持久化工作,如果数据集很大的时候,可能会造成短时间内redis所在服务器停止对外服务
配置
save 900 1 :900秒内至少有1个数据变化,则进行持久化
save 300 10 :300秒内至少有10个数据发生变化,则进行持久化
save 60 10000 : 60秒内至少有1w个数据发生变化,则进行持久化
8.2 AOF持久化
优势
更高的数据平安性
每秒同步,最高丢失1s数据
每操作数同步,每次发生数据的变化都会立即记录到磁盘中,性能最低
append追加文件备份
备份过程中出现问题,不会破坏之前的日志备份
如果写入了一半数据,然后出现系奔溃的问题,在redis下一次启动之前,可以通过redis_check_aof工具办理数据一致性问题
如果日志备份过大
劣势
配置
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全面培养人才。