官网对Redis常见的数据结构定义为:

  Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

五大数据类型(其余的api到中文官网看)

String(字符串)

基本介绍

  String可以说非常常见,程序员接触redis最先用到的应该就是String类型,使用该类型作为缓存。需要注意的是String类型的Value值可以是数字。常见使用场景是计数器,对象缓存等

命令实践


使用incr与decr命令实现自增与自减,实际场景用做浏览量等

字符串范围 range

替换,这里替换需要需要规则。

setex(set with expire) 设置过期时间
setnx(set if not exist) 不存在再设置(在分布式锁中会经常使用!)

批量创建key-value,批量获取key-value

重点
设置一个对象:set user:1 {name:zhangsan,age:3},设置一个user:1对象,值为json字符串来保存一个对象。
这里的设计是user:{id}:{filed},这样的设计在redis中是完全ok的了

先get后set 组合命令,可以用于更新操作

List(列表)

基本介绍

  1. 它实际是一个链表,before–Node–after
  2. 如果key不存在,创建新的链表;如果key存在,新增内容
  3. 如果移除了所有值,链表变空了,也代表不存在
  4. 在两边插入或修改值效率最高,中间元素,相对会低一点(LinkedList头插与尾插效率更高)
  5. 可以实现消息排队!消息队列 lpush rpop lpush rpop
  6. 在redis里面,list可以实现为栈,队列,阻塞队列
  7. 在String命令基础上,所有的list命令都以L开头代表list

命令实践

插入

移除元素 lpop,rpop

通过下标取值,第一个下标是0

查看list的长度 llen

移除指定的值,取关

String中有个trim方法,redis中有个ltrim命令可以实现截断

rpoplpush

lset {key} {index} {value},给list的某个索引位置设置值,替换值,是一个更新的操作。如果当前所以不存在就会失败

linsert,通过before/after来控制插入的位置

Set

基本介绍

  1. set的值是无序不重复
  2. 在String命令基础上,所有的命令都以s开头代表set

命令实践

添加元素,查询元素,判断元素是否存在

获取集合中的某个元素,移除set集合中的指定元素

srandmexx 获取一个随机值

随机移除一个key:spop

将一个指定的值移动到另一个集合

  • 差集:sdiff
  • 交集:sinter
  • 并集:sunion

脉脉,微博,微信等的共同关注,二度人脉等可以通过交并补来实现!

Hash

基本介绍

hash适合存储对象,经常变动的信息。String适合存储字符串即json 。redis的类型指的是后面的value。也就是说hash类型就是Map集合,它的value就是一个键值对相当于key:map。key本质和String类型没有太大区别,还是一个简单的String。

命令实践

Zset

基本介绍

  • zset是在set的基础上多了一个score,类似于排序的东西
  • 在String命令基础上,所有的list命令都以z开头代表zet

命令实践

添加一个元素,添加多个元素

使用场景:set排序 存储班级成绩表,工资表排序!

三种特殊类型

geospatial

基本介绍

geo底层实现原理是Zset,可以使用Zset命令来操作geo

命令实践

geoadd

  • 作用:添加地理位置
  • 规则:经度是有范围的,两极是无法直接添加(具体范围官网有),一般是程序一次性写入
  • 当坐标超出命令时,会报错

geopos:获得坐标值,可以取多个也可以取一个

geodist:查看两点之间的距离,有一点不存在就会有问题,可以指定单位,具体看官网

georadius: 以给定的经纬度为中心,找出指定半径内的元素(必须在key中)

georadiusbymember: 查询指定元素周围元素(类似于附近场馆)

geohash:返回一个或多个元素的geohash表示,该命令返回11位

hyperloglog

基础知识

基数指的是不重复的元素,比如a集合是1,2,3,b几个是1,2.那么基数就是2,官方明确说明这里有误差,但是误差是可以接受的

简介

Redis2.8.9就有Hyperloglog这个数据结构,它是一种基数统计的算法。优点在于它占用的内存是固定的,2的64次方个元素,只需要12k的内存!相比于使用set(元素是唯一的)来实现一些功能,从内存角度,它是首选!

实际场景

网页的UV统计(一个人访问多次,也只算一次):

  • 传统方式:set保存用户的id,然后统计set中的元素数量即可。这个方式耗内存太大,我们的问题是要计数,不是存放数据。
  • redis:有0.81%的容错率,是可以接受的。

命令练习截图

bitmap

基础知识

Bitmaps是位图,是一种数据结构!都是操作二进制位来进行记录,就只有0跟1两个状态!!
应用场景:统计用户信息,活跃,不活跃!登录,未登录!打卡,未打卡!两个状态的,都可以使用Bitmaps!

命令练习截图

阿里云线上环境操作Redis相关推荐

  1. 教你三分钟上手阿里云OOS上传操作

    教你三分钟上手阿里云OOS上传操作 1.注册登录 如果小伙伴需要进行使用阿里云oss操作,第一步我们得注册/登录阿里云 https://www.aliyun.com/,小编建议大家尽量使用支付宝登录, ...

  2. 阿里云ECS上环境搭建(virtualenv+flask+gunicorn+supervisor+nginx)

    阿里云ECS目前有新用户免费半年使用的活动,就利用闲暇时间申请了一台,具体申请可到http://free.aliyun.com/?spm=5176.383518.1.28.OXp5YZ. 我选择的配置 ...

  3. 2020年云栖大会阿里云线上直播地址

    最新消息,阿里云在官微上宣布"2020云栖大会"即将于9月17日-18日开幕,大会由阿里巴巴集团主办,是面向政府.产业.开发者的世界级.现象级科技大会. 云栖大会的前身可追溯到20 ...

  4. 阿里云线上部署自己的写的小项目

    unbuntu20.0.4线上部署自己写的项目(laravel+vue) 这周把自己写的菜鸡项目,仿小米商城部署到线上 系统unbuntu20.0.4大致流程及bug记录 一.搭建环境 1.安装Apa ...

  5. 基于Spring boot + Mybatis +Netty 实现前后端分离的聊天App,部署到阿里云线上服务器...

    前后端分离Spring boot 项目部署 了解前后端分离项目 配置云服务器 java maven tomcat nginx mysql 部署后端项目 部署前端项目 部署Java环境 1.下载JDK软 ...

  6. 记一次线上环境 redis偶尔连接超时报错 解决

    记一次线上环境 redis偶尔连接超时报错 解决 贴出本地控制台日志 说实话,很痛苦,跟进很久了,一直认为的jvm程序所使用的配置的连接池框架问题 因为程序为 springboot 2 spring ...

  7. 阿里云服务器上搭建微信小程序服务端环境。

    无论是搭建个人博客空间也好,微信小程序也罢,搭建环境必需的两点:云服务器.域名,下面一步步给搭建演示如果在一台阿里云服务器上搭建微信小程序服务端环境. 1.云服务器准备:可在阿里云购买ECS服务器   ...

  8. 指令脚本redis线上环境监控脚本(python脚本)

    在改章节中,我们要主介绍指令脚本的内容,自我觉感有个不错的议建和大家分享下 近来一个月没啥新更,边身生发太多事,结业几年来霉运太多,虽然不信命,但我信有些性命的确好,有些性命的确差,其它不说也罢.(大 ...

  9. 在阿里云ECS上搭建Skynet服务器与Unity通信

    在阿里云ECS上搭建Skynet服务器与Unity通信 创建阿里云ECS实例 Skynet搭建 服务端代码部分 客户端部分(Unity) 创建阿里云ECS实例 这部分的话按照阿里云流程去做就可以了.也 ...

最新文章

  1. Spring Security配置错误
  2. maven 构建 springmvc + spring security 权限控制示例
  3. 09花冠钥匙计算机电路图,丰田花冠轿车发动机防盗系统设定
  4. Unity UGUI——UI基础,Canvas
  5. 2018-2019-2 网络对抗技术 20165334 Exp7 网络欺诈防范
  6. Linux驱动模型解析bus之platform bus
  7. 道一声java技术_java提高篇(二)-理解java的三大特性之继承 - Java 技术驿站-Java 技术驿站...
  8. 安卓开发eclipse+adt下载
  9. R笔记3:ggplot绘制商务图表…
  10. 发卡行 收单行 收单
  11. windows光标移动快捷键操作
  12. cannot enlist more than one non-XA resource
  13. 仿酷狗歌词的滚动效果
  14. python数据分列_Python pandas 数据无法正常分列
  15. [区块链技术] 吐血推荐!区块链从入门到放弃(区块链入门汇总整理)
  16. 软件测试之测试主流技能
  17. ssm + redis
  18. 机器学习简介及常用算法
  19. 嵌入式软件工程师面试需要的TCPI/IP协议栈知识点
  20. macos docker挂载iso报failed to setup loop device: No such file or directory和mount: permission denied解决

热门文章

  1. 神经网络训练数据集下载,神经网络训练集数量
  2. 现实中网络如何接入使用(由Internet到手机WiFi上网)
  3. 微信小程序中使用阿里iconfont
  4. word关闭时卡死_edge浏览器卡死解决方案-
  5. 天气转凉除了衣服要多穿,知识也要多多积累啊 Java——TreeMap常用methods,还不赶紧收藏起来
  6. c#桌面应用程序部署_创建和部署应用程序:桌面与云
  7. python中把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。
  8. Deepin深度操作系统小问题合集
  9. Oracle tnsping 03505,oracle客户端tnsping,提醒:TNS-03505: 无法解析名称
  10. 脚本部署csf防火墙_CSF的功能和安装过程(ConfigServer安全性和防火墙)