Redis 基础数据结构&操作

Redis是互联网公司使用最多的中间件之一了,那么我们有必要熟练掌握redis的基本数据结构及其使用的方式。

1. redis的基本数据结构

1.1 redis基本数据类型的使用场景

类型 使用场景
String 保存基本的字符串类型
Hash 保存对象(字典)
List 有序的列表
Set 无序去重的集合
ZSet 带有分数的有序集合

1.2 redis string类型的常用操作命令及其含义

命令 含义
set 设置指定的值
get 获取指定的值
getrange 获取字符串的子串
getset 设置新的值并返回旧值
getbit 对key所存储的字符串值,获取指定偏移量上的位(bit)
setbit 对key所存储的字符串值,设置或者清除指定偏移量上的位()
mget 获取一个或多个值
mset 设置一个或多个值
setex 设置一个值,并指定过期时间,单位为seconds
setnx 只有在key不存在的时候才能设置成功
setrange 覆盖字符串的子串
strlen 返回存储的字符串的长度
msetnx 同时设置一个或多个值,只有当key不存在时,才能设置成功
psetex 设置一个key的value值,并指定过期时间,单位为ms
incr value增长1
incrby value增长一个指定增量
incrbyfloat value增长一个float增量
decr value减少1
decrby value减少一个指定减量
decrbyfloat value减少一个指定float减量
append 在value尾部追加一个子串

1.3 redis hash类型的常用操作及其含义

命令 含义
hdel 删除一个或多个hash表字段
hexists 查看hash表中字段是否存在
hget 获取存储在hash表中的指定字段
hgetall 获取hash表的全部字段及其值
hincrby 为指定hash表字段增加一个增量
hincrbyfloat 为指定hash表字段增加一个float增量
hkeys 获取hash表的所有字段
hmset 设置一个或者多个hash表字段
hmget 获取一个或者多个hash表字段
hlen 获取hash表中字段的数量
hset 设置hash表指定字段的值
hsetnx 设置hash表指定字段的值,只在key不存在时,才能设置成功
hvals 获取hash表所有的value值
hmsetnx 设置一个或者多个hash表的值,只有当key不存在时,才能设置成功
hscan 扫描hash表

1.4 redis list类型的常用操作及其含义

命令 含义
lpush 将一个值插入到列表头部
lpushx 将一个值插入到一存在列表的头部
lrange 获取指定范围内的元素
llen 获取列表的长度
lpop 移出列表的第一个元素
linsert 在列表的前/后插入元素
lindex 获取列表中指定index的元素
lset 设置指定位置的值
lrem 移除列表元素
ltrim 修建列表元素
rpop 移除列表的最后一个元素
rpush 在列表中添加一个或多个元素
rpushx 为已存在的列表添加值
rpoplpush 移除列表最后一个元素,并添加到列表的第一个元素
blpop 阻塞的列表头部移出
brpop 阻塞的列表尾部移出

1.5 redis set类型的常用操作及其含义

命令 含义
sadd 向集合中加入一个或多个成员
scard 获取集合的成员数
sdiff 获取第一个集合和其他集合的差异
sdiffstore 返回指定集合的差集并存储在destination中
sinter 返回两个集合的交集
sinterstore 返回两个集合到destination中
sismember 判断元素是否是成员
smember 返回集合中的所有成员
smove 将元素移到目标集合中
spop 移除并返回集合中的一个随机元素
srandmember 返回集合中一个或者多个
srem 移除集合中的一个或者多个元素
sunion 返回集合和其他集合的并集
sunionstore 把给定集合存储在目标集合中
sscan 迭代集合中的元素

1.6 redis sorted set类型的常用操作及其含义

命令 含义
zadd 向有序集合中添加一个或者多个成员及其分数
zcard 获取有序集合的成员数
zcount 计算有序集合指定区间分数的成员数
zincrby 有序集合的指定成员的分数增加指定增量
zinterstore 计算一个或者多个有序集的交集,并存储在新destination中
zlexcount 有序集合计算字典区间内的成员数
zrange 通过索引区间获取指定区间内的成员
zrangebylex 通过字典区间返回有序集合的成员
zrangebyscore 通过分数返回有序集合指定区间内的成员
zrank 返回指定成员的索引
zrem 移除有序集合中的一个或者多个成员
zremrangebylex 移除有序集合中指定字典区间的成员
zremrangebyrank 移除有序集合中指定分数区间的成员
zscore 返回有序集合的成员分数值
zrevrank 返回有序集合中的指定元素排名
zunionstore 计算一个或者多个集合的并集,并存储到指定key中
zscan 迭代有序集合中的元素

2. redis的特殊功能

2.1 hyperloglog

  • 用来计算技术的算法,hyperloglog的优点是,在输入元素的数量或者提及非常非常大时,计算基数所需要的空间总是固定的,并且很小。

  • redis中,每个hyperloglog键只需要花费12K内存,就可以计算接近2^64个元素的技术。这个就与元素越多消耗内存越多的集合形成的鲜明对比。

  • hyperloglog只会根据输入元素来计算基数,而不会存储元素本身,所有hyperloglog不像其他集合那样,可以返回输入的各个元素。

    什么是基数?
    比如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。

2.2 pub/sub

  • redis可以创建一个简单的生产消费者模型
  • subscirbe 订阅某个channel的消息
  • publish 用来向channel中推送消息

2.3 geo

  • 用于存储地理位置信息,并对存储的信息进行操作
  • 常用使用场景:附近n km内的xxx
命令 意义
geoadd 添加地理位置
geopos 获取地理位置坐标
geodist 计算两个位置之间的距离
georadius 根据用户给定的经纬度坐标来获取范围内的地址位置集合
georadiusbymember 根据存储在位置集合里面的某个地点获取指定范围内的地理位置集合
geohash 返回一个或者多个位置对象的hash值

2.4 stream

  • stream 主要应用于消息队列,pub/sub有个缺点是消息无法持久化,如果出现网络断开Redis宕机,消息就会被丢弃
  • Redis Stream 提供了消息的持久化和主备复制功能,可以让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息不丢失
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容