为什么要用NoSql
mysql 瓶颈,无法支持大访问量,
关系型数据库 Mysql ,sqlservice 等
非关型数据库 memcahe ,redis mongdb等
NoSql 特点 聚合模型
1、KV键值对
2、Bson类似json
3、列族
4、图形 :图谱(复杂的朋友关系)mysql 关系型数据库力不从心
NoSql 四大分类
redis 安装略过 如果是本地redis 可以不是用 -h 127.0.0.1 -p 6379
set name 如果有值 会被覆盖
##获取所有的key值
keys *
##获取指定的key值
key name
## 如果k1存在将被覆盖
set k1
##选择库 0-15 一共16个库
select 1
##删除指定的库
flushdb
##删除所有的库
flushall
## 把键值对从库移动到两一个库
move k3 2 #把k3 从当前库移到库2
##秒钟,为给定的key设置过期时间
expire key
##查看还有多少秒过期,-1表示永不过期,-2表示已过期
ttl key
exp: ttl k3
##查看key的类型
type k3
##################################################
Redis 字符串 String
set
get
del
#append 追加
get k1
"ab"
append k1 12345
"ab12345"
strlen k1
(integer) 7
#累加
set k2 2
incr k2
(integer) 3
incr k3
(integer) 4
#累减
decr k2
(integer)3
decr k3
(integer)2
#多路累加
incrby k3 2
(integer)4
#多路递减
decrby 1
(integer)3
#获取指定范围内的值 类似mysql between
假设 k4
# mset 添加多个值 注意 当k1 存在的时候 添加会被覆盖
mset k1 v1 k2 v2 k3 v3
# mget 获取多个值
mget k1 k2 k3
#msetnx 添加多个值 如果不存在添加 该函数和setnx判断存在,不存在再添加,假设
# msetnx k1 v1 k2 v2 k3 v3 如果k1存在 那么全部不成功
#获取指定范围的k1的值 类似mysql里的between , 0 -1 全部
getrange k1 0 -1
#设置k1的值 从第N位开始 添加val 从第2位开始加入xxx
setrange k1 2 xxx
#setex 设置过期时间 到期释放
setex key seconds value
#setnx (set if not exist) 如果不存在就添加
List
# lpush list1 1 2 3 4 5 先进后出
# lrange list1 0 -1
# rpush list1 1 2 3 4 5 先进先出
# lrange list1 0 -1
# lpop 出栈 lpush 压入的 出栈也是前进后出原则 rpush压入的 是 先进先出原则
# rpop 出栈 与lpop刚好相反
# lindex 键名 下标
#lrem list3 删除数量 删除的值
#lrem key count value
lrem list3 2 6
如果截取的值不存在则返回0
如果截取的数量大于实际存在的数量则按实际数量返回
## ltrim 键名 开始下标 结束下标
ltrim list4 2 4
#rpoplpush 源键名 目的键名 把第一个list1 的rpop(先进先出原则) 压入list2(先进后出原则)
rpoplpush list01 list02
##lset list1 被替换下标 值
lset list1 2 xxx
## linsert 键名 before/alter 值1 值2 截取指定范围的值后再赋值给key
linsert list1 before xxx wokao
## set 集合 过滤重复的值
sadd set1 1 1 1 2 2 2 3 3 3
## smembers key 获取集合的值
## 判断指定的值是否存在 存在返回1 不存在返回0
## sismember key 值
## 获取集合里有多少个元素
scard key
#srem 删除元素中的值
srem set1 2
## srandmember 键值 数量 随机从键值里出N个值
srandmember set1 3
## spop key值 数量 随机弹出键值
## spop set2 2
## smove key1 key2 key1的值 //把key1的值给了key2
smove set1 set2 3
反过来 也是成立的
如果不存在 返回0
## sdiff key1 key2 差集 key1有 key2没有 的值筛选出来
## sinter key1 key2 交集
## sunion set1 set2 并集
Hash KV模式不变,但是V是一个键值对
## hset key k v
获取hget
批量操作hset
##批量添加有两种
## 1、 hset user1 id 1 name zhansan age 23
(integer) 3
## 2、 hmset user2 id 1 name lisi age 22
OK
hgetall 获取所有的hash值
#hdel key 键值名
hdel user1 name
## hlen key 获取hash长度
## hexists 判断值 的键值对的键是否存在
## hkeys /hvals 获取所有键值对的键或值
hkeys user1
hvals user1
## 自增
## hincrby 键 值 数值
## hincrby key val num
## 增加浮点数
## hincrbyfloat key 键值 float
## hincrbyfloat user1 score 9.54
## hsetnx 不存在就添加 存在就不添加
有序集合 Zset (sorted set) 可以有重复值
## 批量添加键值到有序集合里
## zadd zscore 20 z1 80 z2 90 z3 50 z4 40 z5 50 z6 80 z7 100 z9
## 返回所有的有序集合键对 默认scores从小到大排序
## zrange zscore 0 -1
## 返回所有的键值对集合 默认scores从小到大排序
## zrange zscore 0 -1 withscores
## zrangebyscore key 最小值(min) 最大值(max)
zrangebyscore zscore 30 90
## 删除key的键值
## zrem key 键值
zrem zscore z5
## zcount key min max 统计score值在min 和max 之间的总数
## zcard key 获取有序集合总数
## zrank key number 获取键值对下标
## zscore key member 获取key的 键值member对应的值
## zrevrange key min max 从小到大( 按照 score d的从大到小来排序)获取键值对
## zrevrangebyscore key max mix 从大到小(scroe值从大到小)排序 截取对应的值