在线客服
扫描二维码
下载博学谷APP
扫描二维码
关注博学谷微信公众号
Redis作为缓存具有极其丰富的功能,比如计数器、好友关系以及排行榜等等。而Redis之所能够实现如此强大的功能,完全是依赖着它的基本数据结构。今天我们来看看Redis的五种基本的数据结构,分别是字符串(strings), 散列(hashes), 列表(lists), 集合(sets)以及有序集合(zset)。

1、字符串(strings)
绝大部分编程语言中都少不了的基本数据类型就是字符串(strings),数据库Redis也不例外。下面我们来看一下关于字符串的基本操作:
set key value 设置值
get key 获取某个key的值
mset key1 value1 key2 value2 批量设置并且是原子的,可以用来减少网络时间消耗
mget key1 key2 批量获取并且是原子的,可以用来减少网络时间消耗
incr key 自增指定key的值
decr key 自减指定key的值
incrby key value 自增指定数值
decrby key value 自减指定数值
incrbyfloat key floatvalue 增加指定浮点数,前面几个操作就可以用来实现计数器的功能。
setnx key value 如果不存在该key则可以设置成功,否则会失败,加上过期时间限制,则是redis实现分布式锁的一种方式(后面会提到)。
set key value xx 与前面相反,如果存在则设置成功,否则失败(相当于更新操作)
2、散列(hashes)
我们可以把hash理解为小型Redis,Redis在底层实现上和Java中的HashMap差不多,都是使用数组+链表的二维结构实现的。不一样的是,在Redis中字典的值只能是字符串,而且他们rehash的方式也不同,在Redis中使用的是渐进式rehash。
hset key field value 设置字典中某个key的值
hsetnx key field value 设置字典中某个key的值(不存在的)
hmset key field1 value1 field2 value2 … 批量设置
hget key field 获取字典中某个key的值
hmget key field1 field2 批量获取
hgetall key 获取全部
hdel key field 删除某个key
hexists key field 判断是否存在
hlen key 获取指定key对应的字典中的存储个数
hvals key 返回所有的value
hkeys key 返回所有的key
hincrby key field increValue 增加某个value的值(也可以增加负数)
hincrbyfloat key field floatValue 增加某个value的值(浮点数)
3、列表(lists)
Redis中的列表相当于Java中的LinkedList,也就是底层是通过链表来实现的,所以对于list来说插入删除操作很快,但索引定位非常慢。Redis提供了许多对于list的操作,如出入等操作,你可以充分利用它们来实现一个栈或者队列。
lpush key item1 item2 item3… 从左入栈
rpush key item1 item2 item3… 从右入栈
lpop key 从左出栈
rpop key 从右出栈
lindex key index 获取指定索引的元素 O(n)谨慎使用
lrange key start end 获取指定范围的元素 O(n)谨慎使用
linsert key before|after item newitem 在指定元素的前面或者后面添加新元素
lrem key count value 删除指定个数值为value的元素
count = 0 :删除所有值为value的元素
count > 0 :从左到右删除 count 个值为 value 的元素
count < 0 :从右到做删除 |count| 个值为 value 的元素
ltrim key start end 保留指定范围的元素
lset key index newValue 更新某个索引的值
blpop key timeout 没有则阻塞(timeout指定阻塞时间 为0代表永久)
brpop key timeout 没有则阻塞(timeout指定阻塞时间 为0代表永久) 这两个可以用来实现消费者生产者
4、集合(sets)
Redis中的set相当于Java中的HashSet(无序集合),其中里面的元素不可以重复,我们可以利用它实现一些去重的功能。我们还有对几个集合进行取交集,取并集等操作,这些操作就可以获取不同用户之间的共同好友、共同爱好等等。
sadd key value 添加元素
sdel key value 删除某个元素
sismember key value 判断是否是集合中的元素
srandmember key count 随机获取指定个数的元素(不会影响集合结构)
spop key count 从集合中随机弹出元素(会破坏结合结构)
smembers key 获取集合所有元素 O(n)复杂度
scard key 获取集合个数
sinter set1 set2 … 获取所有集合中的交集
sdiff set1 set2 … 获取所有集合中的差集
sunion set1 set2 … 获取所有集合中的并集
5、有序集合(zset)
Redis 中的 zset 是一个有序集合,通过它可以实现很多有意思的功能,比如学生成绩排行榜,视频播放量排行榜等等。zset 中是使用 跳表 来实现的,我们知道只有数组这种连续的空间才能使用二分查找进行快速的定位,而链表是不可以的。跳表帮助链表查找的时候节省了很多时间(使用跳的方式来遍历索引来进行有序插入)。
以上就是Redis的五种基本数据类型介绍,大家都看懂了吗?如果想学习更多关于Redis的内容,可以阅读以往的相关资讯,博学谷更有海量的在线学习视频等着你~
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
Java线上视频课程学习效果怎么样?
Java线上视频课程学习效果怎么样?首先大家要清楚Java线上视频课程的培训内容和质量与线下课程是一样的,只是学习的时间和地点更自由了,选择线上还是线下主要看学习者适合哪种学习方式。回归正题,根据每个培训机构的课程内容、师资力量和教学服务的不同,学习效果也会有很大差异,下面就以博学谷的Java在线就业班为例 ,为大家详细分析一下。
7329
2019-09-27 11:49:52
Java线上培训和线下培训的区别是什么?
目前,Java的培训方式大概分两种,即线上培训和线下培训。线下学习大家都很熟悉了,就是完完全全的脱产学习,一对多的面授课程。而随着在线教育的发展和普及,线上培训不再是简单的看视频学习了,它的教学服务也变得更加完备。要问两者的区别是什么?其实主要是教学方式的不同,在培训质量上谈不上孰优孰劣。下面我们可以好好来聊聊Java线上培训和线下培训这两种培训方式。
11001
2020-05-12 15:51:36
Dubbo相关配置说明
众所周知,Dubbo 是一个分布式服务框架,它运用了全Spring配置方式,今天我们就一起来看看Dubbo相关配置说明,内容具体包括包扫描、协议、启动时检查以及负载均衡。有兴趣学习的小伙伴就一起来看看吧~
5878
2020-05-21 10:17:55
Java在线学习的效果怎么样?好不好?
Java作为目前市场最火的编程语言,它以较为高效的运行效率、跨平台能力、丰富的IDE成为软件公司的首选,在受到很多互联网公司的青睐的同时,也是许多人编程初学者的首选编程语言。而非科班的编程学习者想要掌握Java语言,除了参加线下的面授课程,现在还有了更多的一种选择——Java在线学习。那么Java在线学习的效果怎么样?好不好呢?下面我们就以博学谷的课程为例,来为大家详细的分析一下。
6416
2020-05-22 16:32:49
Java线上网课线下培训怎么选?
Java线上网课线下培训怎么选?Java作为IT行业目前最热门的编程语言,不少想入行IT的朋友都想要报班学习。除了传统去线下机构学习的方式,在网上参与直播授课的朋友也不少。毕竟现在在线教育行业发展迅猛,许多行业培训也纷纷开设线上课程。上课形式丰富通常包括直播授课、社群教学也有老师在线答疑
6358
2020-06-17 14:58:10
热门文章
- 前端是什么
- 前端开发的工作职责
- 前端开发需要会什么?先掌握这三大核心关键技术
- 前端开发的工作方向有哪些?
- 简历加分-4步写出HR想要的简历
- 程序员如何突击面试?两大招带你拿下面试官
- 程序员面试技巧
- 架构师的厉害之处竟然是这……
- 架构师书籍推荐
- 懂了这些,才能成为架构师 查看更多
扫描二维码,了解更多信息
