Redis单节点搭建&核心数据结构

Centos7+下Redis单节点搭建
环境准备gcc安装
yum install gcc
下载Redis5.0.3安装包
wget http://download.redis.io/releases/redis‐5.0.3.tar.gz
解压安装包到/usr/local下
tar -zxvf redis‐5.0.3.tar.gz -C /usr/local
mv /usr/local/redis-5.0.3 /usr/local/redis
编译解压的安装包
cd /usr/local/redis
make
修改配置文件redis.conf
daemonize yes #后台启动
protected‐mode no #关闭保护模式,开启的话,只有本机才可以访问redis
# 需要注释掉bind
#bind 127.0.0.1(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可)
启动redis服务
src/redis‐server redis.conf
查看redis进程是否存在
ps -aef|grep redis
客户端连接&退出
src/redis-cli

#退出客户端
quit
退出redis服务
#1
pkill redis‐server
#2
kill 进程号
#3
src/redis‐cli shutdown
Redis核心数据结构

Redis比较常用的核心五种数据结构:StringHashListSet、ZSet

数据结构帮助命令查看:> help @数据结构,如 > help @String
String 结构
String 常用操作命令

命令

说明

SET key value

存入字符串键值对

MSET key value [key value ......]

批量存入字符串键值对

SETNX key value

存入一个不存在的字符串键值对

GET key

获取一个字符串键值

MGET key [key ......]

批量获取字符串键值

DEL key [key ......]

删除一个键

EXPIRE key seconds

设置一个键的过期时间(秒)

INCR key

将key存储的数值加1

DECR key

将key存储的数值减1

INCRBY key increment

将key存储的数值加上increment

DECRBY key decrement

将key存储的数值减去decrement

String 应用场景

单值缓存

SET key value

GET key

对象缓存

  1. SET user:1 value(json格式数据)

  1. MSET user:1:name warrior user:1:age 30

MGET user:1:name user:1:age

分布式锁

SETNX product:100001 true //返回1代表获取锁成功,返回0代表获取锁失败

DEL product:100001 //执行完操作,释放锁

SET product:100001 true ex 10 nx //获取锁,设置锁超时时间

计数器

INCR article:readcount:{文章Id}

GET article:readcount:{文章Id}

Web集群session共享

Spring session + redis 实现session共享

分布式系统全局序列号

INCRBY orderId 1000

Hash 结构
hash 常用操作命令

命令

说明

HSET key field value

存储一个哈希表key的键值

HSETNX key field value

存储一个不存在的哈希表key的键值

HMSET key field value [field value ...]

在一个哈希表key种存储多个键值

HGET key field

获取哈希表key对应的field值

HMGET key field [field ...]

批量获取哈希表key对应的多个field的值

HDEL key field [field ...]

删除哈希表key对应的field键值

HLEN key

获取哈希表key中field的数量

HGETALL key

获取哈希表key的所有键值

HINCRBY key field increment

给哈希表key对应的field值增加increment

hash 的优缺点

优点

  • 同类数据归类整合存储,方便数据管理。

  • 相比String操作消耗内存与CPU更少。

  • 相比String存储更节省空间。

缺点

  • 过期功能不能使用在field上,只能在key上。

  • Redis集群架构下不太适合大规模使用。

hash 应用场景

对象缓存

HMSET user {userId}:name warrior {userId}:age 30

电商购物车

添加商品:HSET car:{userId} {productId} {商品数量}

增加商品数量:HINCRBY car:{userId} {productId} {商品数量}

商品总数:HLEN car:{userId}

删除商品:HDEL car:{userId} {productId}

获取购物车所有商品:HGETALL car:{userId}

List 结构
List 操作常用命令

命令

说明

LPUSH key value [value ...]

将一个或多个value插入key列表的表头(最左边)

RPUSH key value [value ...]

将一个或多个value插入key列表的表尾(最右边)

LPOP key

移除并返回key列表的头元素

RPOP key

移除并返回key列表的尾元素

LRANGE key start stop

返回列表key中指定区间内的元素,区间以偏移量start和stop指定

BLPOP key [key ...] timeout

从key列表表头弹出一个元素,若列表中没有元素,阻塞等待

timeout秒,如果timeout=0,一直阻塞等待

BRPOP key [key ...] timeout

从key列表表尾弹出一个元素,若列表中没有元素,阻塞等待

timeout秒,如果timeout=0,一直阻塞等待

List 应用场景

常用数据结构

栈(Stack):LPUSH + LPOP

队列(Queue):LPUSH + RPOP

阻塞队列(Blocking Queue):LPUSH + BRPOP

微博消息&公众号消息

消息发送:LPUSH msg:{userId} {消息Id}

消息获取:LRANG msg:{userId} start stop

Set 结构
Set 操作常用命令

命令

说明

SADD key member [member ...]

往集合key中存入元素,元素存在则忽略,元素不存在则添加

SREM key member [member ...]

从集合key中删除元素

SMEMBERS key

获取集合key中的所有元素

SCARD key

获取集合key的元素个数

SISMEMBER key member

判断member元数是否存在集合key中

SRANDMEMBER key [count]

从集合key中选出count个元素,元素不从集合删除

SPOP key [count]

从集合key中选出count个元素,元素从集合删除

SINTER key [key ...]

交集运算

SINTERSTORE destination key [key ...]

将交集结果存入新的destination集合中

SUNION key [key ...]

并集运算

SUNIONSTORE destination key [key ...]

将并结运算结果存入新的destination集合中

SDIFF key [key ...]

差集运算

SDIFFSTORE destionation key [key ...]

将差集运算结果导入新的destination集合中

Set 应用场景

抽奖小程序

  • 点击参与抽奖:SADD key {userId}

  • 查看参与用户:SMEMBERS key

  • 抽取count名中奖:SRANGMEMBER key [count] 或 SPOP key [count]

微信/微博点赞、收藏、标签

  • 点赞:SADD like:{消息Id} {userId}

  • 取消点赞:SREM like:{消息Id} {userId}

  • 检查用户是否点赞:SISMEMBER like:{消息Id} {userId}

  • 获取点赞用户列表:SMEMBERS like:{消息Id}

  • 获取点赞用户数:SCARD like:{消息Id}

集合操作实现社交关注模型

warrior关注的人:warriorSet -> {sun、xiaomage}

sun关注的人:sunSet -> {warrior、xiaomage、Alice}

xiaomage关注的人:xiaomageSet -> {warrior、sun、Blob}

  • warrior和sun共同关注的人:SINTER warriorSet sunSet

  • warrior关注的人也关注sun:

SISMEMBER xiaomageSet sun

SISMEMBER sunSet sun

  • warrior可能认识的人:SDIFF sunSet warriorSet

集合实现电商商品筛选

SADD brand:huawei P40

SADD brand:xiaomi mi-10

SADD brand:iPhone iphone12

SADD os:android P40 mi-10

SADD cpu:brand:intel P40 mi-10

SADD ram:8G P40 mi-10 iphone12

  • SINTER os:android cpu:brand:intel ram:8G → {P40,mi-10}

ZSet 有序集合结构
ZSet 操作常用命令

命令

说明

ZADD key score member [[score member] ...]

往有序集合key中添加带分值元素

ZREM key member [member ...]

从有序集合key中删除元素

ZSCORE key member

返回有序集合key中元素member的分值

ZINCRBY key increment member

为有序集合key中的member元素分值加increment

ZCARD key

返回有序集合key中的元素个数

ZRANGE key start stop [WITHSCORES]

正序获取有序集合key从start下标到stop下标的元素

ZREVRANGE key start stop [WITHSCORES]

倒序获取有序集合key从start下标到stop下标的元素

ZUNIONSTORE destkey numkeys key [key ...]

并集计算

ZINTERSTORE destkey numkeys key [key …]

交集计算

ZSet 应用场景

集合操作实现排行榜

  • 点击新闻:ZINCRBY hotNews:20230227 1 xxxxxx

  • 展示当日排行前5:ZREVRANGE hotNews:20230227 0 4 WITHSCORES

  • 三日内搜索榜单计算:ZUNIONSTORE hotNews:20230225-hotNews:20230227 3 hotNews:20230225 hotNews:20230226 hotNews:20230227

  • 展示三日排行前6:ZREVRANGE hotNews:20230225-hotNews:20230227 0 5 WITHSCORES

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值