首页 / REDIS / redis简介以及五种基础类型
redis简介以及五种基础类型
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了redis简介以及五种基础类型,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5270字,纯文字阅读大概需要8分钟。
内容图文
redis简介
redis全称为Remote Dictionary Server 远程字典服务器。
我们可以将它理解为一种可以用键值对的形式来存储数据的数据库。
而redis有许多的特性,比如说它开源,使用C语言编写,支持网络交互而且它在基于内存来操作数据的同时还是可以进行持久化的数据库。
而且除了我们上面说的以键值对来存储数据,它还有其他的四种基础数据类型 list(列表),hash(字典),set(集合),zset(有序集合)。还有其他四种扩展类型,这个我们在后边的文章中再聊。今天我们主要让初识者了解一下redis。
redis五种基本数据类型
在介绍它们之前,我先将其与Java相关内容作以类比,帮助大家快速认识。
- String 类似 Map<String,String>
- List 类似 Map<String,List>
- Map 类似 Map<String,Map>
- Set 类似 Map<String,HashSet<String>>
- ZSet 类似 Map<String,String<Double,String>>
1、String(字符串)
string类型是Redis最基本的数据类型,一个键最大能存储512MB。string类型是二进制安全的。意思是 redi s的string可以包含任何数据。
原理: redis的字符串是动态字符串,内部结构类似ArrayList。采用预分配冗余空间的方式减少内存的频繁分配。 内部为字符串分配的实际空间一般高于字符串长度,当字符串长度<1MB时,扩容方式是直接加倍,如果 >1MB,一次扩容只扩1MB,直到扩大到512MB。 ?相关命令:
1)strlen 查看字符串的长度
2)append 增加后缀,返回字符串的长度
3) incr 自增 , decr 自减。 增加 incrby key value。 decrby 减少,同上。(当value为整数时可用)
4) getrange key start end 获取从初始位置到结束位置的值。setrange key start newStr 设置从起始位置开始,替换指定位置为新的字符串。
5) 整合命令 setex = set + expire 使用方式: setex + key + 时间 + value setnx = set + exists = set if not exists 使用方式: setnx + key + value 如果key不存在,则设置数据,返回1。如果存在,不设置,返回0。 getset 先取出原来的值,再设置为新值 使用方式: getset + key + value 返回旧值。
6) 批量操作 mget = more get 使用方式 : mget + key1 + key2 + key3 参数接收多个key, 结果返回多个value mset = more set 使用方式:mset + key1 + value1 + key2 + value2 一次设置多个key和value, 参数本身是个map msetnx 使用方式同上。
2、List(列表)
redis的列表是一个字符链表,内部结构类似LinkedList。left,right都可以插入添加。如果键不存在,创建新 的链表。如果键已经存在,新增内容。如果值全移除,对应的键也就消失了。 列表最多可存储 2^32 - 1 元素 (4294967295, 每个列表可存储40多亿)。 原理: 底层是一个“快速链表”(quicklist)的结构,在列表元素较少时,使用连续的内存存储成压缩列表ziplist。当数 据量较多时,改成quicklist,也就是将多个ziplist使用双向指针串起来使用,以减少内存的碎片化。相关命令:
1)存取操作
push pop range lpush : 从左侧存入数据 相当于栈结构
弹出时执行 lpop (从左侧弹出)
rpush: 从右侧存入数据 相当于队列结构 弹出时执行lpop (从左侧弹出)
lrange: 范围内查看数据 使用方式:lrange key start end
2)对list操作
llen 查看长度 lindex 获取某一个位置的值,下角标从0开始 lrem 删除n个value的值 使用方式: lrem key N value ltrim
截取某个范围的数据重新赋值给key 使用方式: ltrim key start end (下角标从0开始)
linsert 插入数据到某个位置的前后 使用方式: linsert key before/after oldValue newValue 如果要插入数据到头部,还可以使用 lpushx, 使用方式:lpushx key value 同理,如果要插入数据到尾部,可以使用 rpushx, 使用方式同上。
lset 可以更改指定位置的值 使用方式: lset key index value
3、Hash(字典)
redi s的无序字典是一个string类型的field和value的映射表,内部结构类似HashMap。 每个 hash 可以存储 2^32 - 1 个键值对(40多亿)。 原理: 底层的实现结构,与HashMap也一样,是“数组+链表”的二维结构,第一维hash的数据位置碰撞时,将碰撞元素用链 表串接起来,不同的是,redi s字典的值只能是字符串,而且两者的rehash方式不同。java的hashmap是一次全部 rehash,耗时较高,redi s为了优化性能,采用渐进式rehash策略。具体方式为,同时保留新旧两个hash结构,然后 逐步搬迁,搬迁完成后再取而代之。相关命令:
CRUD :hset / hget / hmset / hmget / hdel / hsetnx ? 遍历操作: hgetall / hlen / hex i sts / hkeys / hvals 数值操作:hincrby / hincrbyfloat4、Set(集合)
redis的集合是string类型的无序不重复的元素集。同时提供求交集、并集、差集等操作 。 集合中最大的成员数为 2^32 - 1(40多亿)。 原理: 类似HashSet,也是通过哈希表实现的,相当于所有的value都是空。通过计算hash的方式来 快速排重,也是set能提供判断一个成员是否在集合内的原因。相关命令:
1)读写操作: sadd 创建set类型的value
smembers key 查询set中的所有值
sismember key value 判断value是否在key所对应的set中, 如果在返回1,如果不在返回0
2)更新操作: srem key value1 value2 删除set中一至多个数据的值 srandmember key num 可以在set中随机出num个元素 spop key num 可以随机弹出num个元素返回
3) 交互操作: smove key1 key2 value 移动元素value从key1到key2
顺带说一下取交、并、差集 命令分别为 sinter / sunion/sdiff
5、ZSet(有序集合)
redis的有序集合和set一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个 double类型的分数。redis正是通过分数来为集合中的成员进行从小到大排序。zset的成员是唯一的,但分数 (score)却可以重复。 原理: 类似于SortedSet和HashMap的结合,内部实现是一种叫“跳跃列表”的数据结构。通过层级制,将元素分层 并串联,每隔几个元素选出一个代表,再将代表使用另外一级指针串起来,以此类推,形成金字塔结构。同一个 元素在不同层级之间身兼数职,是“跳跃”。新元素插入时,逐层下潜,直到找到合适的位置。相关命令:
CRUD :zadd / zrem / zrange + withscores 范围操作:zrangebyscore + 用”(”代表不包含 + limit ? 统计操作:zcard / zcount / zrank ? 逆序操作:zrevrank / zrevrange / zrevrangebyscore ? ? ? OK,以上就是redis的一些基本的知识了,夜已深了早点休息,保护头发咯。内容总结
以上是互联网集市为您收集整理的redis简介以及五种基础类型全部内容,希望文章能够帮你解决redis简介以及五种基础类型所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。