概述
▶ 什么是NOSQL?
NOSQL(NOSQL = Not Only SQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型数据库。
▶ NOSQL和关系型数据库的比较?
- 关系数据库存储在硬盘中,NOSQL存储在内存中,因此NOSQL查询速度更快
- NOSQL是基于键值对的,因此拓展性更强,效率更高
- NOSQL不支持事务,因此安全性不及关系型数据库
▶ NOSQL和关系型数据库的关系?
互补而非对立——一般会将数据存储在关系型数据库中,在nosql数据库中备份数据(NOSQL作为关系型SQL的缓存)
▶ 什么是Redis?
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库;全称Remote Dictionary Server ,即远程字典服务
命令操作
Redis存储的是key-value格式的数据。其中key都是字符串,value有5种不同的数据结构:
字符串类型 | string |
哈希类型 | hash |
列表类型 | list |
集合类型 | set |
有序集合类型 | sortedset(zset) |
string
- set key value 存储。可覆盖。
- get key 获取。
- incr key 递增一。如果key不存在,默认生成一个,初始值为0。incr后显然为1
decr key 递减一。如果key不存在,默认生成一个,初始值为0。decr后显然为-1- incrby key n 递增n。key不存在同样自动生成
decrby key n 递减n。key不存在同样自动生成- append key value 如果key不存在,则新建;如果key已存在,则追加(“2"append"3"后为"23”)
- 注:无论怎样的操作,value的本质还是string。在递增递减时,字符串必须是可以转化为整形进行计算的,否则报错。
hash
- hset key field value 设置一个键值对(field-value),可覆盖原先field-value
hmset key field1 value1 field2 value2… 设置多个键值对(field-value),可覆盖原先field-value- hget key field 获取
hmget key field1 field2 field3… 获取多个- hkeys key 获取所有的field
hvals key 获取所有的value
hgetall key 获取所有的field-value- hexists key field 是否含有field键(返回1/0)
- hlen key hash表的长度
- hincrby key field n 值增加n。注意没有"减少"对应的命令,通过设置为负数实现。
- 注:一整条数据本身就是一个键值对,它的值又是键值对(hash表)。为了区分,作为值(value)的键值对用field-value表示——表示法有可能引起误会,特此说明
list
- lpush key value(s) 左侧(头部)push一个或多个value
rpush key value(s) 右侧(尾部)push一个或多个value- lrange key start end 获取链表从star到end的值(包括);支持负数索引;获取所有:lrange mylist 0 -1
- lpop 左侧pop
rpop 右侧pop- llen 获取链表长度
- lset key index value 设置某个下标的值(不能越界)
set
- sadd key values 添加一个或多个value成员
- smembers key 获取集合所有成员(无顺序)
- srem key values 删除成员
- sismember key value 判断某个成员是否存在于集合中,返回1/0(效率极高)
- scard key 获取集合的成员数量
- sdiff key1 key2… 差集
sinter key1 key2… 交集
sunion key1 key2… 并集
zset
- zadd key score1 value1 score2 value2… 添加一个或多个score-value成员
- zrange key start end (withscores) 获取范围内的值(加上withscores可同时获取对应分数score)
- zscore key value 获取指定成员的分数
- zcard key 获取成员的个数
- srem key values 删除一个或多个指定成员
sremrangebyrank key start end 根据排名范围删除成员
sremrangebyscore key min max 根据 分数范围删除成员- zrank key value 获取成员排名(从小到大)
zrevrank key value 获取成员排名(从大到小)
key的通用操作
- keys * 查询所有的键(*为正则)
- exists key key键是否存在(1/0)
- del key 删除键值对
- type key 获取key对应value的类型
持久化
Redis是一个内存数据库,当redis服务器重启,或者电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中
Redis有两种持久化机制:RDB 和 AOF
▶ RDB:如果一定的时间间隔内key的操作数达到了某个值,则持久化数据(默认方式)
配置文件为redis.windows.conf,里面默认的三条数据为:save 900 1,save 300 10,save 60 10000
意义为:如果在60秒(1min)时间间隔内key被操作了10000次,则持久化数据(其他同理)
▶ AOF:可以每一个操作命令或每一秒后持久化数据
配置文件还是redis.windows.conf,把appendonly开关设置一下(yes/no)
appendfsync always : 每一个操作命令就持久化
appendfsync everysec : 每隔一秒就持久化
appendfsync no : 不持久化
注意:打开Redis服务器端时是默认指定了配置文件的。如果没有,则以命令行形式打开服务器端:路径>redis-server.exe redis.windows.conf
比较:RDB机制会丢数据(如果你的操作不是那么频繁,便触发不了持久化);AOF机制对性能影响过大(毕竟每个操作或每一秒就持久化一次)——— 两种机制都不完美,这也正是NOSQL要与关系型SQL配合使用的原因
End ♬
by a Lolicon ✪