NoSQL概述
为什么需要NoSQL
- 高并发读写
- 海量数据的高效率存储和访问
- 高可扩展性和高可用性
NoSQL数据库分类
- 键值存储。Redis
- 列存储。HBase
- 文档数据库。MongoDB
- 图形数据库。
NoSQL特点
- 易扩展
- 大数据量,高性能
- 灵活的数据模型
- 高可用
Redis概述
支持的键值数据类型
- 字符串(String)
- 散列(hash)
- 列表(list)
- 集合(set)
- 有序字符串集合(sorted set)
Key
- 不要过长
- 不要过短
- 统一的命名规范
存储String
- 底层是二进制存储的。二进制安全,存入和获取的数据相同
- Value最大512MB
命令
- 赋值
set
- 取值
get
- 删除
del
- 数值增减
incr
,decr
,incrby( 数字)
,decrby( 数字)
- 扩展命令
append(返回的事字符串长度)
存储Hash
- 赋值
hset myhash username jack
hmset myhash2 username rose age21
- 取值
hget myhash username
hmget myhash username age
hgetall myhash
- 删除
hdel myhash2 username age
- 增加数字
hincrby myhash age5
- 存在
hexists myhash username
- 得到key,value,和长度
hlen myhash
hkeys myhash
hvals myhash
存储list
- ArrayList数组存储
- LinkedList双向链表存储
- 双向链表增加删除数据
- 常用命令:
lpushx mylist3 a
x表示不存在不插入linsert mylist before b11
在b前插入11rpoplpush mylist5 mylist6
从5右边弹出押入6左边lset mylist3mmm
相当于list[3]=mmmlrem mylist23
从头到尾,删除2个3lrem mylist-21
从后到前,删除2个1llen mylist
lrange mylist05
看0到5的元素,可为负数表示从右边数起lpop mylist
头部弹出rpop mylist
尾部弹出lpush mylist a b c
rpush mylist a b c
- 两端添加
- 两端弹出
- 查看列表
- 获取列表元素个数
- 移除
- 设置
- 扩展命令
- 场景:
- 生产者消费者,队列
存储Set
sadd myset a b c
srem myset a b
smembers myset
sismember myset a
sdiff mya1 myb1
sinter mya2 myb2
sunion mya3 myb3
scard myset
集合内数量srandmember myset
sdiffstore my1 mya1 myb1
把mya1和myb1差集存入mya1,类似的sunionstore
、sinterstore
- 场景:
- 追踪唯一性的
- 维护数据对象之间的关联
存储Sorted-Set
有序的集合
zadd mysort70a80b90c
分数 实际元素,元素存在的话则用新的分数替代原来的分数zscore mysort a
获取分数zcard mysort
长度zrange mysort0-1
zreverange
zremrangebyrank mysort04
zremrangebyscore mysort80100
zadd mysort
zrangebyscore mysore0100withscores limit02
zincrby mysort3ls
- 场景:
- 大型在线游戏积分排行榜
- 检索索引数据
通用操作
- 查看key
keys*
kyesmy?
exists
get
rename company newcompany
expire newcompany1000
过期时间ttl newcompany
type newcompany
type mylist
应用场景
- 缓存
- 任务队列
- 网站访问统计
- 数据过期处理
- 应用排行榜
- 分布式集群架构中的session分离
客户端
Java语言用Jedis
事务
multi
开启事务,discard
回滚,exec
提交。- 事务串行,不会做其他事,保证严格原子性。失败后面会继续执行。
持久化
- RDB按时间间隔持久化到硬盘
- AOF按日志的记录操作
- 无持久化