声明:部分内容借鉴与网络,实际操作内容都经过本人实测
NoSQL概述:
NoSQL四大分类:
四者对比:
在分布式数据库中CAP原理CAP+BASE:
传统的ACID:
A(Atomicity) 原子性
C(Consistency) 一致性
I(Isonlation) 独立性
D(Durability) 持久性
CAP+BASE
C(Consisitency) 强一致性
A(Availability) 可用性
P(Partition tolerance) 分区容错性
Redis简介:
Redis是一个高性能的key-value数据库。redis的出现,很大程度补偿了memcached这类key-value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了C++、Java、Python,Ruby,Erlang,PHP客户端。
安装:
yum -y install redis
或者
docker pull redis
常用命令
五大数据类型:
String 字符串
Hash 哈希 类似java中的map
List 列表
Set 集合
Zset(sorded set) 有序集合
库级别操作
DBSize | 查看当前数据库key的数量 |
FlushDB (ASYNC) | 清除当前库 带ASYNC 将会单开线程在后台执行(4.0新特性) |
FlushALL (ASYNC) | 清所有库 带ASYNC将会单开线程在后台执行(4.0新特性) |
Keys * | 匹配key 如keys key1 |
Exists key | 判断某个key是否存在 存在返回1 不存在返回0 |
Move key db | 当前库就没有了,被移除了 |
Expire key 秒钟 | 为给定的key设置过期时间 |
Ttl key | 查看还有多少秒过期,-1表示永不过期,-2表示已过期 |
Type key | 查看你的key是什么类型 |
SWAPDB 0 1 | 交换数据库,原来的数据库 0 变成数据库 1 , 而原来的数据库 1 则变成数据库 0(4.0新特性) |
MEMORY useage key | 查看key所占用的内存情况 |
MEMORY MALLOC-STATS | 子命令可以展示分配器内部状态 |
MEMORY PURGE | 子命令可以要求分配器释放更多内存 |
-------
String字符串
Get、Set | 设置 取得值 |
Select db | 切换数据库 |
Del key UNLINK key | 删除key 这个命令是 DEL 命令的异步版本, 它可以将删除指定键的操作放在后台线程里面执行, 从而尽可能地避免服务器阻塞(4.0新特性) |
Append key str | 追加内容 |
Strlen key | Key的内容长度 |
Incr key | 对值进行自增 每次自增1 一定是数据才能加减 |
IncrBy key 大小 | 每次递增多少 |
Decr | 对值进行自减 每次自减1 一定是数据才能加减 |
DecrBy | 每次递减多少 |
Getrange key start end | 获取字符串从x下标 到y下标 |
Setrange key start content | 从start开始设置值 直接覆盖 |
Setex key 秒数 value1 | 给key赋值新值并设置秒数 会覆盖以前的内容 |
Setnx key value1 | 如果key存在,设置无效 如果不存在 将会新增key |
Mset k v k v k v | 同时设置一个或多个 key-value 对 |
Mget k k k k k k | 获取所有(一个或多个)给定 key 的值 |
Getset | 给key设置一个新的值 然后返回一个旧值(这个不错) |
Msetsnx k v k v | 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在 |
------------------------------------------------------------------------------------------------------------
List列表
LPUSH key v v v v | 各个 value 值按从左到右的顺序依次插入到表头 |
RPUSH key v v v v | 那么各个 value 值按从左到右的顺序依次插入到表尾 |
LRANGE key 0 -1 | 取得指定范围内的值 0 -1取全部,0 1 表示取索引0和1的值 |
LPOP key | 弹出当前栈顶第一个值 即移除 |
RPOP key | 弹出当前栈最后一个值 即移除 |
LINDEX key index | 取索引处的值 |
LLEN key | 取list长度 |
LREM key 数量 value | 删除一个list内的几个value |
LTRIM key s e | 截取元素 并重新赋值 |
RPOPLPUSH key1 key2 | 把key1栈尾的值 压到key2栈顶 |
Lset key index value1 value2 | 给指定索引处赋值 |
LINSERT key before value value2 | 插入值 在key的value之前 |
LINSERT key after value value2 | 插入值 在key的value之后 |
它是一个字符串链表,left、right都可以插入添加;
如果键不存在,创建新的链表;
如果键已存在,新增内容;
如果值全移除,对应的键也就消失了。
链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很惨淡了。
------------------------------------------------------------------------------------------------------------
Set集合
Sadd key v v v | 新增set并赋值 |
Smembers key | 查询key的值 |
Sismember key value | 查询value是否在key中 |
Scard | 获取集合里面的元素个数 |
Srem key value | 把value从key中删除 |
Srandmember key 数量 | 从key里面随机取出几个数 |
Spop key | 随机弹出栈 一次一个 |
Smove key1 key2 value | 把key1中的一个值移动到key2的栈顶 |
Sdiff key1 key2 key3 … | 差集,在第一个set里面而不在后面任何一个set里面的项,相当于拿第一个做参考 |
Sinter | 交集 |
Sunion | 并集 |
Hash:哈希 KV模式不变,但V是一个键值对
Hset key k v | 设置一个带map的key |
Hget key k | 取出key中的k的值 |
Hmset key k v k v k v | 批量设置 |
Hmget key k k k k k | 批量取多个k的值 |
HgetAll key | 取一个key的所有值 |
Hdel key k | 删除key中的k |
Hlen key | 取长度 |
Hexists key k | key中 的k是否存在 |
Hkeys key | 取key中的所有k |
Hvals key | 取key所有的k的value |
HincrBy key k | 给key中的k自增1 |
HincrByfloat key k val | 可以key中的k的v增加val 对于float类型 |
Hsetnx key k v | 给key中的key设置值 如果存在 设置无效 不存在 新增至并设置值 |
Zset 有序集合
在set基础上,加一个score值。 之前set是k1 v1 v2 v3,现在zset是k1 score1 v1 score2 v2。下面所说的分数就是score
Zadd key s v | 给v再加上一个s值 |
Zrange key 0 -1 | 查询范围内key对应的v |
Zrange key 0 -1 withscores | 联合score一起查 |
ZRANGEBYSCORE zset1 s1 s2 | 查询在set1中分数在s1到s2之间的v(如果在分数前加上“(”表示不包含) |
ZRANGEBYSCORE zset1 s1 s2 limit 2 1 | limit 2 1 从下标2开始截取1个 |
ZREM key v | 从key中删除v |
Zcard key | 统计key的v的个数 |
ZCOUNT key s1 s2 | 查询key中分数在s1到s2之间的 |
Zrank key v | 取v的下标 |
Zscore key v | 取v的分数 |
Zrevrank key v | 倒序取v的下标 |
Zrevrange key 0 -1 | 倒序取全部的v |
ZREVRANGEBYSCORE zset1 90 60 | 查询key中分数在90到60之间的,因为这里是倒序的 |
Redis的配置文件详解 请看下篇文章...