一、NoSQL简介
- 概述:
- 不遵循SQL标准
- 不支持 ACID
- 远超于 SQL 的性能
- 适用场景
- 对数据高并发的读写
- 海量数据的读写
- 对数据高可扩展性的
- 不适用场景
- 需要开启事务支持的
- 基于 SQL 的结构化查询存储,处理复杂的关系,需要
即席
查询 用不着 sql 和 用了 sql 有也不行的情况,可以考虑适用 NoSql
二、常用五大数据类型
2.1 Redis 键 (Key)
- keys *
查看当前库中的所有 key
- exists key
判断当前 key 是否存在
- type key
查看 key 是什么类型
- del key
删除指定的 key 数据
unlink key 根据 value 选择 非阻塞删除
- 仅将 keys 从 keyspace 元数据中删除,真正的删除会在后续异步操作中
- expire key seconds
为给定的key 设置 过期时间
- ttl key
查看当前 key 还剩当场时间过期
,-1 表示永不过期,-2 表示 已过期 - select number [0,16)
切换数据库
- dbsize
查看当前数据库的 key 的数量
- flushdb 清空当前数据库
- flushall 通杀全部库
2.2 Redis 字符串 (String)-- MaxLength 512
set <key> <value>
添加键值对get <key>
查询对应的键值append <key> <value>
将给定的追加到原值的末尾strlen <key>
获取值的长度setnx <key> <value>
只有当 key 不存在时,才会设置 key 的值incr <key>
将 key 对应的值 +1,只能对数字进行操作,如果为空,新增值为 1decr <key>
将 key 对应的值 -1,只能对数字进行操作,如果为空,新增值为 1incrby / decrby <key> <step>
将 key 对应的值增减 stepmset / mget <key1><value1> .....
同时设置、获取 一个或多个 key-value 对msetnx <key1> <value1> ...
同时设置一个或多个 key - value对,当且仅当所有给定的 key 都不存在时。getrange <key> <start> <end>
获取 范围内的值,[start, end]setrange <key> <start> <value>
用 value 覆写 key 所存储的 字符串值,从 <start> 开始(索引从 0 开始)setex <key> <过期时间> <value>
设置 键值同时,设置 过期时间,单位 秒getset <key> <value>
以新换旧,设置 新值同时 获取旧值
2.3 Redis 列表(LIst)-- 快速链表(quickList)
lpush / rpush <key> <value1> <value2> <value3> ...
从 左边 / 右边 插入一个或多个值lpop / rpop <key>
从左边 / 右边 弹出一个 值。值在键在,值光键亡
rpoplpush <key1> <key2>
从 key1 右边中弹出一个 值,插入到 key2 的 左边lrange <key> <start> <stop>
按照 索引下标 获得元素 (从左到右)[start,stop],[0,-1] 为获取全部lindex <key> <index>
按照 索引下标 获取元素 (从左到右)llen <key>
获取 列表长度linsert <key> before/after <value> <newValue>
在 value 的后面插入 newValuelrem <key> <n> <value>
从左边 删除 n个 value(从左到右)lset <key> <index> <value>
将列表 key中 下标为 index 的值 替换成 value
2.4 Redis 集合(Set )-- 字典(dict)-- 哈希表
sadd key member [member....]
将 一个或多个 member 元素加入到集合key中,已经存在的 member 会被忽略smembers key
获取 key 中的 所有值sismember key value
判断 集合key 中 是否包含 value值,有1,无0scard key
返回该集合的元素个数srem key value1 value2 ....
删除集合中的某个元素spop key
随机从集合中 吐出(删除) 一个值srandmember key n
随机从集合中获取 n 个值,不会删除smove source destination value
把集合(source)中的一个值移动到另一个集合(destination)中sinter / sunion / sdiff key1 key2
返回两个集合的 交集/并集/差集(key1有,key2没有)
2.5 Redis 哈希(Hash)-- 压缩列表(ziplist)/ 哈希表(hashTable)
hset key field value
给 kye 集合中的 field字段 赋值为 valuehget key field
从集合kye中 field字段中 取出 valuehmset key field1 value1 field2 value2 ....
批量插入hexists key field
查看哈希表 key 中,给定的 field 是否存在hkeys key
列出该 集合key 中的所有 fieldhvals key
列出该 集合key 中的所有 valuehincrby key field increment
为 哈希表 key 中的 field字段 加上 incrementhsetnx key field value
当 集合key 中不存在 field字段 时,才会插入
2.6 Redis 有序集合(zset)
zadd key score1 value1 score2 value2 ....
将一个或多个 member 元素及其 score值 加入到 有序集合 kye中zrange key start stop [withscores]
返回有序集合 key中,下标在 [start,stop] 之间的元素zrangebyscore key min max [withscores] [limit offset count]
返回 key 中,所有 score值 介于 [min,max] 当中的成员zrevrangebyscore key min max [withscores] [limit offset count]
同上,但改为 从小到大排列zincrby key increment score member
为 member 加上/减去 指定的 incrementzrem key member
删除 key 中 指定的 member成员zcount key min max
统计该集合,分数区间内的元素个数 [min,max]zrank key member
返回该 member 在 key 中的 排名,从 0 开始