当前位置: 首页 > news >正文

redis五种数据类型的实现方式,常用命令,应用场景

String类型

​ 可以是字符串(简单的字符串、复杂的字符串(例如JSON、XML))、数字(整数、浮点数),甚至是二进制(图片、音频、视频),但是值最大不能超过512M

​ 实现方式:
一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。

​ 常用命令:

set key value :设置key对应的string类型值。
get key :获取key对于的string类型值。

使用场景:
​用户登录天数, 博客访问次数、网站访问量

List类型

​ list数据类型指key对应的value是一个双向链表结构。注意:一个列表最多可以包含 232 - 1 个元素

实现方式:

​ 双向链表

​ 常用命令:

1.lpush key value :向key对应list头部添加一个字符串元素。 

​		2.rpush key value :向key对应list尾部添加一个字符串元素。 

​		3.lrange key start end :返回指定区间内(start~end)的元素。下标从0开始。支持负数。 

​		4.lpop key :从list头部返回一个元素,并删除此元素。

​		5.rpop key :从list头部返回一个元素,并删除此元素。

使用场景:

​ 微博中我的粉丝列表,关注列表

Hash类型

​ hash 是一个 string 类型的 field 和 value 的映射表,适合用于存储对象。

​ 实现方式:

​ Hash的成员比较少时,采用类似一维数组的方式来紧凑存储,不会采用HashMap结构,此时encoding为 zipmap,成员数量增大时会自动转成HashMap,此时encoding为ht

​ 常用命令:

​		hset key field value :设置key对应的hash对象中指定域的值。 

​		hget key field :返回key对应的hash对象中指定域的值。

​		hdel key field [field ...]: 删除

​		hlen key:计算field个数

​ 适用场景:

​ 1.存储用户信息
2.原生string:直观,占用键多
​ 3.序列化字符串:序列化后好操作,每次都需要反序列化和序列化所有字段
​ 4.哈希类型:简单直观,减少内存空间的使用

Set类型

​ 一种无序的不重复的集合

​ 实现方式:

​ hashmap, 通过计算hash的方式来快速排重

​ 常用命令:

		sadd key member :添加一个元素到key对于的set集合中。 

​		sismember key member :判断member是否在set中。 

​		smembers key :返回所以key对于的set元素。

​		srem key element [element ...]:  删除元素

​		scard key:计算元素个数

应用场景:

​ 抽奖,推荐系统,好友

Sorted Set(zset)

​ 是一个有序的不重复的集合,集合的成员从大到小排序,并且每个元素都会关联一个double类型的分数,成员是唯一,但是分数可以不唯一

​ 实现方式:

​ 使用HashMap和跳跃表(SkipList)来保证数据的存储和有序

​ 常用命令:

	zadd key score member: 添加成员

​	zcard key:计算成员个数

​	zscore key member: 计算某个成员的分数

​	zrank key member: 计算成员的排名,分数从低到高

​	zrevrank key member: 计算成员的排名,分数从高到低

​	zrem key member: 删除成员

​	zincrby key increment member: 增加成员的分数

​ 使用场景:

​ 排行榜,分页(动态分页)

如果大家对java架构相关感兴趣,可以关注下面公众号,会持续更新java基础面试题, netty, spring boot,spring cloud等系列文章,一系列干货随时送达, 超神之路从此展开, BTAJ不再是梦想!

架构殿堂

相关文章:

  • MVC前后台传值
  • idea 右键没有run和debug选项
  • 浏览器渲染优化4(styles and layout)
  • leetcode 98,判断二叉树为BST
  • redis bind not error
  • lua实现热更方式
  • 元素
  • 基础面试题:面向对象和面向过程的区别,性能对比
  • 基础面试题: JDK 和 JRE
  • 基础面试题:java内存区域
  • 基础面试题:String StringBuffer 和 StringBuilder 的区别
  • 将Heap RID转换成RID格式
  • 数据库增删改查因文本包含sql语句造成语法错误问题解决方法
  • 基础面试题:== 与 equals 详解
  • 用ArrayList(解决约瑟夫问题)
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • AngularJS指令开发(1)——参数详解
  • C++入门教程(10):for 语句
  • Codepen 每日精选(2018-3-25)
  • fetch 从初识到应用
  • Git学习与使用心得(1)—— 初始化
  • java2019面试题北京
  • Javascript 原型链
  • Java小白进阶笔记(3)-初级面向对象
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • supervisor 永不挂掉的进程 安装以及使用
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 飞驰在Mesos的涡轮引擎上
  • 高程读书笔记 第六章 面向对象程序设计
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 聊一聊前端的监控
  • 前嗅ForeSpider中数据浏览界面介绍
  • 浅谈Golang中select的用法
  • 协程
  • 与 ConTeXt MkIV 官方文档的接驳
  • 自动记录MySQL慢查询快照脚本
  • ###C语言程序设计-----C语言学习(6)#
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (39)STM32——FLASH闪存
  • (js)循环条件满足时终止循环
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (三)模仿学习-Action数据的模仿
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .net快速开发框架源码分享
  • .NET是什么
  • @GetMapping和@RequestMapping的区别
  • @Service注解让spring找到你的Service bean
  • [.NET 即时通信SignalR] 认识SignalR (一)
  • []AT 指令 收发短信和GPRS上网 SIM508/548
  • [20171113]修改表结构删除列相关问题4.txt
  • [2021]Zookeeper getAcl命令未授权访问漏洞概述与解决
  • [HackMyVM]靶场 Quick3