Redis入门操作 2

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis入门操作

应用场景

需求描述

双11活动日,销售手机充值卡的商家对移动、联通、电信的30元、50元、100元商品推出抢购活动,每种商品抢购上限1000 张

解决方案

以商家id作为key

将参与抢购的商品id作为field

将参与抢购的商品数量作为对应的value

抢购时使用降值的方式控制产品数量

list

数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分

需要的存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序

list类型:保存多个数据,底层使用双向链表存储结构实现

基本操作

添加修改

Code

lpush key value1 [value2] ……
rpush key value1 [value2] ……

获取

Code

lrange key start stop //start从0开始,如果全部获取start=0,stop=-1
lindex key index
llen key

获取后并删除

Code

lpop key
rpop key

扩展操作

移出指定数据

Code

lrem key count value

规定时间内获取并移出数据

Code

blpop key1 [key2] timeout
brpop key1 [key2] timeout
brpoplpush source destination timeout //把source中的弹到destination

注意事项

  1. list中保存的数据都是string类型的,数据总容量是有限的,最多232 - 1 个元素(4294967295)。
  2. list具有索引的概念,但是操作数据时通常以队列的形式进行入队出队操作,或以栈的形式进行入栈出栈操作
  1. 获取全部数据操作结束索引设置为-1
  2. list可以对数据进行分页操作,通常第一页的信息来自于list,第2页及更多的信息通过数据库的形式加载

应用场景

需求描述

企业运营过程中,系统将产生出大量的运营数据,如何保障多台服务器操作日志的统一顺序输出?

问题解决

依赖list的数据具有顺序的特征对信息进行管理

使用队列模型解决多路信息汇总合并的问题

使用栈模型解决最新消息的问题

set

新的存储需求:存储大量的数据,在查询方面提供更高的效率

需要的存储结构:能够保存大量的数据,高效的内部存储机制,便于查询

set类型:与hash存储结构完全相同,仅存储键,不存储值(nil),并且值是不允许重复的

基本操作

添加

Code

sadd key member1 [member2]

获取

Code

smembers key

删除

Code

srem key member1 [member2]

获取集合数据总量

Code

scard key

判断集合中是否包含指定数据

Code

sismember key member

随机获取集合中指定数量的数据

Code

srandmember key [count]

随机获取集合中的某个数据并将数据移出集合

Code

spop key [count]

### 扩展操作

求连个集合的交集\并集\差集

Code

sinter key1 [key2 …]
sunion key1 [key2 …]
sdiff key1 [key2 …]

求两个集合的交、并、差集并存储到指定集合中

Code

sinterstore destination key1 [key2 …]
sunionstore destination key1 [key2 …]
sdiffstore destination key1 [key2 …]

将指定数据从原始集合中移动到目标集合中

Code

smove source destination member

注意事项

set 类型不允许数据重复,如果添加的数据在 set 中已经存在,将只保留一份

set 虽然与hash的存储结构相同,但是无法启用hash中存储值的空间

应用场景

场景描述


黑名单


资讯类信息类网站追求高访问量,但是由于其信息的价值,往往容易被不法分子利用,通过爬虫技术, 快速获取信息,个别特种行业网站信息通过爬虫获取分析后,可以转换成商业机密进行出售。例如第三方火车票、机票、酒店刷票代购软件,电商刷评论、刷好评。


同时爬虫带来的伪流量也会给经营者带来错觉,产生错误的决策,有效避免网站被爬虫反复爬取成为每个网站都要考虑的基本问题。在基于技术层面区分出爬虫用户后,需要将此类用户进行有效的屏蔽,这就是黑名单的典型应用。


ps:不是说爬虫一定做摧毁性的工作,有些小型网站需要爬虫为其带来一些流量。


白名单


对于安全性更高的应用访问,仅仅靠黑名单是不能解决安全问题的,此时需要设定可访问的用户群体, 依赖白名单做更为苛刻的访问验证。


解决方案


基于经营战略设定问题用户发现、鉴别规则


周期性更新满足规则的用户黑名单,加入set集合


用户行为信息达到后与黑名单进行比对,确认行为去向


黑名单过滤IP地址:应用于开放游客访问权限的信息源


黑名单过滤设备信息:应用于限定访问设备的信息源


黑名单过滤用户:应用于基于访问权限的信息源

实践案例

描述

使用微信的过程中,当微信接收消息后,会默认将最近接收的消息置顶,当多个好友及关注的订阅号同时发送消息时,该排序会不停的进行交替。同时还可以将重要的会话设置为置顶。一旦用户离线后,再次打开微信时,消息该按照什么样的顺序显示?

解决方案

依赖list的数据具有顺序的特征对消息进行管理,将list结构作为栈使用


对置顶与普通会话分别创建独立的list分别管理


当某个list中接收到用户消息后,将消息发送方的id从list的一侧加入list(此处设定左侧)


多个相同id发出的消息反复入栈会出现问题,在入栈之前无论是否具有当前id对应的消息,先删除对应id


推送消息时先推送置顶会话list,再推送普通会话list,推送完成的list清除所有数据


消息的数量,也就是微信用户对话数量采用计数器的思想另行记录,伴随list操作同步更新


## 通用操作

key的通用操作

key是一个字符串,通过key获取redis中保存的数据,我们可以通过一些命令对key状态\有效性\快速查询 进行控制。

对于key自身状态的相关操作,例如:删除,判定存在,获取类型等

对于key有效性控制相关操作,例如:有效期设定,判定是否有效,有效状态的切换等

对于key快速查询操作,例如:按指定策略查询key

操作

删除

Code

del key

判断key对应值的类型

Code

type key

排序

Code

sort key alpha //alpha表示按照顺序输出
sort key alpha desc//降序

有效性

为指定key设置有效期

Code

expire key seconds 
pexpire key milliseconds 
expireat key timestamp
pexpireat key milliseconds-timestamp

获取key的剩余有效时间,失效是负数

Code

ttl key //单位是秒
pttl key//单位是毫秒

切换key从时效性转换为永久

Code

persist key

查询所有的key

Code

keys

查询通配符

* 匹配任意数量的任意符号 ? 配合一个任意符号 [] 匹配一个指定符号

db常用指令

问题描述

key是由程序员定义的

redis在使用过程中,伴随着操作数据量的增加,会出现大量的数据以及对应的key

数据不区分种类、类别混杂在一起,极易出现重复或冲突

解决方案

redis为每个服务提供有16个数据库,编号从0到15

每个数据库之间的数据相互独立

命令

切换数据库

Code

select num

其他指令ping,查看服务器是否通畅

Code

ping

移动

Code

move key db //把key移动到其他db

查看当前库中的数据总数

Code

dbsize

数据清除

Code

flushdb //清除当前库
flushall //全部清除
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
18天前
|
存储 缓存 NoSQL
【Go语言专栏】Go语言中的Redis操作与缓存应用
【4月更文挑战第30天】本文探讨了在Go语言中使用Redis进行操作和缓存应用的方法。文章介绍了Redis作为高性能键值存储系统,用于提升应用性能。推荐使用`go-redis/redis`库,示例代码展示了连接、设置、获取和删除键值对的基本操作。文章还详细阐述了缓存应用的步骤及常见缓存策略,包括缓存穿透、缓存击穿和缓存雪崩的解决方案。利用Redis和合适策略可有效优化应用性能。
|
5天前
|
NoSQL Java Redis
SpringBoot 操作 Redis
SpringBoot 操作 Redis
27 2
|
10天前
|
NoSQL Java 网络安全
在spring中操作Redis
在spring中操作Redis
25 0
|
18天前
|
NoSQL Java Redis
在Java中操作Redis
在Java中操作Redis
19 0
|
18天前
|
NoSQL 关系型数据库 MySQL
redis 入门01
redis 入门01
18 0
|
18天前
|
缓存 NoSQL Java
【Redis系列笔记】Redis入门
本文介绍了Redis常用命令,以及SpringBoot集成Spring Data Redis和Spring Cache。Spring Data Redis 提供了对 Redis 的操作方法,而 Spring Cache 则提供了基于注解的缓存功能,可以方便地将方法的返回值缓存到 Redis 中,以提高性能和减少对数据源的访问次数。这样的集成可以帮助开发者更便捷地利用 Redis 来管理应用程序的数据和缓存。
113 4
|
18天前
|
存储 NoSQL 安全
java 中通过 Lettuce 来操作 Redis
java 中通过 Lettuce 来操作 Redis
240 0
java 中通过 Lettuce 来操作 Redis
|
18天前
|
NoSQL 关系型数据库 Redis
数据管理DMS产品使用合集之要通过 DMS 登录到 RDS、DRDS 或 Redis,我该怎么操作
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
|
18天前
|
存储 缓存 NoSQL
Redis入门到通关之Redis内存淘汰(内存过期)策略
Redis入门到通关之Redis内存淘汰(内存过期)策略
41 3
|
18天前
|
存储 NoSQL Linux
Redis入门到通关之多路复用详解
Redis入门到通关之多路复用详解
26 1