前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis数据类型及命令

Redis数据类型及命令

作者头像
张小驰出没
发布2021-12-06 16:01:12
4910
发布2021-12-06 16:01:12
举报
文章被收录于专栏:用户8506532的专栏

Redis数据类型及命令

基本数据类型

String - 字符串

我提前存入了两个数据 k:vz:c

10
10
追加字符串

追加字符串,如果当前可以不存在就相当于 set

代码语言:javascript
复制
APPEND xxx value
获取字符串长度
代码语言:javascript
复制
STRLEN XXX
11
11
自动加 1
代码语言:javascript
复制
INCR XXX
自动减 1
代码语言:javascript
复制
DECR XXX
设置步长,指定增量
代码语言:javascript
复制
INCRBY XXX 数值
设置步长,指定减量
代码语言:javascript
复制
DECRBY XXX 数值 
12
12
截取字符串
代码语言:javascript
复制
GETRANGE k 0 3   #截取字符串[0,3] 

GETRANGE k 0 -1  #获得全部的字符串
替换指定位置开始的字符串
代码语言:javascript
复制
SETRANGE k 1 xx
13
13
设置过期时间

setex ( set with expire )

代码语言:javascript
复制
setex k 10 hello   #存入数据 k:"hello" 有效时间 10s
13
13
不存在 再设置

setnx ( set if not exist)

代码语言:javascript
复制
setnx k 11     #如果 k 不存在,存入数据 k:"11"
15
15
同时设置多个值
代码语言:javascript
复制
mset k1 v1 k2 v2 k3 v3
同时获取多个值
代码语言:javascript
复制
mget k1 k2 k3
多个值不存在 再设置
代码语言:javascript
复制
msetnx k1 v1 k4 v4   # 该操作是一个原子性操作,一个失败 全部失败
16
16
存取对象

user : {id} : {filed}

代码语言:javascript
复制
mset user:1:name zc user:1:age 20   

mget user:1:name user:1:age
17
17
先获取再存入
代码语言:javascript
复制
getset k v
18
18

List - 列表

在redis里面,我们可以把 list 变成,栈、队列、阻塞队列

存入数据(头插)
代码语言:javascript
复制
LPUSH list one             # 存入list列表,数据为 one
  
LPUSH list two three       # 存入list列表,数据为 two、three
存入数据(尾插)
代码语言:javascript
复制
RPUSH list right           # 存入list列表,数据为 right
获取指定范围数据
代码语言:javascript
复制
LRANGE list 0 1            # 获取list列表 0 1 数据
                          
LRANGE list 0 -1           # 获取list列表全部数据
19
19
取出数据(从头部)
代码语言:javascript
复制
LPOP xxx
取出数据(从尾部)
代码语言:javascript
复制
RPOP xxx
通过下标获得值
代码语言:javascript
复制
lindex xxx index
获取列表长度
代码语言:javascript
复制
llen xxx          
20
20
移除指定值
代码语言:javascript
复制
lrem list 2 two         # 移除list列表中 2 个 two , 移除数量多于现存数量的话,会全部移除 不报错
21
21
截取指定长度数据

通过下标,截取指定长度数据,会直接改变原列表

代码语言:javascript
复制
ltrim list 1 2         # 截取list列表,1-2 元素
22
22
移除列表中元素,移动到新的列表中
代码语言:javascript
复制
rpoplpush list list1   # 移除list列表的最后一个元素,将他移动到list1列表中 
23
23
替换指定位置的值

对于该语句,要满足:

  • 存在该list列表
  • 列表中指定位置有数据
代码语言:javascript
复制
lset list 0 test    #将list列表第0个位置的数据替换为test
24
24
插入具体值
代码语言:javascript
复制
LINSERT list before v3 v2   # 在list列表中的v3数据 前 插入v2

LINSERT list after v3 v4    # 在list列表中的v3数据 后 插入v4
25
25

Set - 集合

set中是不能重复读的

保存获取数据
代码语言:javascript
复制
sadd set hello           #存入一个数据,存入hello到set集合中

sadd set v1 v2 v3        #存入多个数据,存入v1、v2、v3到set集合中

smembers set             #查看set集合中所有数据
17
17
判断值是否在集合中
代码语言:javascript
复制
sismember set hello    #判断hello是否在set集合中
 
sismember set v1       #判断v1是否在set集合中
18
18
获取set集合数据个数
代码语言:javascript
复制
scard set     
19
19
移除set集合指定元素
代码语言:javascript
复制
srem set hello        #set集合中移除hello
20
20
随机获取元素
代码语言:javascript
复制
srandmember set        #随机获取set集合1个元素

srandmember set 2      #随机获取set集合2个元素
21
21
随机删除元素
代码语言:javascript
复制
spop set              #随机删除1个元素

spop set 2            #随机删除2个元素
22
22
将指定值移动另一个集合
代码语言:javascript
复制
smove set set1 v2    #将v2元素从set集合移动到set1集合
23
23
数字集合类
  • 差集
  • 交集
  • 并集
代码语言:javascript
复制
sdiff set1 set2     #set1集合和set2集合的差集(set1存在,set2不存在)
代码语言:javascript
复制
sinter set1 set2    #set1、set2集合中的交集,即两者都存在的元素
代码语言:javascript
复制
sunion set1 set2    #set1、set2并集
24
24

Hash - 哈希

Map集合,key-may,这个值是map集合,本质和string类型没有太大区别,还是一个key-value hash更适合存储对象,string更适字符串存储

存入一个元素
代码语言:javascript
复制
hset hash k v       #存入hash集合,k-v
获取一个元素
代码语言:javascript
复制
hget hash k         #获取hash集合 k元素对应v
存入多个元素
代码语言:javascript
复制
hmset hash k1 v1 k2 v2   #存入hash集合 k1-v1 k2-v2
获得多个元素
代码语言:javascript
复制
hmget hash k1 k2     #获取hash集合 k1、k2元素对应v
获取全部数据
代码语言:javascript
复制
hgetall hash
获取集合中字段数量
代码语言:javascript
复制
hlen hash
删除对应元素
代码语言:javascript
复制
hdel hash k          #删除hash集合,k字段
25
25
获得所有k字段
代码语言:javascript
复制
hkeys hash
获得所有value
代码语言:javascript
复制
hvals hash
判断指定字段是否存在
代码语言:javascript
复制
hexists hash k1      #判断hash集合中k1字段是否存在
26
26
增加指定增量
代码语言:javascript
复制
hincrby hash k 2       #hash集合k字段的v+2

hincrby hash k -1      #hash集合k字段的v-1
27
27
不存在 再设置
代码语言:javascript
复制
hsetnx hash k4 v4     #hash集合中 k4字段不存在的话,存入k4-v4
28
28

Zset - 有序集合

set集合中 , set k1 v1 ; 它是一个无序不重复集合 zset集合中,zset k1 score1 v1 ; 它是一个有序不重复集合

添加集合中的值
代码语言:javascript
复制
zadd zset 1 one          #添加zset集合元素one,顺序为1

zadd zset 2 two 3 three  #添加zset集合元素two、three,顺序为2、3
获得范围内的集合值
代码语言:javascript
复制
zrange zset 0 -1         #获取全部集合值

zrange zset 0 1          #获取集合中0-1的值
29
29
获得集合中的个数
代码语言:javascript
复制
zcard zset
从小到大,显示全部数据
代码语言:javascript
复制
zrangebyscore zset -inf +inf    #从小到大,显示全部数据

zrangebyscore zset -inf 2       #从小到大,显示最小到2的数据

zrangebyscore zset -inf 2 withscores #从小到大,显示最小到2的数据并且带着排序数字
从大到小,显示全部数据
代码语言:javascript
复制
zrevrange zset 0 -1
30
30
获取指定区间的元素数量
代码语言:javascript
复制
zcount zset 0 2         #获取0-2的元素数量

zcount zset 0 10        #获取0-10的元素数量,超过现存最大值,会显示全部数量,不会报错
移除集合中指定元素
代码语言:javascript
复制
zrem zset two           #移除zset集合中two元素
31
31

特殊数据类型

Geospatial - 地理位置

六个命令:

  • GEOADD : 添加地理位置
  • GEOPOS : 获取指定的城市的精度和纬度
  • GEODIST : 查看两者之间的直线距离
  • GOERADIUS : 以给定的经纬度为中心,找出某一半径内的元素
  • GEORADIUSBYMEMBER :找出位于指定元素周围的其他元素
  • GEOHASH :返回一个或者多个位置元素的Geohash表示

中国城市经纬度查询 :http://www.jsons.cn/lngcode/

添加地理位置

两极无法直接添加,一般会下载城市数据,通过程序一次性导入

有效的经度介于 -180 度至 180 度之 ; 有效的纬度介于 -85.05112878 度至 85.05112878 度之间。

代码语言:javascript
复制
geoadd china:city 116.405285 39.904989 beijing              #加入中国城市地理位置,经、纬度,beijing

geoadd china:city 113.665412 34.757975 zhengzhou 125.14904 42.927 xian  #加入两条记录
获取指定的城市的精度和纬度
代码语言:javascript
复制
geopos china:city beijing
32
32
查看两者之间的直线距离

单位:

  • [默认] m : 表示单位为米
  • km : 表示单位为千米
  • mi : 表示单位为英里
  • ft : 表示单位为英尺
代码语言:javascript
复制
geodist china:city beijing shanghai          #查看 北京到上海 的直线距离,默认单位为米

geodist china:city zhengzhou xian km         #查看 郑州到西安 的直线距离,单位为千米
33
33
以给定的经纬度为中心,找出某一半径内的元素
代码语言:javascript
复制
georadius china:city 110 30 1500 km                   # 以110,30这个经纬度为中心,寻找1500km内的城市

georadius china:city 110 30 1500 km withdist          # 以110,30这个经纬度为中心,寻找1500km内的城市,并显示到中间距离的位置

georadius china:city 110 30 1500 km withdist count 2  # 以110,30这个经纬度为中心,寻找1500km内的城市,只显示两条,并显示到中间距离的位置

georadius china:city 110 30 1500 km withcoord         # 以110,30这个经纬度为中心,寻找1500km内的城市,并显示查出城市的定位信息

georadius china:city 110 30 1500 km withcoord count 2 # 以110,30这个经纬度为中心,寻找1500km内的城市,只显示两条,并显示查出城市的定位信息
34
34
查看指定元素周围的其他元素
代码语言:javascript
复制
georadiusbymember china:city beijing 1000 km     # 查看北京元素1000km以内的其他元素

georadiusbymember china:city shanghai 500 km     # 查看上海元素500km以内的其他元素
35
35
返回位置元素的Geohash表示

将二维的经纬度转换为一维的字符串,如果两个字符串越接近,那么则距离越近

代码语言:javascript
复制
geohash china:city beijing shanghai xian
36
36
底层的实现原理

GEO 底层的实现原理其实就是 Zset , 我们可以使用 Zset 命令来操作 GEO

代码语言:javascript
复制
127.0.0.1:6379> zrange china:city 0 -1      # 查看china:city集合中全部元素
1) "hangzhou"
2) "shanghai"
3) "zhengzhou"
4) "beijing"
5) "xian"
127.0.0.1:6379> zrem china:city xian        # 移除china:city集合中xian元素
(integer) 1
127.0.0.1:6379> zrem china:city shanghai    # 查看china:city集合中shanghai元素
(integer) 1
127.0.0.1:6379> zrange china:city 0 -1      # 查看china:city集合中全部元素
1) "hangzhou"
2) "zhengzhou"
3) "beijing"

Hyperloglog - 基数统计

基数可以比较大小 A = {1,2,3} = 3 ; B = {1,2,3,4,4} = 4 基数 { 不重复的元素 } = xxx

优点 : 占用的内存固定 , 2^64(long)不同的元素的技术 , 只需要12KB内存 , 如果要从内存角度Hyperloglog首选 0.81%错误率 , 可以忽略不计.

创建一组元素
代码语言:javascript
复制
127.0.0.1:6379> pfadd hype a b c d
统计元素的基数数量
代码语言:javascript
复制
pfcount hype 
合并两组元素
代码语言:javascript
复制
pfmerge hype2 hype hype1           #将hype、hype1 合并成 hype2
37
37

Bitmaps - 位图场景

位存储

Bitmaps位图 , 是操作二进制位来进行记录 , 就只有0和1两个状态

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

模拟每周打卡 setbit 名称 日期(0-6) 是否打卡(0没打卡、1已打卡)

代码语言:javascript
复制
127.0.0.1:6379> setbit sign 0 1   #周一 已打卡
(integer) 0
127.0.0.1:6379> setbit sign 1 1   #周二 已打卡
(integer) 0
127.0.0.1:6379> setbit sign 2 0   #周三 未打卡
(integer) 0
127.0.0.1:6379> setbit sign 3 0   #周四 未打卡
(integer) 0
127.0.0.1:6379> setbit sign 4 1   #周五 已打卡
(integer) 0
127.0.0.1:6379> setbit sign 5 1   #周六 已打卡
(integer) 0
127.0.0.1:6379> setbit sign 6 1   #周日 已打卡
(integer) 0
127.0.0.1:6379> getbit sign 0     #查询周一是否打卡
(integer) 1
127.0.0.1:6379> getbit sign 3     #查询周四是否打卡
(integer) 0
127.0.0.1:6379> bitcount sign     #查询这周一共打卡几天
(integer) 5

个人博客为: MoYu’s HomePage

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/06/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Redis数据类型及命令
    • 基本数据类型
      • String - 字符串
      • List - 列表
      • Set - 集合
      • Hash - 哈希
      • Zset - 有序集合
    • 特殊数据类型
      • Geospatial - 地理位置
      • Hyperloglog - 基数统计
      • Bitmaps - 位图场景
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档