游客发表
Redis提供了丰富的吃透数据类型,包括了五种基本数据类型和五种扩展数据类型(非官方分类,琳琅满类型仅个人总结,数据方便记忆):
图片
本文介绍5种基本数据类型,吃透在列出常用的琳琅满类型命令之外,还附以实例操作和适用场景说明,数据方便大家参考阅读。吃透后续文章会介绍另外5种扩展数据类型,琳琅满类型敬请期待。数据
String是琳琅满类型最基本的也是最常用的数据类型,它是数据一个key-value键值对的结构,key是吃透键,字符串类型,琳琅满类型而value是数据对应的值,可以是字符串,也可以是二进制数据,包括序列化对象、图片等。
字符串类型的应用非常广泛,高防服务器包括缓存、计数器、分布式锁、Session共享等场景。
下面我们来看看String的一些常用操作:
复制#设置键值对,如果key不存在,则新增 SET key value #设置key的过期时间 SET key value EX [过期时间] SETEX key [过期时间] value #获取key对应的value GET key #判断key是否存在 EXISTS key #删除key DEL key #获取key对应的过期时间 TTL key #将key中存储的数字加1 INCR key #将key中存储的数字减1 DECR key1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.记得很早以前去面试,面试官问了一个关于redis key过期的小问题:如果设置了一个key的过期时间,过一段时间再重新设置这个key的值,那么它的过期时间会变吗?我们来试验一下:
复制127.0.0.1:6379> SET hello world EX 30 OK 127.0.0.1:6379> TTL hello (integer) 15 127.0.0.1:6379> SET hello ok OK 127.0.0.1:6379> TTL hello (integer) -11.2.3.4.5.6.7.8.可以看出,如果重新设置key的值(不指定过期时间),那么这个key的过期时间就变成了永不过期。
List字符串列表,按照插入的顺序进行排序,可以从头部或者尾部向List添加元素。List主要用于消息队列,或者一些需要实现队列或者栈结构的场景。服务器托管
List的一些常用操作如下:
复制#在列表最左边(头部)添加一些新元素 LPUSH key element [element ...] #在列表最右边(尾部)添加一些新元素 RPUSH key element [element ...] #从头部移除一个或者多个元素 LPOP key [count] #从尾部移除一个或者多个元素 RPOP key [count] #返回列表的长度 LLEN key #获取指定范围的值 LRANGE key start stop #在某个值的前/后插入新值 LINSERT key <BEFORE | AFTER> pivot element #删除指定数量的某个元素 LREM key count element1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.演示一下常用的一些操作,先在列表中插入一些元素,然后再删除,最后确认删除成功:
复制127.0.0.1:6379> LPUSH mylist "order:0001" "order:0002" "order:0003" (integer) 3 127.0.0.1:6379> LRANGE mylist 0 3 1) "order:0003" 2) "order:0002" 3) "order:0001" 127.0.0.1:6379> LREM mylist 1 "order:0003" (integer) 1 127.0.0.1:6379> LRANGE mylist 0 3 1) "order:0002" 2) "order:0001" 127.0.0.1:6379>1.2.3.4.5.6.7.8.9.10.11.12.Hash用于存储键值对,类似于Java中的HashMap,它非常适用于将一些相关的数据存储在一起,比如一个学生,他有姓名、年龄、身高等信息,类似这样的场景,可以把数据存储在redis的Hash中。
Hash的一些常用操作如下:
复制#设置一个或者多个字段的值 HSET key field value [field value ...] #返回对应字段的值 HGET key field #返回多个字段对应的值 HMGET key field [field ...] #返回所有的字段和值 HGETALL key #判断一个字段是否存在 HEXISTS key field #删除一个或者多字段及其对应的值 HDEL key field [field ...] #返回Hash中所有的key HKEYS key #返回Hash中所有的value HVALS key1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.看一下简单的企商汇实例,对一个用户的基本信息进行操作:
复制127.0.0.1:6379> HSET user-info "name" "Tom" "age" "32" "height" "178" (integer) 3 127.0.0.1:6379> HGET user-info height "178" 127.0.0.1:6379> HMGET user-info name age 1) "Tom" 2) "32" 127.0.0.1:6379> HGETALL user-info 1) "name" 2) "Tom" 3) "age" 4) "32" 5) "height" 6) "178" 127.0.0.1:6379> HDEL user-info height (integer) 1 127.0.0.1:6379> HEXISTS user-info height (integer) 0 127.0.0.1:6379> HKEYS user-info 1) "name" 2) "age" 127.0.0.1:6379> HVALS user-info 1) "Tom" 2) "32"1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.Set提供了与List类似的列表功能,但它可以自动去重,也就是说元素具有唯一性,另外,Set还提供了很多集合操作的功能,像多个集合之间的并集、交集和差集等运算。
Set很适合以下一些场景:比如交友软件中,找到两位用户的共同好友;电商平台中,用户浏览过的商品(需要去重)等。
Set的常见命令:
复制#设置一个或者多个字段的值 HSET key field value [field value ...] #返回对应字段的值 HGET key field #返回多个字段对应的值 HMGET key field [field ...] #返回所有的字段和值 HGETALL key #判断一个字段是否存在 HEXISTS key field #删除一个或者多字段及其对应的值 HDEL key field [field ...] #返回Hash中所有的key HKEYS key #返回Hash中所有的value HVALS key1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.示例:
复制127.0.0.1:6379> SADD key1 "a" "b" "c" "d" (integer) 4 127.0.0.1:6379> SMEMBERS key1 1) "c" 2) "d" 3) "b" 4) "a" 127.0.0.1:6379> SCARD key1 (integer) 4 127.0.0.1:6379> SMEMBERS key1 1) "c" 2) "d" 3) "b" 4) "a" 127.0.0.1:6379> SADD key2 "c" "d" (integer) 2 127.0.0.1:6379> SINTER key1 key2 1) "c" 2) "d"1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.Sorted Set为有序集合,元素类型为String,元素具有唯一性,每个元素都会关联一个分数,这个分数被用来按照从低到高的方式排序。集合中的成员是唯一的,但分数可以重复,此时就按照字符串的字典顺序排列。
它的应用也很广泛,比如在线游戏中的排行榜,按照分数进行排序就很方便;也可以使用它来进行限流,防止对于API的过度请求。
Sorted Set的常见命令:
复制#添加一个或者多个元素 ZADD key score member [score member...] #返回指定索引范围的元素(升序),降序为ZREVRANGE ZRANGE key start stop #返回指定score范围的元素(升序),降序为ZREVRANGEBYSCORE ZRANGEBYSCORE key min max #为指定元素加上指定的数量 ZINCRBY key increment member #删除有序集合中的一个或者多个元素 ZREM key member [member ...] #返回指定score范围的元素个数 ZCOUNT key min max #返回某个元素在集合中的排名(升序),降序是ZREVRANK ZRANK key member #返回某个元素的分数 ZSCORE key member1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.有序集合常用操作的演示:
复制127.0.0.1:6379> ZADD mygame 10 "John" 12 "Tom" 8 "Tony" 7 "Hank" (integer) 4 127.0.0.1:6379> ZRANGE mygame 0 -1 1) "Hank" 2) "Tony" 3) "John" 4) "Tom" 127.0.0.1:6379> ZRANGEBYSCORE mygame 10 15 1) "John" 2) "Tom" 127.0.0.1:6379> ZINCRBY mygame 8 "Hank" "15" 127.0.0.1:6379> ZSCORE mygame "Hank" "15" 127.0.0.1:6379> ZRANK mygame "John" (integer) 11.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.Redis提供了5种基本数据类型,功能非常强大,涵盖面也比较广,可以适用于很多的实际场景,而Memcached仅提供了简单的key-value,相比之下,Redis就强大得多。另外,Redis还提供了其他扩展的5种数据类型,我们会在后续的文章中进行介绍,敬请关注。谢谢!
随机阅读
热门排行
友情链接