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 //全部清除
目录
相关文章
|
存储 缓存 NoSQL
Redis 服务器全方位介绍:从入门到核心原理
Redis是一款高性能内存键值数据库,支持字符串、哈希、列表等多种数据结构,广泛用于缓存、会话存储、排行榜及消息队列。其单线程事件循环架构保障高并发与低延迟,结合RDB和AOF持久化机制兼顾性能与数据安全。通过主从复制、哨兵及集群模式实现高可用与横向扩展,适用于现代应用的多样化场景。合理配置与优化可显著提升系统性能与稳定性。
219 0
|
缓存 NoSQL Java
springboot的缓存和redis缓存,入门级别教程
本文介绍了Spring Boot中的缓存机制,包括使用默认的JVM缓存和集成Redis缓存,以及如何配置和使用缓存来提高应用程序性能。
599 1
springboot的缓存和redis缓存,入门级别教程
|
SQL 存储 NoSQL
Redis6入门到实战------ 一、NoSQL数据库简介
这篇文章是关于NoSQL数据库的简介,讨论了技术发展、NoSQL数据库的概念、适用场景、不适用场景,以及常见的非关系型数据库。文章还提到了Web1.0到Web2.0时代的技术演进,以及解决CPU、内存和IO压力的方法,并对比了行式存储和列式存储数据库的特点。
Redis6入门到实战------ 一、NoSQL数据库简介
|
存储 消息中间件 NoSQL
Redis 入门 - C#.NET Core客户端库六种选择
Redis 入门 - C#.NET Core客户端库六种选择
476 8
|
NoSQL 算法 安全
Redis6入门到实战------ 四、Redis配置文件介绍
这篇文章详细介绍了Redis配置文件中的各种设置,包括单位定义、包含配置、网络配置、守护进程设置、日志记录、密码安全、客户端连接限制以及内存使用策略等。
Redis6入门到实战------ 四、Redis配置文件介绍
|
NoSQL Redis 数据安全/隐私保护
Redis6入门到实战------ 二、Redis安装
这篇文章详细介绍了Redis 6的安装过程,包括下载、解压、编译、安装、配置以及启动Redis服务器的步骤。还涵盖了如何设置Redis以在后台运行,如何为Redis设置密码保护,以及如何配置Redis服务以实现开机自启动。
Redis6入门到实战------ 二、Redis安装
|
NoSQL Java Redis
Redis6入门到实战------思维导图+章节目录
这篇文章提供了Redis 6从入门到实战的全面学习资料,包括思维导图和各章节目录,涵盖了NoSQL数据库、Redis安装配置、数据类型、事务、持久化、主从复制、集群等核心知识点。
Redis6入门到实战------思维导图+章节目录
|
NoSQL 安全 Java
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
这篇文章深入探讨了Redis中的String数据类型,包括键操作的命令、String类型的命令使用,以及String在Redis中的内部数据结构实现。
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
|
NoSQL 关系型数据库 Redis
Redis6入门到实战------ 九、10. Redis_事务_锁机制_秒杀
这篇文章深入探讨了Redis事务的概念、命令使用、错误处理机制以及乐观锁和悲观锁的应用,并通过WATCH/UNWATCH命令展示了事务中的锁机制。
Redis6入门到实战------ 九、10. Redis_事务_锁机制_秒杀
|
NoSQL Java Redis
Redis6入门到实战------ 八、Redis与Spring Boot整合
这篇文章详细介绍了如何在Spring Boot项目中整合Redis,包括在`pom.xml`中添加依赖、配置`application.properties`文件、创建配置类以及编写测试类来验证Redis的连接和基本操作。
Redis6入门到实战------ 八、Redis与Spring Boot整合