最近在学习redis,做了比较详细的学习笔记,分享给大家,欢迎一起讨论和学习
第一部分,简单介绍redis 和 redis的基本操作
NoSQL的特点 :
		数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性.
	数据之间无关系,这样就非常容易扩展,也无形之间,在架构的层面上带来了可扩展的能力.
		NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式,
	而在关系型数据库里,曾删字段是一件很麻烦的事情,数据量大就容易卡死.
redis 是什么,能干什么
	redis 是一个基于内存的以key-value存储的并且支持持久化nosql数据库,
	可以用来做缓存,消息队列,等
一, redis 基本操作命令
get key			--得到key	
set key string	--设置key
keys *			--查看所有的key
EXISTS key		--判断这个key是否存在
move key db		--移动key到某个库,当前库就没有了 
expire key		--给key设置过期时间,单位秒,过期后key就清除
ttl key			--查看key还有多少秒过期,-1表示永不过期,-2表示已过期,其他的数字是单位秒.
type key		--查看key是什么数据类型.
DEL key			--删除某个key
redis数据类型
1,String	--单key 单value
	set/get/del/append/strlen
	incr	自加1,
	decr	自减1
	incrby	加上多少
	decrby	减去多少 
		--必须是数字才能进行加减
	getrange	--获取指定区间内的值,类似于截取字符串,getrange key 0 3;获取key第0到第3个中间的字符串.
	setrange	--设置指定区间范围内的值,setrange key 位置 具体值. 原来位置的值将被替换.
				--加入test="abcdef", setrange test 0 xxx,把test从第0位开始,设置成xxx4. 结果是"xxxdef"
	setex(set with expire)键秒值,set k1 10 abc,设置一个键是k1,值是abc, 存活10秒,
	setnx(set if not exist),setnx k1 abc , 如果k1存在,就不会设置.
	
	mset(more set)		--同时设置多个key, mset k1 a k2 b k3 c
	mget				--同时get多个key, mget k1 k2 k3
	msetnx				--同时设置多个值,只要其中有一个key重复的,就不成功, 所有key不存在的才成功.
	getset(先get再set)	--
	
2,List	--单key多value
	lpush		--lpush list0 1 2 3 4 5 6 7,从左边开始依次写入数据,(先进后出)
	rpush		--rpush list1 1 2 3 4 5 6 7,从右边开始依次写入数据,(先进先出)
	lrange		--lrange list0 0 -1,从左边,依次取出数据.
	lpop		--从左边,取出第一个值,清除
	rpop		--从右边,取出第一个值,清除
	lindex		--根据索引下标获得元素,(从上到下),索引从0开始. 
	llen		--获取list的长度
	lrem key	--删除N个value, lrem list0 2 a, 在list里面删除2个a.
	ltrim key	--截取指定范围的值后再复制给key.index开始,index结束	
rpoplpush 源 目标 --rpoplpush list0 list1,list0右边出站一个,从左边追加上list1上;
	lset key index value	--给某个下标设置具体的值;
	insert key before 值 after	--把befrore 和after 插入到已经存在的值前后.
	
	List总结:
		它是一个字符串链表,left,right都可以插入添加,
		如果键不存在,创建新的链表;  键存在,新增内容;  如果值全部移除,对应的键也消失;
		链表的操作无论是头和尾效率都高,但对中间元素操作,效率就低;
3,Set	--单key多value
	sadd		--添加set元素;sadd set01 1 1 2 2 3 3,重复的会不添加;
	smembers	--取出set元素;SMEMBERS set01
	sismember	--sismember key 元素,判断是否存在元素
	scard		--scard key;获取集合里面的元素的个数.
	srem key value		--删除集合中某个元素;srem set01 1
	srandmember	key	某个整数(例如:3)	--在key里面,随机出3个value;
	spop key	--随机出栈,一次出一个;
smove key1 key2 key1某个值 --把key1里面某个值移到key2,值的迁移;
	数学集合类:
		差集:sdiff key1 key2	--在第一个set里面,不在第二个set里面
		交集:sinter				--都在两个set里面
		并集:sunion				--在key1,或在key2里面, 有去重功能	
4,Hash	--kv模式不变,但v是一个键值对;
	hset		--hset user id 11(key 是user,value 是 id:11),
	hget		--hget user id:
	hmset		--同时设置多个k v,hmset cust id 11 name xiepng sex man
	hmget		--同时获取多个key的值, hmget cust id name sex
	hgetall		--获取这个key里面的所有的 k v,  hgetall cust
	hdel		--删除这个key里面的额某个 k v ;
hlen --计算设个key的长度,里面有几个 k v ;
hexists key --在key里面是否存在某个值,hexists cust id
	hkeys key	--获取这个key下面所有的keys,, hkeys cust;
	hvals key	--获取这个key下面所有的values,,  hvals cust;	
	
	hincrby		--某个指定的key加上某个整数(加小数会报错)
	hincrbyfloat--某个指定的key加上某个小数	(加正数也不会报错)
hsetnx --如果不存在就set某个可以;重复了不添加(只能加单个key)
5,ZSet	--(有序集合,sorted set)
	在set基础上,加一个score.
	之前set是 k1 v1 k2 v2
	现在是 k1 score v1 k2 score v2
	zadd		--zadd zset1 60 v1 70 v2 80 v3 90 v4 100 v5
	zrange		--zrange zset1 0 -1
	ZRANGE zset01 0 -1 withscores  ,
	zrangebyscore key 开始score 结束score ,withscores(,不包含  limit开始下标,多少个;
		-- ZRANGEBYSCORE zset1 (60 (90 limit 0 1	
			返回zset1里面score是60到90之间的(不包含60和90),范围是从第0个开始,截取1个
zrem key 某个score下对应的value值;作用是删除元素;-- ZREM zset1 v5
	zcard	--ZCARD zset1 ;计算这个key里面有多少个 kv对
	zcount key score区间;	--ZCOUNT zset1 60 90,计算这个key里面的score在这个范围内的有多少个;
	zrank key values值,作用是获取下标值,这个value是第几个下标;--ZRANK zset1 v4
	zscore key 对应值,获取分数;--ZSCORE zset1 v2
	zrevrank key values值,作用是逆序获得下标值; -- ZREVRANK zset1 v4
	zrevrange	逆转取出指定范围内的值		  ; --ZREVRANGE zset1 0 -1
	zrevrangebyscore key score2 score1	;逆转取出score范围内的值 --ZREVRANGEBYSCORE zset1 90 60
要删除zset 整个集合, 直接del key 即可;