Redis学习笔记:支持的数据结构应用命令

本文概述了Redis中基础和高级数据类型,包括String的字符串操作、Map的哈希存储、List的动态数组功能、Set的集合运算、Zset的有序集合特性,以及Geospatial用于地理信息处理。了解这些技术有助于提升数据管理和分析效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   基础数据类型有String、Map、List、Set、Zset五种;高级数据类型有Geospatial、Hyperloglog、Bitmaps

String(字符串):

  • 追加值:append key1 cao

  • 查看键的长度:strlen key1

  • 键值++:incr views(可以用来做网站访问量)

  • 键值+num:incrby views 10(步长设置)

  • 键值–:decr views

  • 查看键(String)的范围子字符串:getrange key 0 3(全部:getrange key 0 -1)

  • 替换(String)的范围子字符串:setrange key 1 xxx(比如“abcdefg”变成“axxxefg”)

  • 不存在再设置:setnx mykey “redis”(如果mykey不存在,那么创建一个mykey;如果mykey已经存在,那么创建失败)

  • 批量不存在再设置:msetnx k1 v1 k4 v4(结果是失败的,因为k1已存在,操作又是原子操作,整体就是失败的,所以k4没有被设置成功)

  • 组合getset先获取value再set value:getset key1 sb

  • 设置一个对象:set user:1 {name:hysen,age:21}
    或者:mset user:1:name hysen user:2:age 21
    前者使用的是json字符串作为值,后者吧user🆔field 看做一个key整体

List(列表):可以当做栈、队使用

  • 从左边插入数据:lpush list one
  • 从右边插入数据:rpush list two
  • 从左边拿取数据:lindex list 1
  • 从右边拿取数据:rindex list 1
  • 从左边范围拿取数据:lrange list 0 1
  • 从右边范围拿取数据:rrange list 0 1
  • 从左边移除数据:lpop list
  • 从右边移除数据:rpop list
  • 组合命令将list1的数据拿出放入list2:rpoplpush list1 list2
  • 移除list中指定个数的值:lrem list 2 three(移除2个值为three的值)
  • 修剪数据:ltrim list 1 2(把下标在[1,2]之间的数据移除)
  • 拿到List长度:llen list
  • 在指定位置放入数据(前提是已经存在这个下标值key):lset list 2 hysen
  • 在指定元素前/后插入数据:linsert list before/after “you” “love”

Set(集合)

  • 添加成员: sadd myset “hello”
  • 移除成员:srem myset hello随机移除成员:spop myset
  • 查看所有成员:smembers myset
  • 判断是否包含成员:sismember myset “hello”
  • 获取集合中的元素个数:scard myset
  • 随机获取成员:srandmember myset
  • 移动成员到另一个集合中:smove myset1 myset2 “hysen”
  • 查看集合1中集合2没有的元素(差集):sdiff set1 set2
  • 查看交集:sinter set1 set2
  • 查看并集:sunion set1 set2

Hash(哈希):更适合对象的存储

key是一个map,也就是key-value

  • 添加成员:hset myhash field1 value1
  • 批量添加成员:hmset myhash field1 value1 field2 value2
  • 获取key中的value:hget myhash field1
  • 批量获取key中的value:hmget myhash field1 field2
  • 同时获取key中的key和value:hgetall myhash
  • 删除成员:hdel myhash field1(同时删除了value1)
  • 获取长度:hlen myhash(“键值对”的个数)
  • 判断是否存在某key:hexists myhash field1
  • 获取所有的key:hkeys myhash
  • 获取所有的value:hvals myhash
  • 自增:hincrby myhash field3 1
  • 自减:hdecrby myhash field3 1
  • 不存在则创建,存在不创建:hsetnx myhash field4 hello
  • 存储对象:hset user:1 name qinjiang

Zset(有序集合)

在set的基础上增加了一个值,set k1 v1 -> zset k1 score1 v1.其中的score作用是zset根据score进行一个排序

  • 添加成员:zadd myset 1 one
  • 添加多个值:zadd myset 1 one 2 two移除成员:zrem myset xiaoming
  • 查看成员个数:zcard myset
  • 获取指定区间内的成员个数:zcount myset 100 200
  • 范围查看:zrange myset 0 2排序后查看:zrangebyscore salary -inf +inf [withscores](其中-inf是负无穷,+inf是正无穷)
  • 排序(逆序)查看:zrevrange salary 0 -1

Geospatial(地理位置): 底层是Zset实现的

推算地理位置的信息,两地之间的距离,方圆几里的人等。

  • 添加地理位置(南北极无法添加,一般用Java程序可以一次性导入):geoadd china:city 116.40 39.90 beijing(经度,纬度,名称)
  • 获取地理位置:geopos china:city beijing chongqing
  • 获取两者间距离:geodist china:city beijing xian km
  • 以一个经纬度为中心,找出某一半径内的所有元素(可以指定输出数量
  • 同时获取距离、获取对方经纬度):georadius china:city 110.30 30.20 1000 km [withdist withcoord count 3]
  • 以一个关键字为中心,找出某一半径内的所有元素:georadiusbymember china:city shanghai 1000 km
  • 将二维的经纬度转化成一维的字符串(两个字符串越接近则距离越近):geohash china:city shanghai

Hyperloglog(基数)

基数就是一个集合内不重复的数,hyperloglog就是做基数统计的,比如说一个人访问一个网站多次,应该还算作是一个人的浏览。按理说也可以用set来实现这个事,但是Hyperloglog实现的话,不必存储用户ID,不管是什么技术什么数据结构,占用的内存都是固定的12kb。有0.18%的错误率。

  • 添加成员:pfadd mykey a b c d e f g a d e
  • 查看基数:pcount mykey a b c d b c d(结果是4)
  • 合并:pfmerge newkey mykey mykey1

Bitmaps

用来统计只有两个状态的事物,比如说打卡/未打卡,只有0和1两个状态。

  • 设置某一个位置上的bit值:setbit sign 2 1
  • 查看某一歌位置上的状态:getbit sign 2
  • 统计1状态的个数:bitcount sign
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值