目录
Nosql
Nosql即Not-OnlySQL(泛指非关系型数据库),作为关系型数据库的补充
特征
- 可扩容,可伸缩
- 大数据量下高性能
- 灵活的数据类型
- 高可用
常见Nosql数据库
- Redis
- memcache
- HBase
- MongDB
Redis入门
概念
Redis是用C语言开发的一个开源的高性能键值对数据库
特征
- 数据见没有必然的关联方式
- 内部采用单线程机制进行工作
- 高性能
- 多种数据类型支持
- 字符串类型 String
- 列表类型 list
- 散列类型 hash
- 集合类型 set
- 有序集合类型 sorted_set
-
- 持久化支持.可以进行数据灾难恢复
应用
- 为热点数据加速查询
- 任务队列
- 即时信息查询
- 时效性信息控制
- 分布式数据功效
- 消息队列
- 分布式锁
基本操作
- set [key] [value] 存
- get [key] 取
Redis数据类型
业务数据特殊性
- 作为缓存使用
- 原始业务功能设计
- 运营平台监控到的突发高频访问数据
- 高频复杂的统计数据
- 附加功能
- 系统功能优化或升级
String
redis数据存储格式
- redis自身是一个Map,期中所有的数据都是采用key:value的形式存储
- 数据类型值得是存储的数据的类型,也就是value部分的类型,key部分用原都是字符串
String类型
- 存储的数据
- 单个数据,最简单的数据存储类型,也是最常用的数据存储类型
- 存储数据的格式
- 一个存储空间保存一个数据
- 存储内容
- 通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用
String类型基本操作
- 添加/修改
- set key value
- mset key1 value1 key2 value2 …
- 获取数据
- get key
- get key1 key2 …
- 删除数据
- del key
- 获取数据字符个数(字符串长度)
- strlen key
- 追加信息到原始信息后部(原始信息存在就追加,否则新建)
- append key value
String类型数据的扩展操作
作为数值操作
- 设置数值数据增加指定范围的值
- incr key
- incrby key [increment]
- incrbyfloat key [increment]
- 设置数据减少指定范围的值
- decr key
- decrby key [increment]
String作为数值操作
- String在redis内部存储默认就是一个字符串,当遇到增减类型的操作
incr
decr
时会转成数值型进行计算 - redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发带来的数据影响
- 按照数值进行操作的数据,如果原市数据不能转成数值,或超越了redis数值上线范围,将报错 Long.MAX_VALUE
设置指定生命周期
- 设置数据具有指定的生命周期
- setex set seconds value 秒
- psetex key milliseconds value 毫秒
String类型数据操作注意事项
- 数据最大存储量
- 512m
- 数值计算最大范围
- java中的long的最大值
- 命名规范
- 表名:主键名:主键值:字段值
Hash
一个存储空间保存多个键值对数据
基本操作
-
添加/修改数据
- hset key field value
- hmset key field1 value2 field2 value2 …
-
获取数据
- hget key field
- hmget key1 field1 key2 field2 …
- hgetall key
-
删除数据
- hdel key field1 field2 …
-
获取哈希表中是否存在指定字段
- hexists key field
-
获取哈希表中字段的数量
- hlen key
扩展操作
- 获取哈希表中左右的字段名或字段值
- hkeys key
- hvals key
- 设置指定字段的数值数据增加指定范围的值
- hincrkey key field increment
- hincrbyfloat key field increment
- 如果有值就取消操作,没有就设置
- hsetnx key field value
注意事项
- hash类型下的value只能存储字符串,不允许存储其他数据类型,不存在嵌*象.
- 每个hash可以存储232-1个键值对
- hash类型设计初衷不是为了存储大量对象而设计的,切记不可滥用,更不可将hash作为对象列表使用
- hgetall操作可以获取全部属性,如果内部field过多,便利整体数据效率就很低,有可能成为数据访问瓶颈
List
存储多个数据,并对数据进入存储空间的顺序进行区分(双向链表)
基本操作
- 添加/修改数据
- lpush key value1 value2 …
- rpush key value1 value2…
- 获取数据
- lrange key start stop
- lindex key index
- 获取长度
- llen key
- 获取并移除数据
- lpop key
- rpop key
- 删除数据
- lrem key count value
扩展操作
- 规定时间内获取并移除数据
- blpop key seconds
- blpop key1 key2 … seconds
注意事项
-
list保存的数据都是String类型的,数据总容量是有限的,最多232-1个元素
-
list具有索引的概念,但是操作数据时通常以队列的形式进行入队出队操作,或以栈的形式进行入栈出栈操作
-
获取全部数据操作结束做因设置为-1
-
list可以对数据进行分页操作,通常第一页的信息来自于list,第2页及更多信息通过数据库的形式加载
Set
存储大量的数据,在查询方面提供更高的效率
基本操作
- 添加数据
- sadd key member1 member2 …
- 获取全部数据
- smembers key
- 删除数据
- srem key member1 member2 …
- 获取集合数据总量
- scard key
- 判断集合中是否包含指定数据
- seismember key member
扩展操作
-
随机获取集合中指定数量的数据
- srandmember key count
-
随机获取集合中某个数据,并将该数据移除集合
- spop key
-
求两个集合的交、并、差集
- sinter key1 key2
- sunion key1 key2
- sdiff key1 key2
-
求两个集合的交、并、差集并存储到指定集合中
- sinterstore destination key1 key2
- sunionstore destination key1 key2
- sdiffstore destination key1 key2
-
将指定数据从原市集合中移动到目标集合中
- smove source destination member
注意事项
- set类型不允许数据重复,如果添加的数据在set‘中已经存在,将会报错
- set虽然与hash的存储结构相同,但是无法启用hash中存储值的空间
sorted_set
保存可排序的数据
基本操作
-
添加数据
- zadd key score1 member1 score2 member2 …
-
获取全部数据
- zrange key start stop [withscores]
- zrevrange key start stop [withscores]
-
删除数据
- zrem key member1 member2 …
-
按条件获取数据
- zrangebyscore key min max [withscores] [limit]
- zrevrangebyscore key min max [withscores]
-
按条件删除数据
- zremrangebyrank key start stop
- zremrangebyscore key min max
-
获取集合数据总量
- zcard key
- zcount key min max
-
集合交、并操作
- zinterstore destination numkeys key1 key2 [max/min…]
- zunionstore destination numkeys key1 key2 [max/min…]
扩展操作
- 获取数据对应的索引(排名)
- zrank key member
- zrevrank key member
- score值获取与修改
- zscore key member
- zincrby key increment member
注意事项
- score保存的数据存储空间是64位
- score保存的数据也可以是一个双精度的double值,基于双精度浮点数的特征,可能会丢失精度
- sorted_set底层还是基于set结构的,因此数据不能重复,如果重复添加相同的数据,score值将被覆盖
Key的通用操作
key是一个字符串,通过key获取redis中保存的数据
基本操作
- 删除指定key
- del key
- 判断key是否存在
- exists key
- 获取key的类型
- type key
扩展操作
-
为指定key设置有效期
- expire key seconds
- pexpire key milliseconds
- expire key timestamp 时间戳
- pexpire key milliseconds-timestamp
-
获取key的有效时间
- ttl key
- pttl key
-
切换key从时效性转换为永久性
- persist key
-
查询key
-
keys pattern
pattern:
-
*
任意数量的任意符号 -
?
匹配一个任意符号 -
[]
匹配一个指定符号
-
-
其他操作
- 为key改名
- rename key newkey 如果存在会覆盖
- renamex key newkey 如果不存在就改名
- 对所有key排序
- sort
- 其他通用操作
- help @
数据库通用指令
- redis为每个服务器提供16个数据库,编号0~15
- 每个数据库之间的数据相互独立
基本操作
- 切换数据库 默认0
- select index
- 其他操作
- quit 关闭退出
- ping 测试连通
- echo message
其他操作
- 数据移动
- move key db 必须保证目标数据库没有
- 数据清除
- flushdb 删除当前库
- flushall 删除全部库
- 查询多少key
- dbsize