NoSQL数据库四大分类
键值对存储(key-value):Redis,Tyrant,
列存储:HBase,Riak,Cassandra
文档数据库:mongoDb,CouchDB
图形数据库:Neo4J,InfoGrid
性能:易扩展,大数据量,高可用
 
Redis:C语言开发的,高性能键值对数据库
支持类型:字符串,散列,列表,集合,有序集合
使用场景:缓存,任务队列(秒杀、抢购),网站访问统计、数据过期处理(精确到毫秒),分布式集群架构session分离
 
Key不要过长,不要过短,统一命名规范
数据类型
存储String(用的多) 容量最多512M 
set name chen
get name=”chen”
del name
incr num    数据库没有num时会自动设置为1 ,将指定的值增1,如果是其他类型会报错
decr num   递减
decr num2     -1
incrby  num3 5    =5  将指定的值增加指定的值
decrby  num3 4    =1
append num3 5   =15     在num3后面加上5数字
append num4  123   此时   key=num4   value=123
存储Hash(用的多)
赋值,取值,删除,增加数字,自学命令
hset  myhash username jack      树名,key,value
hset myhash2 age 20
hmset 设置多个键值对    
hmset myhash2 username rose age 21
hget 单个  hmget myhash username age
hgetall  myhash
hdel 树名 key
nil=null
hincrby myhash age 5   数值加5
hexists myhash user    1有这个key   0无这个key
hlen myhash  属性的个数
hkeys  myhash  得到所有key名称
hvals myhash 所有value
 
存储list常用命令:两端添加、查看列表、两端弹出、获取列表元素、扩展命令
r和l相反
lpush mylist  abc   返回3   依次从放入队列
 lpush mylist 123     
 rpush  从右边插入
 lrange mylist 0 -1   第一个到最后一个   -2为倒数第二个
 321cba
 lpop mylist 左侧3出队列
 rpop mylist 右侧a出队列
 llen   返回长度
 lpushx  mylist  a  在列表头部插入,若不存在会返回0 
  lrem mylist count数量  value
 lrem mylist 0 a   从头到尾删除队列里所有的a
 lrem mylist 2 a   从头到尾删除队列里2个a
 lset list 3  mmm   把下标(从0开始)为3的值改为mmm
 linsert list before b 11  在值为b的前面查入11,对应after
 rpoplpush list1 list2  将list1的队尾元素弹出压入list2队头
 此用于生产者消费者
 
存储Set
 和List不同的是,Set集合不允许出现重复的元素
常用命令:添加、删除,获取集合元素,集合交集,差集,并集,扩展命令
添加:sadd myset a b c  返回1  不能再接着添加重复元素
  sadd myset 1 2 3 继续添加
 srem myset 1 2   返回2,删除了2个元素
 smembers myset 查询
 sismember myset a  判断是否存在 返回1存在,0不存在
 运算   sadd myset1 a b c
   sadd myset2  a c 1 2
差集: sdiff myset1 myset2   返回b,与diff前后顺序有关,前面减后面剩下的
并集:  sunion myset1 myset2
交集: sinter myset1 myset2
获得set中成员的数量   scard myset1   返回3
随机返回集合的一个元素:srandmember myset1
将两个集合的差集存在新的集合  sdiffstore my myset1 myset2       12差集结果存到my中
  sinterstore    ,   sunionstore  一样
特殊场景:跟踪唯一性数据,用户维护数据对象之间的关联关系
订单ID买了相同产品相同的客户,求交集
 
 
存储Sorted-Set   有序的
游戏排名,微博热点话题
添加元素,获得,删除,范围查询,扩展命令
添加:  zadd mysort 70 张三 80 李四 90 王五     返回3:分数+元素
  zadd mysort 100 张三     返回0:因为已经有张三,但是张三的分数被替换了
 zscore mysort zs    查询zs的分数
 zcard mysort  返回元素个数
 zrem mysort zs ls  删除张三李四元素 ,返回剩余元素个数
 范围查找 zrange mysort 0 -1   只查询列出元素
   zrange mysort 0 -1 withscores 默认由小到大列出元素+分数
  zrevrange mysort mysort 0 -1 withscores  从大到小,0到-1级
  zremrangebyranke mysort 0 4   排序0到4级的删除
 zremrangebyscore mysort 80 100 分数80到100的删除
 zrangebyscore mysort 0 100 withscores     0-100分
扩展命令
 zincrby mysort 3 ls   给李四分数加3
 zount mysort 80 90  80到90分有多少人
使用场景:大型积分游戏排行榜,构建索引数据
 
通用指令:
 keys * 查询所有key
 key my*  所有以my开头
 key my?    my1  ,my2 ,my3
 del key
 rename keyName  keynewName重命名
 type keyname 查看类型
 expire keyname 1000 设置1000秒后key消失
 ttl keyname  查看key还有多少秒消失 ,如果没有设置返回-1