声明:部分内容借鉴与网络,实际操作内容都经过本人实测
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的配置文件详解 请看下篇文章...