二、redis数据类型

字符串类型、列表类型、散列类型、集合类型、有序集合类型

1. 字符串

顾名思义,字符串类型存储任何形式的字符串和二进制数据。是其它数据类型的基础。

赋值取值

赋值:set key value
取值:get key
取值key不存在反空

递增数字

语法:incr key
这里写图片描述
当操作的key不存在则默认键值为0,递增后为1。可用于访问量统计、生成自增id、存储序列化后的文章数据。

增加指定整数

语法:incrby key value

减少指定的整数

语法:
decr key
decrby key value
这里写图片描述

增加指定浮点数

语法:incrbyfloat key value

在尾部追加值

语法:append key value
如果键不存在,则将该键值设置为value,相当于set key value。返回值是追加后字符串总长度。

获取字符串长度

语法:strlen key

同时获得或设置多个键值

语法:
mget key1 key2 …
mset key1 value1 key2 value2 …

2. 散列

redis不支持数据类型嵌套。一个散列类型键至多包含2³²-1个字段。散列类型适合存储对象:使用对象类别和id构成键名,使用字段表示对象属性而字段值则存储属性值。
在关系型数据库中,给表新增字段name后,每条记录都会增加该name属性。redis散列不存在该问题,可以单独给某条记录新增属性而不影响其它记录。

赋值取值

语法:
hset key field value
hget key field
hmset key field1 value1 field2 value2 …
hmget key field1 field2 …
hgetall key
hset命令不区分新增还是更新操作。新增返回1,更新返回0,。键不存在则自动建立。

判断字段是否存在

语法:hexists key field
存在反1,field不存在或key不存在反0

HSETNX

和HSET区别:当字段不存在,hsetnx不会执行任何操作。

增加数字

语法:hincrby key field value
如果key不存在,则自动建立key和field,field默认0.返回值为新增后的字段值

只获取字段名或字段值

hkeys key
hvals key

获得字段数量

hlen key

3. 列表

存储一个有序的字符串列表,常用操作为向列表两端添加元素或获取列表的某一个片段,其内部采用双向链表实现。链表特性两端查询、添加块。查询中间数据慢。一个列表类型键之多容纳2³²-1个元素

添加

左端:
lpush key value1 value2 …
右端:
rpush key value1 value2 …

获取元素

lpop key
rpop key

获取列表中元素个数

llen numbers

获取部分列表

lrange key start stop
start和stop为列表索引,起始索引0;支持负索引,-1表示最右边第一个元素。

删除列表中指定的值

lrem key count value
删除前count个值为value的元素,返回值为实际删除的元素个数。
1)当count大于零,从列表左边开始删除前count个值为value的元素
2)当count小于零,从列表右边开始删除前count个值为value的元素
3)当count等于零,删除该列表中所有值为value的元素
这里写图片描述

获得、设置指定元素值

lindex key index
lset key index value

只保留指定范围值

ltrim key start end
删除指定范围外的所有元素

指定位置添加元素

linsert key before|after txt value
从左到右查找值为txt的元素,根据第二个参数决定添加位置,before添加到该元素前,after后。返回值为添加后整个列表元素个数。

将元素从一个列表转移到另一个列表

rpoplpush source destination
将source列表值转移到列表destination列表。改命令会先执行rpop从source有变弹出一个元素再执行lpush添加到destination列表左边,并返回该元素值,整个过程是原子的。destination和souce可以是同一个列表,如此反复该命令就会不断地将队尾元素移动到对首。该命令每执行一次,只会移动一个元素。
这里写图片描述

4. 集合

. 集合类型 列表类型
存储内容 最多2³²-1个字符串 最多2³²-1个字符串
有序性
唯一性

集合常用于添加删除,判断元素存在与否,其内部采用空值的散列表实现。多个集合类型之间可进行并集、交集、差集运算。

增删

sadd key member1 member2
srem key member1 member2
sadd键不存在自动建立,已存在则忽略,返回已成功添加的元素个数。
srem返回成功删除的元素个数。

获得集合中的所有元素

smembers key

元素是否存在

sismember key member
存在返1,key或member不存在返0

其它命令

a.
获得集合元素个数:scard key
b.
进行集合运算并存储结果
sdiffstore destination key1 key2 …
sinterstore destination key1 key2 …
sunionstore destination key1 key2 …
区别在于集合运算后并不返回结果而是将结果存储在destination键中。常用于多步骤集合运算当中。
c.
随机获取集合中的元素
srandmember key [count]
count可选,指定当次随机获取的元素个数。
count正数,返回元素不重复,若count大于集合元素总数,返回全部。
count负数,返回元素可能重复,获取个数为count绝对值。
注意:该命令并不未做到真正意义上的随机。
d.
随机弹出一个元素 spop key

集合运算

适用于如,文章标签存储,根据文章标签查询文章等。

差集

语法:sdiff key1 key2 …
示例一:
sdiff a b
结果是a集合与b集合的差集,是所有属于a且不属于b的元素,表示为A-B。
求b集合与a集合的差集应写成 sdiff b a
示例二:
sdiff a b c
该命令执行方式为:先计算a与b的差集后,再将结果与c计算差集。

交集

语法:sinter key1 key2 key3 …
求多个集合共有部分。

并集

sunion key1 key2 key3 …
相加去重。

5 有序集合

有序集合顾名思义和集合区别在于有序且每个元素都关联了一个分数。除了具备集合的特点外,还可以以分数为过滤条件进行查询,分数可以相同。适用于点击量排序,时间排序等应用。
有序集合和列表相同与差异如下:
1)都是有序的。
2)都可以获得某一范围的元素
3)列表通过链表实现,两端查询快,元素增多后,中间元素查询慢,更适合新鲜事、日志等这样很少访问中间元素的应用。
4)有序集合采用散列表和跳跃表实现,即使读取中间元素也很快。
5)列表不能简单的调整某个元素的位置,但是有序集合可以通过分数的调整实现。
6)有序集合比列表更耗内存。

增加元素

zadd key score1 member1 score2 member2 …
如果元素已存在则更新分数,返回值为新加入的元素个数。

获取元素分数

zscore key member

获取某范围的元素列表

zrange key start stop [withscores]
zrevrange key start stop [withscores]
按照从小到大的顺序返回在start 到stop范围内的所有元素包括边界值。withscores可选项,表示同时返回分数。
如果分数相同,则按照字典顺序排列0<9

获得指定分数范围的元素

zrangebyscore key min max [withscores] [limit offset count]
zrevrangebyscore key max min [withscores] [limit offset count]
按照从小到大返回在min和max之间的元素,包括边界值。如果不希望包括边界值,则在边界值前面加上(
示例不包括边界值
zrangebyscore key (min max 不包括min
zrangebyscore key min (max 不包括max
获取大于60分的
zrangebyscore key (80 +inf
-inf 负无穷大 +inf正无穷大
limit offset count 和sql用法基本相同。
zrevrangebyscore 返回顺序从大到小,注意max和min参数顺序。

增减元素分数

zincrby key increment member
increment 正数表示加,负数表示减。指定元素不存在自动建立分数赋值0再执行操作。
这里写图片描述

其它命令

获取集合元素个数

zcard key

获取指定分数范围内的元素个数

zount key min max

删除一个或多个元素

zrem key member1 member2
返回成功删除的元素个数。

按照排名范围删除元素

zremrangebypank key start stop
start,stop为索引,从小到大排列后,删除索引从start开始到stop范围内的元素。包括边界值。

删除分数范围内元素

zremrangebyscore key min max
默认包括边界值,加(不包括边界值。

获取元素排名

zrank key member
zrevrank key member
按照从小到大的顺序获取排名从0开始。zrevrank 相反。

计算有序集合的交集

zintersotre destination numkeys key1 key2 … [weights weight1 weight2 …] [aggregate sum|max|min]
计算多个有序集合交集,结果仍然以有序集合方式存储在destination中。返回值为destination中元素个数
aggregate默认值sum
这里写图片描述
集合s2中有c但是s1中没有,故此不参与计算。

aggregate=max
这里写图片描述

两者相比取最大值。s1中a=1,s2中a=10,取最大值结果为10
aggregate=min两者相比取最小值。
weights设置集合权重如下:
这里写图片描述
如图,s1集合在参与运算前,其内部元素全部乘0.1,结果为1 a 2 b;s2集合在参与运算前,其内部元素全部乘1,结果为1 a 2 b 3 c;再进行交集运算。

猜你喜欢

转载自blog.csdn.net/helloWorldAndYou/article/details/82495346