概述
NoSQL泛指非关系型数据库,采用区别于非关系型数据库的设计.主要针对关系型数据库的缺陷来设计.
- 键值存储:Redis多用于项目的高速缓存
- 文档存储:MongoDB多用于社交类型的应用
- 文件存储: FastDFS 多用于以文件为载体的在线服务,如相册网站/视频网站等等
- 列式存储: HBase 主要用于数据分析领域
Redis的数据结构
Redis属于键值存储的NoSQL数据库.一个极其高性能的超大map
缺陷:
- Redis中事务只有同时成功,没有同时失败.
- 没有表的概念和表相关的操作
- 单线程执行,没有并发的线程安全问题
五大数据类型
- string
- hash
- list
- set
- zset
特点
- 性能高,能高达10w次读/s,8w次写/s
- 具有比较简单的acid
- 单线程,每个操作都是原子操作,acid
Redis支持的数据类型
string类型
命令 | 作用 |
---|---|
set key value | 存入键值对 |
get key | 根据键取出值 |
getset key value | 返回旧值后存入新值 |
incr key | 把值递增1 |
decr key | 把值递减1 |
incrby key num | 偏移值 |
append key ‘value’ | 在原值后拼接新内容 |
setnx key value | 存入键值对,键存在时不存入 |
setex key timeout value | 存入键值对,timeout表示失效时间,单位s |
setrange key index value | 存入键值对,timeout表示失效时间,单位s |
setex key timeout value | 批量存入键值对 |
setex key timeout value | 批量取出键值 |
del key | 批量取出键值 |
hash类型
命令 | 作用 |
---|---|
hset key hashkey hashvalue | 存入一个hash对象 |
hget key hashkey | 根据hash对象键去取值 |
hincrby key hashkey | 递增值,递增hashkey对应的值 |
hexists key hashkey | 判断hash对象是含有某个键 |
hlen key | 获取hash对象键的数量 |
hkeys key | 获取hash对象的所有键 |
hvals key | 获取hash对象的所有值 |
hgetall key | 获取hash对象的所有数据 |
hdel key hashkey | 根据hashkey删除hash对象键值对 |
同样有hsetnx,其作用跟用法和setnx一样
list类型
命令 | 作用 |
---|---|
rpush key value | 往列表右边添加数据 |
lpush key value | 往列表左边添加数据 |
lpop key value | 弹出列表左边的数据 |
rpop key value | 弹出列表右边的数据 |
lrange key start end | 范围显示列表数据,全显示则设置0 -1 |
linsert key before/after refVal newVal | 参考值之前/之后插入数据 |
lset key index value | 根据索引修改数据 |
lrem key count value | 在列表中按照个数删除数据 |
ltrim key start end | 范围截取列表 |
lindex key index | 范围截取列表 |
ltrim key start end | 范围截取列表 |
set类型
命令 | 作用 |
---|---|
sadd key value | 往set集合中添加元素 |
smembers key | 列出set集合中的元素 |
srem key value | 删除set集合中的元素 |
spop key count | 随机弹出集合中的元素 |
sdiff key1 key2 | 返回key1中特有元素 |
sdiffstore var key1 key2 | 返回key1中特有的元素存入另一个set集合 |
sinter key1 key2 | 返回两个set集合的交集 |
sinterstore var key1 key2 | 返回两个set集合的交集存入另一个set集合 |
sunion key1 key2 | 返回两个set集合的并集 |
sunionstore var key1 key2 | 返回两个set集合的并集并存入另一个set集合 |
smove key1 key2 value | 把key1中的某元素移入key2中 |
scard key | 返回两个set集合的并集 |
sismember key value | 返回两个set集合的并集 |
srandmember key count | 随机获取set集合中的元素 |
zset类型
命令 | 作用 |
---|---|
zadd key num name | 存入数值和名称 |
zrange key start end | 按照数值升序输出名称 |
zrangebyscore key min max [withscore] | 按照数值范围降序输出名称 |
zrem key name | 删除名称和数值 |
zincrby key num name | 偏移名称对应的数值 |
zrank key name | 升序返回排名 |
zrevrank key name | 降序返回排名 |
zremrangebyscore key min max [withscores] | 根据分数范围删除元素 |
zremrangebyrank key start end | 根据排名删除元素 |
zremrangebyrank key start end | 根据排名删除元素 |
zremrangebyrank key start end | 根据排名删除元素 |
Redis的管理命令
命令 | 作用 |
---|---|
exists key | 判断某个key是否存在 |
expire key | 设置key的过期时间 |
persist key | 取消key的过期时间 |
select index | 切换数据库索引,范围是0 ~ 15共16个分区 |
move oldkey newkey | 把oldkey重命名为newkey |
info | 查看当前服务器信息 |
flushdb | 清空当前库中的数据 |
flushall | 清空所有库中的数据 |
Redis缓存
1 | //业务层方法 |
Redis集群模式
哨兵模式,如果发现master宕机,就会在剩下的服务器中,通过选举算法选择其他服务器