栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

阿里云线上环境操作Redis

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

阿里云线上环境操作Redis

官网对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!

命令练习截图

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/583688.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号