简介
NoSQL:Not-Only SQL,只非关系型数据库
NoSQL分类:
类型 | 数据模型 | 产品 | 应用 | 优势 | 劣势 |
---|---|---|---|---|---|
key-value数据库 | 键值对 | Redis | 缓存,处理大量数据的高并发访问 | 查询快 | 存储的数据缺少结构化 |
列存储数据库 | 以列族存储 | Hbase | 分布式文件系统 | 查找快,扩展性强 | 功能较局限 |
文档型数据库 | 键值对 | MongoDB | Web应用 | 数据结构妖气不严格 | 查询慢,切没有同一查询语法 |
图形数据库 | 图 | Neo4J | 社交网络 | 便于利用图结构相关算法 | 需要对整个图计算才能得出结果,不易进行分布式扩展 |
Redis简介:Redis是一个开源的高性能的键值对数据库
Redis的键值类型:字符串,HashTable, Set, Sorted Set, list
Redis应用场景:缓存经常被查询的数据,分布式集群中的session分离,聊天室的在线好友列表,任务队列,应用排行榜,网址访问统计,数据过期处理
数据类型
String,HashTable, Set, Sorted Set, list
String
常用命令
-
赋值
SET key value
127.0.0.1:6379> set test fdsafdsafdsa OK
-
取值
GET key
127.0.0.1:6379> get test "fdsafdsafdsa"
-
设置/获取多个键值
MSET key value [key value …] MGET key [key …]
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 OK 127.0.0.1:6379> mget k1 k2 k3 1) "v1" 2) "v2" 3) "v3"
-
取值并赋值
GETSET key value
127.0.0.1:6379> GETSET k1 vv1 "v1" 127.0.0.1:6379> GET k1 "vv1"
-
删除
DEL key
127.0.0.1:6379> del k1 (integer) 1
-
数值增减
INCR key // 加一 INCRBY key increment // 加increment DECR key // -1 DECRBY key decrement // -decrement
127.0.0.1:6379> set k1 1 OK 127.0.0.1:6379> get k1 "1" 127.0.0.1:6379> incr k1 (integer) 2 127.0.0.1:6379> get k1 "2" 127.0.0.1:6379> INCRBY k1 5 (integer) 7 127.0.0.1:6379> get k1 "7" 127.0.0.1:6379> DECR k1 (integer) 6 127.0.0.1:6379> GET k1 "6" 127.0.0.1:6379> DECRBY k1 5 (integer) 1 127.0.0.1:6379> get k1 "1"
-
向尾部追加值
APPEND key value
127.0.0.1:6379> APPEND k1 abc (integer) 4 127.0.0.1:6379> get k1 "1abc"
-
获取字符串长度
STRLEN key
127.0.0.1:6379> STRLEN k1 (integer) 4
应用
INCR :可以作为自增主键,生成订单号
Hash类型
命令
-
赋值
-
设置一个字段
HSET key field value
127.0.0.1:6379> HSET user username zhangsan (integer) 1
-
设置多个字段
HMSET key field value [field value ...]
127.0.0.1:6379> HSET user username zhangsan age 18 (integer) 1
-
当字段不存在时赋值
HSETNX key field value
127.0.0.1:6379> HSETNX user username zhang (integer) 0 127.0.0.1:6379> HSETNX user sex man (integer) 1
-
-
取值
-
获取一个字段值
HGET key field
127.0.0.1:6379> HGET user username "zhangsan"
-
获取多个字段值
HMGET key field [field ...]
127.0.0.1:6379> HMGET user username age 1) "zhangsan" 2) "18"
-
获取所有字段值
HGETALL key
127.0.0.1:6379> HGETALL user 1) "username" 2) "zhangsan" 3) "age" 4) "18" 5) "sex" 6) "man"
-
-
删除字段
-
删除一个/多个字段
HDEL key field [field ...]
127.0.0.1:6379> HDEL user name age (integer) 1 127.0.0.1:6379> HGETALL user 1) "username" 2) "zhangsan" 3) "sex" 4) "man"
-
-
增加数字
HINCRBY key field increment
127.0.0.1:6379> HINCRBY user age 20 (integer) 38 127.0.0.1:6379> HGET user age "38"
-
判断字段是否存在
HEXISTS key field
127.0.0.1:6379> HEXISTS user abc (integer) 0 127.0.0.1:6379> HEXISTS user age (integer) 1
-
获取所有的字段值或字段名
HKEYS key HVALS key
127.0.0.1:6379> HKEYS user 1) "username" 2) "sex" 3) "age" 127.0.0.1:6379> HVALS user 1) "zhangsan" 2) "man" 3) "38"
-
获取字段数量
HLEN key
127.0.0.1:6379> HLEN user (integer) 3
应用
保存商品信息
列表
常用命令
-
向列表两端添加元素
LPUSH key value [value ...] RPUSH key value [value ...]
127.0.0.1:6379> LPUSH list 1 2 3 (integer) 3 127.0.0.1:6379> RPUSH list 4 5 6 (integer) 6
-
查看列表中的值
LRANGE key start stop
127.0.0.1:6379> LRANGE list 0 -1 1) "3" 2) "2" 3) "1" 4) "4" 5) "5" 6) "6" 127.0.0.1:6379> LRANGE list 0 2 1) "3" 2) "2" 3) "1"
-
从列表两端弹出元素
LPOP key RPOP key
127.0.0.1:6379> LPOP list "3" 127.0.0.1:6379> RPOP list "6" 127.0.0.1:6379> LRANGE list 0 -1 1) "2" 2) "1" 3) "4" 4) "5"
-
获取列表中元素的个数
LLEN key
127.0.0.1:6379> LLEN list (integer) 4
-
删除列表中的指定值
count > 0 从左往右删除count个等于value的元素
count < 0 从右向左删除count个等于value的元素
count = 0 删除所有等于value的元素
LREM key count value
-
获取/设置指定位置上的元素
LINDEX key index LSET key index value
127.0.0.1:6379> LINDEX list 2 "4" 127.0.0.1:6379> LSET list 2 6 OK 127.0.0.1:6379> LINDEX list 2 "6"
-
保留列表中指定片段
LTRIM key start stop
127.0.0.1:6379> LRANGE list 0 -1 1) "2" 2) "1" 3) "6" 4) "5" 127.0.0.1:6379> LTRIM list 0 2 OK 127.0.0.1:6379> LRANGE list 0 -1 1) "2" 2) "1" 3) "6"
-
在指定元素前后插入元素
LINSERT key BEFORE|AFTER pivot value
127.0.0.1:6379> LINSERT list before 1 3 (integer) 4 127.0.0.1:6379> LRANGE list 0 -1 1) "2" 2) "3" 3) "1" 4) "6" 127.0.0.1:6379> LINSERT list after 1 3 (integer) 5 127.0.0.1:6379> LRANGE list 0 -1 1) "2" 2) "3" 3) "1" 4) "3" 5) "6"
-
将列表中的最右边的元素移动到另一个列表的最左边
RPOPLPUSH source destination
127.0.0.1:6379> LRANGE list 0 -1 1) "2" 2) "3" 3) "1" 4) "3" 5) "6" 127.0.0.1:6379> RPOPLPUSH list newlist "6" 127.0.0.1:6379> LRANGE list 0 -1 1) "2" 2) "3" 3) "1" 4) "3" 127.0.0.1:6379> LRANGE newlist 0 -1 1) "6"
应用
保存评论
Set
常用命令
-
增加删除元素
SADD key member [member ...] SREM key member [member ...]
127.0.0.1:6379> SADD set 1 1 3 4 (integer) 3 127.0.0.1:6379> SMEMBERS set 1) "1" 2) "3" 3) "4" 127.0.0.1:6379> SREM set 3 (integer) 1 127.0.0.1:6379> SMEMBERS set 1) "1" 2) "4"
-
获得集合中所有元素
SMEMBERS key
127.0.0.1:6379> SMEMBERS set 1) "1" 2) "4"
-
判断元素是否存在
SISMEMBER key member
127.0.0.1:6379> SISMEMBER set 1 (integer) 1 127.0.0.1:6379> SISMEMBER set 2 (integer) 0
-
求集合的差集
SDIFF key [key ...]
127.0.0.1:6379> SADD seta 1 2 3 4 5 (integer) 5 127.0.0.1:6379> SADD setb 3 4 5 6 7 (integer) 5 127.0.0.1:6379> SDIFF seta setb 1) "1" 2) "2" 127.0.0.1:6379> SDIFF setb seta 1) "6" 2) "7"
-
求集合的交集
SINTER key [key ...]
127.0.0.1:6379> SINTER seta setb 1) "3" 2) "4" 3) "5"
-
并集
SUNION key [key ...]
127.0.0.1:6379> SUNION seta setb 1) "1" 2) "2" 3) "3" 4) "4" 5) "5" 6) "6" 7) "7"
-
集合中元素的个数
SCARD key
127.0.0.1:6379> SCARD seta (integer) 5
-
从集合中随机弹出一个元素
SPOP key
127.0.0.1:6379> SPOP seta "5" 127.0.0.1:6379> SMEMBERS seta 1) "1" 2) "2" 3) "3" 4) "4"
Sroted Set
常用命令
-
添加元素
ZADD key score member [score member ...]
127.0.0.1:6379> zadd zset 1 1 3 2 2 3 (integer) 3
-
获得某个元素的分数
ZSCORE key member
127.0.0.1:6379> ZSCORE zset 3 "2"
-
获取排名在某个范围内的元素
ZRANGE key start stop [WITHSCORES] ZREVRANGE key start stop [WITHSCORES]
127.0.0.1:6379> ZRANGE zset 0 -1 1) "1" 2) "3" 3) "2" 127.0.0.1:6379> ZREVRANGE zset 0 -1 1) "2" 2) "3" 3) "1" 127.0.0.1:6379> ZRANGE zset 0 1 1) "1" 2) "3" 127.0.0.1:6379> ZREVRANGE zset 0 1 1) "2" 2) "3" 127.0.0.1:6379> ZREVRANGE zset 0 1 withscores 1) "2" 2) "3" 3) "3" 4) "2"
-
获得指定分数范围内的元素
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
127.0.0.1:6379> ZRANGEBYSCORE zset 0 2 1) "1" 2) "3" 127.0.0.1:6379> ZRANGEBYSCORE zset 0 2 withscores 1) "1" 2) "1" 3) "3" 4) "2" 127.0.0.1:6379> ZRANGEBYSCORE zset 0 2 limit 1 1 1) "3" 127.0.0.1:6379> ZRANGEBYSCORE zset 0 2 limit 0 1 1) "1" 127.0.0.1:6379> ZRANGEBYSCORE zset 0 2 limit 0 2 1) "1" 2) "3"
-
增加某个元素的分数
ZINCRBY key increment member
127.0.0.1:6379> ZINCRBY zset 3 3 "5" 127.0.0.1:6379> ZSCORE zset 3 "5"
-
获得集合中元素的数量
ZCARD key
127.0.0.1:6379> ZCARD zset (integer) 3
-
获得指定分数内元素的个数
ZCOUNT key min max
127.0.0.1:6379> ZCOUNT zset 0 4 (integer) 2
-
按照排名范围删除元素
ZREMRANGEBYRANK key start stop
-
按照分数范围删除元素
ZREMRANGEBYRANK key start stop
-
获取元素排名
ZRANK key member ZREVRANK key member
127.0.0.1:6379> ZRANK zset 3 (integer) 2 127.0.0.1:6379> ZREVRANK zset 3 (integer) 0
应用
排行榜
其他命令
-
设置Key的生存时间
EXPIRE key seconds
127.0.0.1:6379> EXPIRE test 60 (integer) 1
-
查看Key的生存时间
TTL key
127.0.0.1:6379> TTL test (integer) 54
-
清除生存时间
PERSIST key
127.0.0.1:6379> PERSIST test (integer) 1 127.0.0.1:6379> TTL test (integer) -1
-
使用毫秒设置key的生存时间
PEXPIRE key milliseconds
-
查找key
keys pattern
127.0.0.1:6379> keys set 1) "set" 127.0.0.1:6379> keys *set 1) "set" 2) "zset"
-
判断KEY是否存在
EXISTS key [key...]
127.0.0.1:6379> EXISTS set zset ss (integer) 2
-
删除key
del key [key...]
-
重命名key
RENAME key newkey
127.0.0.1:6379> keys k* 1) "k2" 2) "kk" 3) "k3" 127.0.0.1:6379> RENAME kk k1 OK 127.0.0.1:6379> keys k* 1) "k1" 2) "k2" 3) "k3"
-
key的类型
type key
127.0.0.1:6379> type kk none 127.0.0.1:6379> type k1 string
27.0.0.1:6379> TTL test
(integer) -1
```
-
使用毫秒设置key的生存时间
PEXPIRE key milliseconds
-
查找key
keys pattern
127.0.0.1:6379> keys set 1) "set" 127.0.0.1:6379> keys *set 1) "set" 2) "zset"
-
判断KEY是否存在
EXISTS key [key...]
127.0.0.1:6379> EXISTS set zset ss (integer) 2
-
删除key
del key [key...]
-
重命名key
RENAME key newkey
127.0.0.1:6379> keys k* 1) "k2" 2) "kk" 3) "k3" 127.0.0.1:6379> RENAME kk k1 OK 127.0.0.1:6379> keys k* 1) "k1" 2) "k2" 3) "k3"
-
key的类型
type key
127.0.0.1:6379> type kk none 127.0.0.1:6379> type k1 string