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随笔---五种基本数据类型和三种特殊数据类型 的相关文章

随机推荐

  • 将寄存器清零的指令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类型