redis的概述
redis有十六个数据库,一般默认都是使用的第一个;
redis是一种高级的key-value的储存系统,其中value支持五种数据类型:
1:字符串(String);
2:哈希(hash)相当于Map;
3:字符串列表(list)有序的(下标)且可以重复的;
4:字符串集合(set)无序的但是不可以重复;
5:有序的字符串集合(sorted set)且不重复;
关于redis的key的定义,需要注意以下几点:
1.key不要太长,最好不要操作1024个字节,这不仅会消耗内存还会降低查找率。
2.key也不要太短,如果太短会降低key的可读性。
3.在项目中key最好有一个同意的命名。
存储String:**
1:set key value(新增);get key(根据key值,取value);
2:del key,这个删除是通用的,可以根据key来删除五种数据类型;
3:数值的增减:incr key(相当于 i++)如果key不存在,自动新建,初始值为0,结果为1 默认为整型
decr key (相当于 i–) 属性同incr
incrby key value 是指定的加几,例如:incrby num 8 给key为num的值加8
decrby key value 同(incrby key value)的属性
4:append key value (拼接字符串):如果key值存在,则在原有的value值上面追加该值,如果不存在就直接重新新建一个key/value,这个append也可以拼接整型,如果原来值-3 ,追加“xxxx”,则新的值为“-3xxxx”;
存储hash:**
redis中的hash类型可以看成具有String key和String value的map容器,所以该类型非常的适合于存储值对象的信息。如一个username,password和age等。如果一个hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个hash可以储存4294967295个键值对。
1:hset key field value:为指定的key设定field/value对(键值对);(赋值)
2:hmset key field value [field2 value2…]:设置key中的多个field/value对;(赋值)
3:hget key field 取出指定的key中的field的值;
4:hget key field 获取key中的多个field的值;
5:hgetall key 获取key中所有的field-value
6:hdel key field[field…] 删除一个或多个字段,返回值是被删除的字段个数
7:del key 删除整个hash
增加数字
8:hincrby key field increment 设置key中field的值增加多少(increment)
如果是减,就增加负数;
9:hexists key field 判断指定的key中的field中的值是都存在,存在返回1.不存在返回0
10:hlen key 获取key所包含的field的数量,也就是hash的键值对的数量;
11:hkeys key 获取所有的key
12; hvals key 获取所有的value
存储list:**
两端添加:
1:lpush key value[value1 value2 …] 在指定的key所关联的list的头部插入所有的values,如果该key不存在,该命令在插入的之前创建一个与该key关联的空链表,之后在向该链表的头部插入数据。插入成功,返回元素的个数。(添加 a b c d 拿出也是出栈 d c b a )
2:rpush key value[value1 value2 …] 在list的尾部添加元素,(添加 a b c d 拿出也是出栈 a b c d )
查看列表:
1:lrange key start end 获取链表中从start到end的元素的值,start和end从0开始计数,也可以为负数,若为-1则表示链表尾部的最后一个元素,-2表示倒数第二个元素,以此类推…
两端弹出:
1:lpop key 返回把那个弹出指定关联表的第一个元素,即头部元素。如果该key不存在。返回nil;若key存在则返回链表的头部元素。
2:rpop key 从尾部弹出元素。
获取列表中元素的个数:
1:llen key 返回指定的key关联的链表中的元素的数量。
扩展:
1:lpushx key value 仅当参数中指定的key存在时,向关联的list的头部插入value。如果不存在,将不进行插入,
2:rpushx key value 在list的尾部添加元素,不存在,也不进行插入。
3:lrem key count value 删除count个值为value的元素,如果count大于0,从头向尾遍历并删除count个值为value的元素。如果count值小于0,则从未向头遍历并删除,如果count等于0,则删除链表中所以等于value值的元素。
4:lset key index value 设置链表中的index的脚标的元素值,0代表链表的头元素,-1代表链表的尾元素,操作链表的脚标不存在则抛异常,(实则就是根据下标来替换元素值)
5:linsert key before|after pivot value 在pivot元素的前或者后插入value这个元素。
6:rpoplpush resource(尾部弹出的list) destination(被添加到头部的list) 将链表中的尾部元素弹出并添加到头部【循环操作】
存储set:**
添加删除元素:
1:sadd key values [value1 value2 …] 向set中添加数据,如果该key的值已有则不会重复添加;
2:srem key members[member1 member2 …] 删除set中指定的成员。
获得集合中的元素:
1:smembers key 获取set中所有的成员
2:sismember key member 判断参数中指定的成员是否在改set中,返回1表示存在,返回0表示不存在或者改key值就不存在。(无论集合中有多少元素都可以极速的返回结果)
集合差的运算:
1:sdiff key1 key2 返回key1与key2的中相差的成员,而且与key的顺序有关。即返回差集、
(其实意思就是key1比key2多什么元素,就返回什么元素,就看key1比key2多什么,其他不管)
集合的交集运算:
1:sinter key1 key2 key3 … 返回交集(就是返回集合相同的元素)
集合的并集运算:
1:sunion key1 key2 key3 … 返回并集
扩展:
1:scard key 获取set中成员的数量
2:srandmember key 随机返回set中的一个成员
3:sdiffstore destination key1 key2 将key1和key2相差的成员存储在destination上
4:sinterstore destination key[key…] 将返回的交集存储在destination上
5:sunionstore destination key[key] 将返回的并集存储在destination上
intersections命令就可以充分的发挥它的方便和效率优势了。
存储Sortedset:**
添加元素:
1:zadd key score member score2 member2… 将所有的成员的分数存放到sorted-set中,如果该元素已经存在则会用新的分数替换原有的分数。返回值是新加入到集合中的元素的个数,不包含之前已经存在的元素。
获得元素:
1:zscore key member 返回指定成员的分数
zcard key 获取集合中的成员数量
删除元素:
1:zrem key member[member…] 移除集合中指定的成员,可以指定多个成员
2:zremrangebyrank key start stop 按照排名范围删除元素
3:zremrangebyscore key min max 按照分数的范围删除元素
范围查询:
1:zrange key start end [withscores] 获取集合中的脚标为start-end的成员,[withscores]参数表明返回的成员包含其分数。
2:zrevrange key start stop [withscorse] 照元素分数从大到小的顺序返回索引从start到stop之间所有的元素,(包含两端的元素)
扩展:
1:zrangebyscore key min max [withscores] [limit offset count] 返回分数在[min,max]的成员按照分数的从低到高排序。[withscores]:显示分数;[limit offset count]:offset,表明从脚标为offset的元素开始并返回count个成员。
2:zincrby key increment member 设置指定成员增加的分数。返回值是更改后 的分数
3:zcount key min max 获取分数在【min-max】之间的成员
4:zrank key member 返回成员在集合中的排名,(从小到大)
5:zrevrank key member 返回成员在集合中的排名 (从大到小)