Redis随笔---五种基本数据类型和三种特殊数据类型

2023-05-16

基础操作

1.redis有16个数据库,使用命令< select * > 切换数据库

2.keys * 查询全部key

3.清空当前的数据库的内容:flushdb

4.清空全部数据库的内容:flushall

五大数据类型

1).string类型

1.判断当前key是否存在:exists key

2.移除指定数据库内的key:move key 1

3.设置key的过期时间,单位是秒:expire;查看当前key的剩余时间 :ttl key

4.查看当前key的类型:type key

5.set key 0 incr key #自增1

​6.decr key # 自减1

7.incrby key 10 #加指定数量(步长)

​8. decrby key 10 #减指定数量(步长)

9.截取字符串指定地址:getrange key 0 3(-1,全部) 替换指定位置开始的字符串:setrange key 1 xx

10.设置key带有过期时间:setex(set with expire) setex key 30 “HELLO”(和expire 区别是:expire必须存在这个key才能设置过期时间 )

11.不存在再设置:setnx(set if not exist) setnx key “redis” —> 1 setnx key “MongoDB” —> 0

12.批量set与get mset k1 v1 k2 v2 k3 v3 mget k1 k2 k3 msetnx k1 v1 k2 v4 #原子性,要么全部成功,不然全部失败

13.存在值则获取原来的值,并设置新的值 getset key “redis”

2).List类型

1.所有指令都是以L 开头 LPUSH list one #将一个值或者多个值,插入到列表头部(左)

​2.RPUSH list one #将一个值或者多个值,插入到列表头部(右)

3.LRANGE list 0 1 通过区间获取具体的值

​4. LRANGE list 0 -1 获取list全部的值

5.LPOP list 移除列表的第一个元素 (或者说是移除队列最左边元素)

6.RPOP list 移除最后一个元素(或者说是移除队列最右边元素)

6.通过获取list某一个值 : Lindex list 1

7.获取列表的长度: Llen list

8.移除列表指定个数的值:lrem list 1 one

9.通过下标截取指定的长度:Ltrim list 1 2 (list会被改变)

10.移除列表最后一个元素到新的列表中:rpoplpush list1 1 list2

11.将指定下标的值更新成为另外的值,更新操作(如果不存在则会报错): lset list 0 item

12.将某一个具体的值插入到列表中插入到指定值得前面或后面:linsert list before “value1” “value2”

小结:实际上是一个链表,before node left,两边都可以插入值。消息队列(Lpush Rpop),栈(Lpush Lpop)

3).Set类型:set类型中元素不可以重复

​1.sadd set1 1 2 3 4 #set集合中添加元素

2.smembers set1 #查询集合所有内容

3.sismember set1 1 #查询set中是否存在某个元素(1:存在,0不存在)

​4.scard set1 #获取set集合中个数

5.srem set1 1 #移除指定元素

6.srandmember set1 1 #随机获取一个元素

​7.spop set1 #随机移除一个元素

8.smove set1 set2 “值” #移动指定的值到新的集合中

9.sdiff set1 set2 #差集

10.sinter set1 set 2 #交集 共同好友

11.sunion set1 set2 #并集

4).Hash类型

当作Map集合,key-map(或者key-),值是Map集合

(hash1:哈希 filed1:哈希中一个key hello:哈希中一个key对应的value)

1.hset hash1 filed1 hello #set一个具体的key-vlaue

2.hget hash1 filed1 #获取一个字段值

3.hmset hash1 filed1 hello1 filed2 hello2#set多个具体的key-vlaue

4.hmget hash1 filed1 filed2#获取多个字段值

5.hgetall hash1 #获取hash1 所有字段值

6.hdel hash1 filed1 #删除hash1指定的key(filed1 )字段,与key对应的value也删除了

​7.hlen hash1 #获取hash1长度

8.hexists hash1 field1 #判断hash1中的key是否存在

9.hvals hash1 #获取指定hash1所有的值

10.hset hash1 filed1 1 #指定增量

11.hincrby hash1 filed1 n #n>0自增,例如1;n<0自减,例如-1

12.hsetnx hash1 filed1 hello #如果不存在可以设置成功;如果存在则不能设置

5).zset类型(有序集合)

​在set的基础上,增加了一个序号值:
set: sadd k1 v1
zset: zadd k1 score v1(score可以是1,2,3这些)

1.zadd zset1 1 one #添加一个值

2.zadd zset1 2 two 3 three #添加多个值

3.zrange zset1 0 -1 获取zset所有值

4.zrangebyscore zset1 -inf +inf #把所有从小到大排序(one,two ,three )
语法:zrangebyscore key min max

5.zrangebyscore zset1 -inf +inf withscores #把所有从小到大排序并带上score(one,1,two,2,three,3)

6.zrevrange zset1 0 -1 #把所有从大到小排序(three,two ,one )

6.zrem zset1 one #移除指定的元素

7.zcard zset1 #获取有序集合zset1的个数

8.zcount zset1 1 3#获取指定区间的成员数量

三种特殊数据类型

1).Geospatial地理位置

有效的经度:-180度到180度
有效的维度:-85.05112878度到85.05112878

1.geoadd #添加地理位置,南北两极无法直接添加,一般会下载数据,直接通过JAVA程序一次性导入,geoadd key 经度 维度 城市名称
geoadd china:city 116.40 39.90 beijing

2.geopos china:city beijing #获取指定城市的经度维度,获得当前定位

3.geodist #两点之间的距离,两人之间的距离
单位:
m:米(不指定默认为米)
km:千米
mi:英里
ft:英尺
geodist china:city beijing shanghai #查询结果多少米
geodist china:city beijing shanghai km #查询结果多少千米

4.georadius #以给定的经纬度为中心,查询某一半径内的元素(附近的人)
georadius china:city 110 30 500 km #查询出以经纬度(110,30)为中心附件500千米的城市
georadius china:city 110 30 500 km withdist #查询出以经纬度(110,30)为中心附件500千米的城市,并显示直线距离
georadius china:city 110 30 500 km withcoord #查询出以经纬度(110,30)为中心附件500千米的城市,并显示查出记录的经纬度
georadius china:city 110 30 500 km count 2 #查询出以经纬度(110,30)为中心附件500千米的城市,并显示查询结果中两条记录
georadius china:city 110 30 500 km withdist withcoord count 2 #查询出以经纬度(110,30)为中心附件500千米的城市,并显示直线距离,记录的经纬度,及查询结果中两条记录

5.georadiusbymember #查询指定元素周围多少距离的其他元素
georadiusbymember china:city shanghai 500km #查询上海500km范围内的其他城市

6.geohash china:city bejing #返回一个或多个位置元素的geohash表示,将返回11个字符的Geohash字符串,两个字符串越接近代表距离越近

GEO底层的实现原理其实就是zset!可以用zset命令来操作geo
场景应用:可用于 实现 获取某个地点的坐标、计算两个地点的直接距离、某个地点坐标多少范围内的地点有哪些等等

(类似现实生活中的附近的人功能)

底层:Geospatial 底层其实是 zset 可以用zset命令操作geo
zrange china:city 0 -1 #查询所有元素
zrem china:city beiing #移除指定元素

2).HyperLogLog
Redis HyperLogLog 是用来做基数(不重复的元素,可以接受误差)统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的(2^64,12KB内存)、并且是很小的。0.81%错误率,统计网页UV时可以忽略不计。

1.pfadd mykey a b c d e f g h i j #创建第一组元素mykey

2.pfcount mykey #统计第一组mykey基数,结果为10

3.pfadd mykey2 i j k l m n a b #创建第二组元素mykey2

4.pfcount mykey2 #统计第二组mykey2基数,结果为8

5.pfmerge mekey3 mykey mykey2 #合并两组mykey ,mykey2到mykey3,并集

6.pfcount mykey3 #统计第三组并集mykey3基数,结果为14,里边包含(a,b,c,d,e,f,g,h,i,j,k,l,m,n)

3).Bitmap位存储

场景应用: 统计用户信息,活跃,不活跃! 登录 、 未登录! 打卡,365打卡! 两个状态的,都可以使用Bitmaps!

优点:Bitmap 位图,数据结构! 都是操作二进制位来进行记录,就只有0 和 1 两个状态!

365 天 = 365 bit 1字节 = 8bit 46 个字节左右!

1.setbit key1 0 1 #setbit key offset value(value只有0或者1),设置(比如周一到周末打卡情况)

2.getbit key1 0 #getbit key offset,获取(比如查看某一天打卡情况)

3.bitcount key1 #bitcount key [start end]统计数据(比如统计这周key1的打卡情况)

Redis发布订阅

1.subscribe channel[channel …] #订阅一个或者多个频道

2.publish channel message #将消息(message)发布到指定的频道(channel)

3.psubscribe pattern [pattern …] #订阅一个或者多个符合给定模式的频道

4.pubsub subcommand [argument [argument …]] #查看订阅与发布系统状态

5.punsubscribe [pattern [pattern …]] #退订所有给定模式的频道

6.unsubscribe [channel [channel …]] # 退订指定的频道

测试:

订阅端:

127.0.0.1:6379> subscribe daidai   	#订阅一个频道
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "daidai"
3) (integer) 1
#等待消息推送
1) "message"	#消息
2) "daidai"		#哪个频道的消息
3) "hello,daidai!"		#具体消息的的内容

1) "message"
2) "daidai"
3) "xiaoyueliang!"

发布端:

127.0.0.1:6379> publish daidai hello,daidai!	#发布者发送消息到频道
(integer) 1
127.0.0.1:6379> publish daidai xiaoyueliang!	#发布者发送消息到频道
(integer) 1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis随笔---五种基本数据类型和三种特殊数据类型 的相关文章

  • Lua中按字符分割字符串

    我有像这样的字符串 ABC DEF 我需要将它们分开 字符并将两个部分分别分配给一个变量 在 Ruby 中 我会这样做 a b ABC DEF split 显然Lua没有这么简单的方法 经过一番挖掘后 我找不到一种简短的方法来实现我所追求的
  • 使用 Sentinels 升级 Redis 的最佳实践?

    我有 3 个 Redis 节点 由 3 个哨兵监视 我进行了搜索 文档似乎不清楚如何最好地升级此类配置 我目前使用的是 3 0 6 版本 我想升级到最新的 5 0 5 我对这方面的程序有几个疑问 升级两个大版本可以吗 我在我们的暂存环境中执
  • Scala 使用的 Redis 客户端库建议

    我正在计划使用 Scala 中的 Redis 实例进行一些工作 并正在寻找有关使用哪些客户端库的建议 理想情况下 如果存在一个好的库 我希望有一个为 Scala 而不是 Java 设计的库 但如果现在这是更好的方法 那么仅使用 Java 客
  • Redis 队列工作程序在 utcparse 中崩溃

    我正在尝试按照以下教程获得基本的 rq 工作 https blog miguelgrinberg com post the flask mega tutorial part xxii background jobs https blog m
  • docker-compose:容器之间的 Redis 连接被拒绝

    我正在尝试设置一个 docker compose 文件 该文件旨在替换运行多个进程 RQ 工作线程 RQ 仪表板和 Flask 应用程序 的单个 Docker 容器解决方案导师 http supervisord org 主机系统是 Debi
  • Spring Redis 排序键

    我在 Redis Spring Data Redis 中有以下键 localhost gt Keys 1 id 1 Name C5796 Site DRG1 2 id 2 Name CX1XE Site DG1 3 id 3 Name C5
  • Laravel Redis 配置

    我目前正在使用 Laravel 和 Redis 创建一个应用程序 几乎一切都工作正常 我按照文档中的说明扩展了身份验证 用户可以订阅 登录 注销 我可以创建内容 所有内容都存储在 Redis 中 但我有一个问题 我无法运行 php arti
  • Redis 中存储整数和字符串的区别

    这两个命令有什么区别吗 LPUSH myset 123 LPUSH myset 123 我想存储大约 500 万个整数 并且我想以最有效的方式做到这一点 不 没有什么区别 两者都存储为字符串 从redis io http redis io
  • 将文件传递给活动作业/后台作业

    我通过标准文件输入接收请求参数中的文件 def create file params file upload Upload create file file filename img png end 但是 对于大型上传 我想在后台作业中执行
  • 如何在Redis中正确存储图片?

    决定将图像存储在Redis中 如何正确执行 现在我这样做 redis gt set image path here is the base64 image code 我不确定这是否正常 将图片存储在Redis中是完全可以的 Redis 键和
  • 批量将Dictionary中的数据设置到Redis中

    我正在使用 StackExchange Redis DB 插入键值对字典Batch如下 private static StackExchange Redis IDatabase database public void SetAll
  • 为什么我们需要 Redis 来运行 CKAN?

    我想知道为什么我们需要 Redis 服务器来运行 CKAN 如果需要 为什么 我如何使用 CKAN 配置它 附注 我正在 RHEL7 中运行我的 ckan 实例 Update Redis 已成为一项要求从CKAN 2 7开始 https d
  • JedisPoolConfig 不可分配给 GenericObjectPoolConfig

    我有一个基于 Spring 的 Java Web 应用程序托管在 Heroku 上 我正在尝试使用 Redis 实现来利用 Spring 缓存抽象 当服务器启动时 我收到一条错误消息 Type redis clients jedis Jed
  • 在 Redis 中存储 IP 范围

    我有很多不同提供商的 IP 范围 例如 P1 192 168 1 10 192 168 1 50 192 168 2 16 192 168 2 49 P2 17 36 15 34 17 36 15 255 P3 我将此 IP 转换为 int
  • 如何高效地将数十亿数据插入Redis?

    我有大约 20 亿个键值对 我想将它们有效地加载到 Redis 中 我目前正在使用 Python 并使用 Pipe 如redis py https redis py readthedocs io en latest redis Redis
  • Redis 客户端忽略其上设置的配置选项并尝试连接到默认 IP 127.0.01

    在AWS中 我使用ElastiCache Redis服务器并使用节点作为后端和 promise redis 包 这就是我尝试连接到我的 redis 服务器端点的方法 client redis createClient host my red
  • Redis - 错误:值不是有效的浮点数

    我在 Redis 中有一个排序集 我试图通过在Python代码中使用zincrby来更新特定元素的计数器值 例如 conn zincrby usersSet float 1 user1 但它显示错误为 错误 值不是有效的浮点数 我在 cli
  • 如果没有过期的内容,Redis maxmemory-policy volatile-lru 是否会被驱逐?

    我有一个 redis 服务器 设置了maxmemory policy set to volatile lru 文档表明 当达到内存限制时 这将从设置过期的条目集中逐出 在这种情况下 redis 是否只驱逐过期的项目 如果内存中的所有内容都设
  • Redis如何存储关联数组?设置、散列还是列表?

    我对 Redis 的所有可用存储选项有点困惑 我想做一些简单的事情 并且不想过度设计它 我正在与phpredis and Redis v2 8 6 我有一个需要存储的简单关联数组 我还需要能够通过其键检索项目并循环遍历所有项目 a arra
  • Redis 会话序列化器 3.2 和 4.2 之间不匹配

    我有一个基于 Spring Cloud 的应用程序在多个 spring boot 服务器上运行 所有服务器使用 EnableRedisHttpSession共享相同的Spring Session 我现在想将第三方小部件集成到我的应用程序中

随机推荐

  • 将寄存器清零的指令c语言,将 CX 寄存器低 4 位清零的正确指令是() 。

    相关题目与解析 将CX寄存器低四位清零其它位不变的正确指令是 A ANDCX OFOHB ANDCX OFFFOHC ANDCX 1110HD 若要使寄存器AL中的高4位不变 xff0c 低4位为0 xff0c 所用指令为 A ANDAL
  • 华为android9.1指令,华为手机进工程模式指令大全(新增EMUI9.0指令链接)

    交流广场 华为手机进工程模式指令大全 新增EMUI9 0指令链接 6973196304 电梯直达 雪夜lc 内测管家 发表于 2016 3 9 17 48 15 来自 xff1a 浏览器 最新回复 5 天前 本帖最后由 雪夜lc 于 201
  • go html桌面,用 Go 开发桌面应用程序(GUI):Webview、Lorca 与 Electron

    我想构建一个本地 Go 桌面应用程序 xff0c 有几种方法可以做到 xff1a Electron 1 xff1a 将 Node js 2 和 Chromium 3 浏览器绑定在一起 xff0c 以创建一个打包的本地 Web 应用程序 可与
  • 磁力链接怎么是html,磁力链接的使用方法有哪些

    磁力下载链接是的一种下载方式 xff0c 比较方便使用 不过有些网友就不知道怎么使用了 xff0c 其实使用方法非常简单 xff01 下面是学习啦小编给大家整理的磁力链接的使用方法 xff0c 希望能帮到大家 迅雷磁力链接的使用方法 1 通
  • 一个服务器和域名可以发布多少项目,一个服务器可以备案多少个域名

    一个服务器可以备案多少个域名 内容精选 换一换 域名如果需要绑定大陆站点 xff0c 必须在华为云备案 xff0c 未备案的域名无法绑定网站 xff0c 备案的具体步骤请参考首次备案流程指导 绑定香港站点的域名无需备案 一个华为云帐号备案的
  • exchange服务器维护模式命令,Exchange .5维护指导.doc

    Exchange 5维护指导 Exchange 5 5维护指导 一 重启和停止服务如许停止服务或重启服务应完全停止服务 xff1b 启动服务顺序 服务依赖 xff1a 1 Microsoft Exchange System Attendan
  • 12864字库的使用

    带字库的12864还是经常用到 xff0c 下面是我的一些小小的收获和记录 1 xff0c 我现在使用的12864的显示坐标和字库的定义如下 xff1a 四行汉字的初始坐标依次是 xff1a 80H xff0c 90H xff0c 88H
  • 诛仙2服务器不显示列表,诛仙2 服务器列表

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 石破天惊 富甲天下 29000 fujiatianxia link zhuxian com cn 956 流星赶月 铁血丹心 29000 tiexuedanxin link zhuxian co
  • 如何让matlab全速运行,提高matlab代码运行效率

    提高matlab代码运行效率 Matlab是一种解释性语言 xff0c 追求的是方便性 灵活性以及交互性 xff0c 因此在快速性上要比C语言这种性能强劲著称的稍逊一筹 然而 xff0c 通过一些手段 xff0c 我们也能让MATLAB语言
  • Word中给公式加编号,编号右对齐方法

    这种方法的神奇之处在于纯自动 xff0c 无须手动拖放 当然此方法的适用版本是office2016以及以后的版本 xff0c 亲测office2007不行 office2016百度云分享网址 xff1a 链接 https pan baidu
  • 构建私有镜像

    文章目录 Docker file定制镜像构建nginx镜像Dockerfile构建命令FROM 指定基础镜像RUN 执行命令COPY 复制文件ADD 文件复制CMD 容器启动命令ENTRYPOINT 入口点ENV 设置环境变量ARG 构建参
  • ROS问题整理

    问题Diary 目录 问题Diary ROS建模期 2021 2 7 1 ROS xff1a No module named rospkg 2 ImportError dynamic module does not define modul
  • MySQL——单表查询(素材+习题)

    例题 1 查询全部课程的信息 2 查询信工学院开设的课程名 课程号及学分 3 查询学分超过3学分的课程代码 课程名和开课单位 4 查询计科专业和大数据专业的学生信息 5 查询不是信工学院的学生姓名和学号 6 查询年龄是17 18 19的学生
  • 如何理解事件以及使用事件

    疑惑点 xff1a 对于刚接触事件来说 xff0c 往往会有一种现象那就是 xff0c 我为什么要用事件来调用过程 xff0c 我直接调用不行吗 xff1f 一样可以达到效果啊 xff0c 我根本就搞不懂为啥需要事件呢 xff1f 理解直接
  • centos -bash: npm: 未找到命令

    原因 xff1a 未安装 npm 解决 xff1a 1 下载 node js 阿里云镜像 xff1a CNPM Binaries Mirror cd usr local 下载所需版本 wget https nodejs org dist v
  • (PMP) 一、引论

    xff08 PMP xff09 一 引论 1 项目1 1 什么是项目1 2 项目特点 xff1a 独特性 临时性和渐进明细1 3 项目终止情况1 4 项目驱动变更1 5 项目创造商业价值 2 项目管理2 1什么是项目管理2 2 项目组合 项
  • VI使用

    VI使用 vi编辑器是所有Unix及Linux系统下标准的编辑器 xff0c 它的强大不逊色于任何最新的文本编辑器 xff0c 这里只是简单地介绍一下它的用法和一小部分指令 由于对Unix及Linux系统的任何版本 xff0c vi编辑器是
  • (PMP)二、项目运行环境

    1 事业环境因素 xff08 不可控 xff0c 须遵守 xff09 事业环境因素 xff1a 项目团队不能控制的 xff0c 将对项目产生影响 限制或指令作用的各种条件 这些因素可能会提高或限制项目管理的灵活性 xff0c 并可能对项目结
  • (PMP)三、项目经理的角色

    1 项目经理 项目经理 xff1a 项目经理是由执行组织委派 xff0c 领导团队实现项目目标的个人 注 xff1a 项目经理无需承担项目中的每个角色 xff0c 但应具备项目管理知识 技术知识 理解和经验 项目经理通过沟通领导项目团队进行
  • Redis随笔---五种基本数据类型和三种特殊数据类型

    基础操作 1 redis有16个数据库 使用命令 lt select gt 切换数据库 2 keys 查询全部key 3 清空当前的数据库的内容 flushdb 4 清空全部数据库的内容 flushall 五大数据类型 1 string类型