初识Redis数据库
Redis特性
1. 速度快
类型 | 每秒读写次数 | 随机读写延迟 | 访问带宽 |
内存 | 千万级 | 80ns | 5GB |
SSD盘 | 35000 | 0.1-0.2ms | 100-300MB |
机械盘 | 100左右 | 10ms | 100MB左右 |
2. 持久化
Redis跟memcache不同的是,储存在Redis中的数据是持久化的,断电或重启后,数据也不会丢失。因为Redis的存储分为内存存储、磁盘存储和log文件三部分,重启后,Redis可以从磁盘重新将数据加载到内存中,这些可以通过配置文件对其进行配置,正因为这样,Redis才能实现持久化。
3. 多种数据结构
3.1 String字符串类型
String类型是redis中最基本的数据类型,一个key对应一个value。
String类型是二进制安全的,意思是 redis 的 string 可以包含任何数据。如数字,字符串,jpg图片或者序列化的对象。
常用命令:
get/mget set/setex/mset/msetnx incr/decr getset del
业务场景:
(1)缓存: 经典使用场景,把常用信息,字符串,图片或者视频等信息放到redis中,redis作为缓存层,mysql做持久化层,降低mysql的读写压力。
(2)计数器:redis是单线程模型,一个命令执行完才会执行下一个,同时数据可以一步落地到其他的数据源。
(3)session:常见方案spring session + redis实现session共享。
3.2 list列表类型
List 是链表(redis 使用双端链表实现的 List),是有序的,value可以重复,可以通过下标取出对应的value值,左右两边都能进行插入和删除数据。
列表使用技巧:
lpush+lpop=Stack(栈)
lpush+rpop=Queue(队列)
lpush+ltrim=Capped Collection(有限集合)
lpush+brpop=Message Queue(消息队列)
常用命令:
lpush/lpushx/lpop/rpush/rpushx/rpop/linsert/lset lindex/lrange llen/ltrim
业务场景:
(1)timeline:例如微博的时间轴,有人发布微博,用lpush加入时间轴,展示新的列表信息。
3.3 set集合类型
集合类型也是用来保存多个字符串的元素,但和列表不同的是集合中 :
(1)不允许有重复的元素;
(2)集合中的元素是无序的,不能通过索引下标获取元素;
(3)支持集合间的操作,可以取多个集合取交集、并集、差集。
常用命令:
sadd/spop/smove/scard sinter/sdiff/sdiffstore/sunion
业务场景:
(1)标签(tag),给用户添加标签,或者用户给消息添加标签,这样有同一标签或者类似标签的可以给推荐关注的事或者关注的人。
(2)点赞,或点踩,收藏等,可以放到set中实现
3.4 zset有序集合
有序集合和集合有着必然的联系,保留了集合不能有重复成员的特性,区别是,有序集合中的元素是可以排序的,它给每个元素设置一个分数,作为排序的依据。
(有序集合中的元素不可以重复,但是score 分数 可以重复,就和一个班里的同学学号不能重复,但考试成绩可以相同)。
常用命令:
zadd/zpop/zmove/zcard/zcount zinter/zdiff/zdiffstore/zunion
业务场景:
(1)排行榜:有序集合经典使用场景。例如小说视频等网站需要对用户上传的小说视频做排行榜,榜单可以按照用户关注数,更新时间,字数等打分,做排行。
3.5 Hash哈希类型
Hash结构是一个Mapmap。可以将具有关联关系的一组key-value,存储到同一个hash结构中,从而减少key的数量。
常用命令:
hget/hmget/hgetall hset/hmset/hsetnx hexists/hlen hkeys/hdel hvals
业务场景:
(1)缓存: 能直观,相比string更节省空间的维护缓存信息,如用户信息,视频信息等。
4. 支持多种编辑语言
Java、php、python、ruby、lua、nodejs
5. 功能丰富
支持发布订阅、lua脚本、事务、pipeline
6. 简单
#单机代码只有2w多行
7. 主从复制
#支持主从复制
作者:UStarGao
链接:https://www.starcto.com/redis/115.html
来源:STARCTO
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
UCloud云平台推荐
随便看看
- 2021-11-02开源网盘系统nextcloud容器化部署
- 2023-03-12Linux pstree命令树状图方式查看进程
- 2021-01-27数据库宕机以后恢复的过程?如何保证事务的ACID特性?
- 2024-09-01基于UCloud云主机自建K8S集群
- 2021-08-12开源分布式爬虫管理平台Crawlab容器化部署