Redis初识

一、Redis安装

下载地址:http://redis.io/download 
安装步骤:
# 安装gcc
yum install gcc
# 把下载好的redis‐5.0.3.tar.gz放在/usr/local文件夹下,并解压 
wget http://download.redis.io/releases/redis‐5.0.3.tar.gz 
tar xzf redis‐5.0.3.tar.gz
cd redis‐5.0.3
# 进入到解压好的redis‐5.0.3目录下,进行编译与安装 
make
# 修改配置在redis.conf
daemonize yes #后台启动
protected‐mode no#关闭保护模式,开启的话,只有本机才可以访问redis
# 需要注释掉bind
#bind 127.0.0.1(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可)
# 启动服务
src/redis‐server redis.conf

 # 验证启动是否成功
 ps ‐ef|grep redis

 # 进入redis客户端
 src/redis‐cli

 # 退出客户端
 quit

 # 退出redis服务:
 (1)pkill redis‐server
 (2)kill 进程号
 (3)src/redis‐cli shutdown

redis客户端查看帮助文档,例如String类型 help @string 查看string数据类型命令
局域网连接注意防火墙的问题,开发环境可关闭防火墙,生产环境打开端口

二、Redis核心的五种数据结构

在这里插入图片描述

Redis强的主要就是性能与丰富多彩的数据结构

进入客户端 help @string 可查看帮助文档

2.1 String结构

2.1.1 字符串的常用操作
命令操作
SET key value存入字符串键值对
MSET key value [key value …]批量存储字符串键值对
SETNX key value存入一个不存在的字符串键值对
GET key获取一个字符串键值
MGET key [key …]批量获取字符串键值
DEL key [key …]删除一个键
EXPIRE key seconds设置一个键的过期时间(秒)
2.1.2原子加减
命令操作
INCR key将key中储存的数字值加1
DECR key将key中储存的数字值减1
INCRBY key increment将key所储存的值加上increment
DECRBY key decrement将key所储存的值减去decrement

2.2 String 应用场景

2.2.1 单值缓存
  • SET key value
  • GET key
2.2.2 对象缓存

在这里插入图片描述

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

  2. MSET user:1:name zhuge user:1:balance 1888

​ MGET user:1:name user:1:balance

优势:对于key中某几个字段需要经常修改,使用此方式会比单值存储效率快很多

2.2.3 分布式锁

SETNX 当前仅当key不存在的时候才会成功,如果被其他线程设置过会失败

SETNX product:10001 true //返回1代表获取锁成功

SETNX product:10001 true //返回0代表获取锁失败

。。。执行业务操作

DEL product:10001 //执行完业务释放锁

SET product:10001 true ex 10 nx //防止程序意外终止导致死锁

对于简单的分布式实现,例如抢购商品,同时多个线程执行,利用SETNX product:10001,第一个抢到资源的,进行下步操作

2.2.4 计数器
  • INCR article:readcount:{文章id}
  • GET article:readcount:{文章id}

在这里插入图片描述

2.2.5 Web集群session共享

spring session + redis实现session共享

2.2.6 分布式系统全局序列号

INCRBY orderId 1000 //redis批量生成序列号提升性能,一次性多拿一些ID,在本机实现内存++
其他实现,数据库自增,雪花算法 分析性能

2.3 Hash结构

Hash相当于双层Map的结构

2.3.1 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中所有的键值

2.4 Hash 应用场景

2.4.1 对象缓存

HMSET user {userId}:name zhuge {userId}:balance 1888

HMSET user 1:name zhuge 1:balance 1888

HMGET user 1:name 1:balance

2.4.3 电商购物车

1)以用户id为key

2)商品id为field

3)商品数量为value

•购物车操作

1)添加商品-》hset cart:1001 10088 1

2)增加数量-》hincrby cart:1001 10088 1

3)商品总数-》hlen cart:1001

4)删除商品-》hdel cart:1001 10088

5)获取购物车所有商品-》hgetall cart:1001
在这里插入图片描述

2.5 Hash优缺点

•优点

1)同类数据归类整合储存,方便数据管理

2)相比string操作消耗内存与cpu更小

3)相比string储存更节省空间

•缺点

1)过期功能不能使用在field上,只能用在key上

2)Redis集群架构下不适合大规模使用

2.6 Redis集群架构

在这里插入图片描述

2.7 List 结构

2.7.1 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,一直阻塞等待

2.8 List应用场景

2.8.1 常用的数据结构

Stack(栈) = LPUSH + LPOP = 特点先进后出(FILO)

Queue(队列)= LPUSH + RPOP = 先进先出

Blocking MQ(阻塞队列)= LPUSH + BRPOP

2.8.2 微博和微信公号消息流

在这里插入图片描述
在这里插入图片描述

​ 假如关注一个公众号

​ 1)用户A发微博,消息ID为10018
​ LPUSH msg:{用户C-ID} 10018
​ 2) 用户B发微博,消息ID为10086
​ LPUSH msg:{用户C-ID} 10086
​ 3)查看最新微博消息
​ LRANGE msg:{用户C-ID} 0 4

思考,研究pull方式

2.9 Set 结构

2.9.1 Set常用操作
命令操作
SADD key member [member …]往集合key中存入元素,元素存在则忽略,若key不存在则新建
SREM key member [member …]从集合key中删除元素
SMEMBERS key获取集合key中所有元素
SCARD key获取集合key的元素个数
SISMEMBER key member判断member元素是否存在于集合key中
SRANDMEMBER key [count]从集合key中选出count个元素,元素不从key中删除
SPOP key [count]从集合key中选出count个元素,元素从key中删除
2.9.2 Set 运算操作
命令操作
SINTER key [key …]交集运算
SINTERSTORE destination key [key …]将交集结果存入新集合destination中
SUNION key [key …]并集运算
SUNIONSTORE destination key [key …]将并集结果存入新集合destination中
SDIFF key [key …]差集运算
SDIFFSTORE destination key [key …]将差集结果存入新集合destination中

2.10 Set 应用场景

2.10.1 微信抽奖小程序

在这里插入图片描述

1)点击参与抽奖加入集合

SADD key {userlD}

2)查看参与抽奖所有用户

SMEMBERS key

3)抽取count名中奖者

SRANDMEMBER key [count] / SPOP key [count]

2.10.2 微信、微博点赞,收藏,标签
  1. 点赞

SADD like:{消息ID} {用户ID}

  1. 取消点赞

SREM like:{消息ID} {用户ID}

  1. 检查用户是否点过赞

SISMEMBER like:{消息ID} {用户ID}

  1. 获取点赞的用户列表

SMEMBERS like:{消息ID}

  1. 获取点赞用户数

SCARD like:{消息ID}

2.10.3 集合操作

在这里插入图片描述

SINTER set1 set2 set3 -> { c }

SUNION set1 set2 set3 -> { a,b,c,d,e }

SDIFF set1 set2 set3 -> { a }

2.10.4 集合操作实现微博、微信关注模型
  1. A关注的人:

zhugeSet-> {guojia, xushu}

  1. B关注的人:

yangguoSet–> {zhuge, baiqi, guojia, xushu}

  1. C关注的人:

guojiaSet-> {zhuge, yangguo, baiqi, xushu, xunyu)

  1. A和B老师共同关注:

SINTER zhugeSet yangguoSet–> {guojia, xushu}

  1. A关注的人也关注他(B):

SISMEMBER guojiaSet yangguo

SISMEMBER xushuSet yangguo

  1. A可能认识的人:

SDIFF yangguoSet zhugeSet->(zhuge, baiqi}

2.10.5 集合操作实现电商商品的筛选

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}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值