三、redis的数据类型

基本操作命令

#设置一个key
SET name test
#获取一个key
GET name 
#设置key的过期时间
EXPIRE name 10
#查看key的过期时间 -1表示永不过期
TTL name
#查询是否存在key
EXISTS name
#移动数据到其他数据库  1表示1号数据库 (从0开始)
MOVE name 1
#查看key的类型
TYPE name

​ 可查看中文翻译网站命令介绍: http://redis.cn/commands.html

5大常用数据类型

  1. String类型

    #追加字符串 如果当前key不存在 就set这个key
    APPEND name 321
    #查看字符串长度
    STRLEN name
    #对数值型value加1  非数值型要报错   view是一个String类型的key
    INCR view
    #对数值型value减1
    DECR view
    #指定增长数量
    INCRBY view 10
    #指定减少数量
    DECRBY view 5
    #截取字符串 0到3 共4个字符 如果3超出字符串长度 截取到末尾
    GETRANGE name 0 3
    #截图所有字符
    GETRANGE name 0 -1
    #替换value 从第1个位置替换后面两个字符
    SETRANGE name 1 xx
    #如果key存在就重新设置 300为过期时间秒
    SETEX key1 300 v1
    #如果key不存在才设置 否则不设置
    SETNX key2 v2
    #批量设置key-value
    mset k1 v1 k2 v2 k3 v3
    #批量获取key
    mget k1 k2 k3
    #如果不存在 则批量设置 如果其中一个k1存在 则该命令执行失败
    #msetnx是一个原子性操作
    MSETNX k1 h1 k4 v4
    #先get 再set
    GETSET db redis
    
    ==#其他用法==
    #保存一个对象 key为 user:{id}:{filed}
    MSET user:1:name zhangsan user:1:age 3
    #获取一个对象
    MGET user:1:name user:1:age
    

    1. List(列表)数据类型

    大多数的list命令都是以L开头的

    #添加一个list 从左边操作 
    LPUSH list lv1 lv2
    #添加值到list 从右边操作
    RPUSH list rv1 rv2
    #获取全部list 按以上结果为 lv2,lv1,rv1,rv2
    LRANGE list 0 -1
    #获取部分list
    LRANGE list 0 1
    #从左边移除一个值
    LPOP list
    #从右边移除一个值
    RPOP list
    #按下标取一个值
    LINDEX list 1
    #查看list长度
    LLEN list
    #移除value 2表示移除个数 lv2表示值 返回真实移除个数
    LREM list 2 lv2
    #截取list  只保留第1到第2个元素
    LTRIM list 1 2
    #移除右边第一个元素到其他List
    RPOPLPUSH list list2
    #按下标位置更新元素的值
    LSET list 0 h1
    #在现有元素的前面插入一个新元素
    LINSERT list before h4 h3
    #在现有元素的后面插入一个新元素
    LINSERT list after h4 h5
    

    ​ list的实际数据结构是一个链表。list中没有查询元素是否存在的操作,如果有这种需求,应该换成set集合。

    1. set(集合)

    set集合中不能有重复的值。全部命令都以S开头

    #添加set集合元素
    SADD myset hello wl-it
    #查看set元素列表
    SMEMBERS myset
    #查看元素是否存在
    SISMEMBER myset hello
    #获取set集合中元素的个数
    SCARD myset
    #移除指定元素
    SREM myset hello
    #随机获取一个元素
    SRANDMEMBER myset
    #随机获取指定个数的元素
    SRANDMEMBER myset 2
    #随机移除一个元素
    SPOP myset
    #随机移除指定个数元素
    SPOP myset 3
    #移动一个指定元素到另外的set集合中
    SMOVE myset myset2 set10
    #查看两个集合的差集
    SDIFF set1 set2
    #查看两个集合的交集
    SINTER set1 set2
    #查看两个集合的并集
    SUNION set1 set2
    
    1. hash

    保存 key-map类型。 hash的所有命令都是以H开头的

    #设置一个hash
    hset myhash k1 v1
    #获取一个字段值
    hget myhash k1
    #设置一个hash key的多个元素
    HMSET myhash k1 h1 k2 v2 k3 v3
    #获取多个元素
    HMGET myhash k1 k2
    #获取所有元素
    HGETALL myhash
    #删除hash中的一个字段
    HDEL myhash k1
    #获取字段的数量
    HLEN myhash
    #判断hash中的指定字段是否存在
    HEXISTS myhash k1
    #只获取hash中所有的key
    HKEYS myhash
    #只获取hash中所有的value
    HVALS myhash
    #增加hash中一个字段的值
    HINCRBY myhash view 2
    #不存在则添加一个hash的字段
    HSETNX myhash k4 v4
    

    ​ hash通常用来保存一个对象和经常变更的数据

    1. zset(有序集合)

    ​ zset有序集合所有的命令以Z开头

    #添加一个有序集合
    ZADD myzset 1 one
    #添加多个有序集合元素
    ZADD myzset 3 three 4 four
    #查找有序集合所有元素
    ZRANGE myzset 0 -1
    #查找指定范围内的有序集合元素
    ZRANGE myzset 0 2
    #查找所有元素按照从小到大排序
    ZRANGEBYSCORE myzset -inf +inf
    #查找范围内的数据 score从最小到3的数据
    ZRANGEBYSCORE myzset -inf 3
    #查找范围内的数据 并返回score
    ZRANGEBYSCORE myzset -inf 3 withscores
    #查看所有元素按照从大到小排序
    ZREVRANGEBYSCORE myzset +inf -inf
    #移除一个元素
    ZREM myzset four
    #查看集合中的元素个数
    ZCARD myzset
    #获取区间中的元素个数 
    ZCOUNT myzset 1 4
    

3种特殊数据类型

  1. geospatial 地理位置

    如位置信息定位,附近的人,打车距离

    先添加一些经纬度测试数据: https://jingweidu.51240.com/

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

    相关命令:

    ​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-twUcydfq-1657348948555)(G:\学习\redis学习\redis学习笔记\image-20200405205457587.png)]

    ​ 只有6个命令。

    #添加测试数据
    127.0.0.1:6379> GEOADD china:city 116.39 39.91 beijing
    (integer) 1
    127.0.0.1:6379> GEOADD china:city 121.48 31.40 shanghai
    (integer) 1
    127.0.0.1:6379> GEOADD china:city 120.21 30.30 hangzhou
    (integer) 1
    127.0.0.1:6379> GEOADD china:city 106.54 29.40 chongqing
    (integer) 1
    127.0.0.1:6379> GEOADD china:city 113.88 22.53 shenzheng
    (integer) 1
    127.0.0.1:6379> GEOADD china:city 117.30 39.71 tianjin 108.93 34.23 xian
    (integer) 2
    
    #获取数据
    127.0.0.1:6379> GEOPOS china:city beijing chongqing
    1) 1) "116.38999968767166138"
       2) "39.90999956664450821"
    2) 1) "106.54000014066696167"
       2) "29.39999880018641676"
    
    
    

    两点之间的距离 geodist

    单位如下

    • m 表示单位为米。
    • km 表示单位为千米。
    • mi 表示单位为英里。
    • ft 表示单位为英尺。
    #查看两点间的距离 按km算
    127.0.0.1:6379> GEODIST china:city beijing shanghai km
    "1051.9051"
    

    ​ GEORADIUS: 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素

    #获取指定经纬度为中心的指定范围内的城市
    127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withdist
    1) 1) "chongqing"
       2) "340.8679"
    2) 1) "xian"
       2) "481.1540"
    
    #以城市名称为中心 查找指定距离内的城市
    127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 1000 km
    1) "tianjin"
    2) "beijing"
    3) "xian"
    
    #按照字符串方式显示经纬度
    127.0.0.1:6379> GEOHASH china:city beijing
    1) "wx4g092see0"
    

    Geo的底层实现原理就是zset集合。可以使用zset命令操作Geo数据。

  2. Hyperloglog

    Redis的Hyperloglog是用来做基数统计的数据结构

    用来取两个集合的并集,做不精确的数据统计。它的所有命令都已PF开头

    127.0.0.1:6379> PFADD mykey1 a b c d e f g
    (integer) 1
    127.0.0.1:6379> PFCOUNT mykey1
    (integer) 7
    127.0.0.1:6379> PFADD mykey2 f g x y z a b
    (integer) 1
    127.0.0.1:6379> PFCOUNT mykey3
    (integer) 0
    127.0.0.1:6379> PFCOUNT mykey2
    (integer) 7
    127.0.0.1:6379> PFMERGE mykey3 mykey1 mykey2
    OK
    127.0.0.1:6379> PFCOUNT mykey3
    (integer) 10
    
    
  3. Bitmap

    Bitmap: 为存储数据结构。

    以用户打卡功能为例

    #设置每天打卡数据
    127.0.0.1:6379> SETBIT sign 0 1
    (integer) 0
    127.0.0.1:6379> SETBIT sign 1 0
    (integer) 0
    127.0.0.1:6379> SETBIT sign 2 0
    (integer) 0
    127.0.0.1:6379> SETBIT sign 3 1
    (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 0
    
    #查看某天是否打卡
    127.0.0.1:6379> GETBIT sign 4
    (integer) 1
    127.0.0.1:6379> GETBIT sign 6
    (integer) 0
    
    #统计打卡天数
    127.0.0.1:6379> BITCOUNT sign
    (integer) 4
    
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值