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 提供了消息的持久化和主备复制功能,可以让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息不丢失
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351

推荐阅读更多精彩内容