一、散列类型:
Redis中的 散列类型类似于Map,但是,有一点需要注意的是,Redis中的散列类型的键所对应的值只能是字符串,不支持其他数据类型,也不能嵌套其它的数据类型
比如一个文章类型,title对应文章标题,content对应内容,那么其就可以看成是一个散列类型,也可以看成是一个Map,那么,使用Redis声明一个散列对象方法如下:
1、生成一个id为1的文章散列对象(我们建议键名由 ‘类型:id’来构成)
hset article:1 title fristarticle
Redis的强大之处在于不区分插入和更新操作,Redis发现键不存在时,即为插入操作,如果发现键存在,即为更新操作。
2、修改散列对象值:
hset article:1 title fristarticlechange
3、设置多个字段的值
hmset article:1title fristarticlechange content aaa
4、得到一个键对应的所有值
hgetall article:1
5、判断字段是否存在
hexists article:1 url
存在即返回0,不存在即返回1
6、当字段不存时赋值:
hsetnx article:1 url nx
当所对应字段有值时,不更新,没有值时,插入。
7、增加字段的值
散列类型没有字符串类型的incrby命令,但是有一个hincrby命令,可以增加指定的字段值
hincrby article:1 readcount 10
8、删除字段:
hdel article:1 readcount
9、获取散列对象中所有的字段名称
hkeys article:1
10、获取散列对象中所有字段对应的值
hvals article:1
11、获取散列对象中字段的数量
hlen key
二、Redis列表类型:
Redis列表类型内部是使用双向链表来实现的,即类似于Java中的LinkedList,所以查询两端的速度会很快。
Redis既支持向左插入数据,也支持向右插入数据。
1、向左插入一条数据:
lpush list a
2、向右插入一条数据:
rpush list b
3、从列表中弹出数据:
lpop list(从列表左边弹出数据)
rpop list (从列表右边弹出数据)
会先将数据弹出来,然后返回弹出来的数据
4、获取列表中元素的个数:
llen list
5、获取列表片段:
lrange list 0 2 (注意这个是从左边开始数的)
因为是从0开始的,所以其会返回第一个、第二个、第三个的数据。
Redis支持负索引,即从右边开始计算序数,如"-1"表示最右边的第一个元素,"-2"表示最右边的第二个元素。
lrange list -2 -1
所以使用 lrange list 0 -1 可以获取Redis中所有的元素。
6、删除列表中指定的值:
lrem key count value
lrem会删除列表中前count个值为value的元素,返回值是实际删除的元素个数
比如
lrem list 1 a
删除1个值为a的元素
注意,如果count大于0,那么会从左边开始删除前count个值为value的元素。
如果count小于0,那么会从右边开始删除前count个值为value的元素。
如果count为0,那么会删除所有值为value的元素。
7、获取指定索引的元素值:
lindex list 0 获取左数第一条
lindex list -1 获取右数第一条
8、重新设置指定索引值的元素值:
lset list 0 m 设置第一条元素之为m
9、只保留指定片段数据:
ltrim list 1 2
即只保留list数组中第一个和第二个元素,其余都删除
10、向列表中插入数据:
linsert key before|after pivot value
Redis首先会从列表从左到右的查找值为pivot的元素,然后根据第二个参数是before还是after来决定将value插入到该元素的前面还是后面
linsert list before m n
在列表中值为m的元素前面插入一个元素n
11、将元素从一个列表转移到另外一个列表
rpoplpush source deftination
rpoplpush会先从source列表的右边弹出一个元素,然后将其加入到deftination列表的左边,并返回这个元素的值。
三、Redis集合类型:
集合类型的特点是内部储存的数据是无序的,且其内部储存的数据是不能相等的。
集合是使用值为空的散列表来实现的,所以,集合的操作时间复杂度为o(1),并且多个集合类型之间还可以进行并集、交集和差集。
1、增加元素
sadd article:1:tags boy girl
2、删除元素:
srem article:1:tags boy
3、获取集合中的所有元素:
smembers article:1:tags
4、判断元素是否在集合中:
sismember article:1:tags girl
当值存在时返回1,当键或值不存在时返回0
5、集合间运算:
支持交并补
6、获取集合中元素的个数:
scard article:1:tags
四、Redis有序集合类型:
Redis有序集合在集合的基础上为每个元素都关联了一个分数,这让我们可以获取分数最高(或者最低)的前N个元素。
下面使用Redis有序集合来存储文章访问量,我们可以为每个文章id加一个访问量分数,这样就可以轻松获取访问量最多的N个文章id。
1、增加元素
zadd article:readcount 0 1
此为给id为1的文章的分数赋为0,即id为1的文章访问量为0;
2、获取元素的分数
zscore article:readcount 1
获取id为1的文章的访问量
3、获取排名在某个范围的元素列表
zrange article:readcount 0 2
获取按分数从小到大的第一个到第三个的数值,当然,-1也代表最后一个元素
zrange article:readcount 0 -1
此为获取分数从小到大的所有列表
4、获取指定分数范围的元素:
zrangebyscore article:readcount 1 3
此为包含端点值