Redis 值的五种数据类型练习
Posted 奋斗的蜗牛灬
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis 值的五种数据类型练习相关的知识,希望对你有一定的参考价值。
前言
键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。
下面介绍五种类型的值
一、String 数据类型
- String 是 Redis 最基本的类型,最大能存储 512MB 的数据,String类型是二进制安全的,即可以存储任何数据,比如数字、图片、序列化对象等。
- 常用操作命令如下:
set、get、append、strlen
set key value #存放数据
get key value #获取数据
append key value #Redis的append命令是往一个key追加value。如果没有key,则创建一个并且设置value
strlen key #获取指定Key的字符长度
incr、decr、incrby 、decrby
incr key #该Key的值递增1
decr key #该Key的值递减1
incrby key increment #增加指定的整数
decrby key increment #减少指定的整数
getset、setex、setnx
getset key value #获取计数器原有值的同时,并将其设置为新值,这两个操作原子性的同时完成
#
setex key seconds value #设置指定Key的值为value,过期时间为seconds 秒,就是这个字符串的值seconds 秒之后过期
ttl key #查看键的剩余存活时间
#
setnx key value #创建指定键,若该键存在则不执行,不存在则执行
mset、mget、msetnx
mset key value #批量设置键的值
mget key #批量获取键的值
msetnx key value #批量设置键值,若有存在的键则不执行
二、List 数据类型
- 列表中存放的元素类型为 String,按照插入的顺序排序,在列表的头部或尾部添加元素。
lpush、lpushx、lrange
lpush listname value #该命令会创建该键及与其关联的List,之后在将参数中的values【从左到右】依次插入到表头
lpushx listname value #该命令仅当listname存在时,将value值【从左到右】依次插入到表头
lrange listname start stop #返回列表中指定区间内的元素,0 表示第一个元素,1 表示第二个元素,-1 表示最后一个元素
lpop、llen、del
lpop listname #移除并返回第一个元素,从头开始
llen listname #查看列表中元素个数
del listname #删除列表
lrem、lset、lindex、ltrim
lrem listname count value #从头部(left)向尾部(right)变量链表,删除count次值等于value的元素,返回值为实际删除的数量
lset listname index value #将索引值为index的元素值设置为新值value
lindex listname index #获取索引值为index的元素值。
ltrim listname start stop #仅保留索引值start到stop的元素
linsert
linsert key BEFORE|AFTER value1 value2 #在value1元素前|后插入新元素value2
如果列表中有重复的元素 value1 ,则只会在第一个元素的 after before 执行操作
rpush、rpushx、rpop、rpoplpush
rpush key value #将值从右往左依次插入到表尾
rpushx key value #指定键存在时从右往左执行,否则不执行
rpop key #移除并返回键的第一个元素,从尾开始
rpoplpush source destination #将键1尾部元素xxx弹出,同时再插入到键2的头部(原子性的完成这两步操作)
三、Hash 数据类型(散列类型)
- Hash 用于存储对象。可以采用这样的命名方式:对象类别和ID构成键名,使用字段表示对象的属性,而字段值则存储属性值。
- 如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存储4294967295个键值对。
- 优势:能存储海量数据,占用极少空间。
hset、hget、 hdel、hexists、hlen、hsetnx
hset key field value #给key键设置字段为field,值为value
hget key field #获取key键,字段为field的值
hdel key field #删除key键的field字段,成功返回1
hexists key field #判断key键中的field字段是否存在,存在返回1
hlen key #获取key键的字段数量
hsetnx key field value #给key键添加新字段,是否执行基于此字段是否存在,不管键是否存在,返回1表示执行成功
hincrby
hincrby key field increment #给field字段值加increment,适用于整数
hmset 、hmget、hgetall、hkeys、hvals
hmset key field value #批量为xxx键创建字段和赋值
hmget key field #获取指定多个字段值
hgetall key #返回所有字段及其值,是逐对列出的
hkeys key #仅获取所有字段名(key)
hvals key #仅获取所有字段值(value)
四、Set 数据类型(无序集合)
- Set 无序集合,元素类型为String类型,**元素具有唯一性,不允许存在重复的成员。**多个集合类型之间可以进行并集、交集 和 差集运算。
应用范围:
- 可以使用 Redis 的 Set 数据类型跟踪一些唯一性数据,比如QQ号对应QQ密码。对于此场景,我们仅需在每次登录QQ时将QQ号存入Redis 中,Set 数据类型会自动保证QQ密码的唯一性。
- 充分利用 Set 类型的服务端聚合操作方便、高效的特性,可以用于维护数据对象之间的关联关系。比如所有购买某一电子设备的客户ID被存储在一个指定的Set中,而购买另外一种电子产品的客户ID被存储在另外一个Set中,如果此时我们想获取有哪些客户同时购买了这两种商品时,Set 的 intersections 命令就可以充分发挥它的方便和效率的优势了。
sadd、smembers、scard、sismember
sadd key member #将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。假如集合 key 不存在,则创建一个只包含添加的元素作成员的集合
smembers key #通过smembers命令查看插入的结果,输出的顺序与插入顺序无关
scard key #获取集合中成员的数量
sismember key member #判断键中xxx成员是否存在,返回0表示不存在,1表示存在
spop、 srem、srandmember、smove
spop set1 #随机的移除并返回键中的某一成员
srem set1 member1 member2 ... #从键中移出member1、2成员,并返回移出成员个数
srandmember set1 #该命令随机的返回某一成员
smove set1 set1 set2 member #将source的member成员移到destination,成功返回1,失败返回0
五、Sort Set 数据类型(zset、有序集合)
- 有序集合,Sortset 和 Set 类型一样,元素类型为 String,元素具有唯一性,不能重复;
- 不同的是 Sort Set 每个元素都会关联一个权,通过权值(权重)可以有序的获取集合中的元素(通过权重的大小排序)。
应用范围:
- 可以用于一个大型在线游戏的积分排行榜。每当玩家的分数发生变化时,可以执行 ZADD 命令更新玩家的分数,此后再通过 ZRANGE 命令获取积分TOP10的用户信息。当然我们也可以利用 ZRANK 命令通过username来获取玩家的排名信息。最后我们将组合使用ZRANGE和ZRANK命令快速的获取和某个玩家积分相近的其他用户的信息。
- Sorted-Set 类型还可用于构建索引数据。
zadd、zcard、zcount、zrem、zincrby、zscore、zrank
zadd key [NX|XX] [CH] [INCR] score member [score member ...] #将一个或多个成员元素及其分数值加入到有序集当中
zrange key start stop [withscores] #查看成员;加withscores可显示成员加分数
zcard key #获取键中成员的数量
zcount key min max #分数满足表达式x <= score <= x的成员的数量
zrem key member [member ...] #删除成员xxx、xxx,返回实际删除成员的数量
zincrby key increment value #成员value不存在,zincrby命令将添加该成员并假设其初始分数为0
zscore key value #获取成员value的分数
zrank key value #获取成员alue的位置索引值
zrangebyscore、zremrangebyrank、zremrrangebyscore
zrangebyscore key min max #获取分数满足表达式x <= score <= x的成员
zremrangebyrank key start stop #删除位置索引满足表达式x <= rank <= x的成员。
zremrangebyscore key min max #删除分数满足表达式x <= score <= x的成员,并返回实际删除的数量。
zrevrange、zrevrangebyscore、zrevrank
zrevrange key start stop [withscores] #以位置索引从高到低的方式获取并返回此区间内的成员(翻转查看)
zrevrangebyscore key max min #获取分数满足表达式x >= score >= x 的成员,并以从高到底的顺序输出。
zrevrank key member #获取成员索引
以上是关于Redis 值的五种数据类型练习的主要内容,如果未能解决你的问题,请参考以下文章
Redis NOSQL Redis的五种常见的数据类型 redis持久化方式 Jedis