Not Only SQL (二) - Redis Command

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Not Only SQL (二) - Redis Command

一、Redis命令

Redis 命令用于在Redis服务上执行操作,Redis支持五种数据类型;分别是 string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)等

常用命令key管理

keys * : 返回满足的所有键 ,可以模糊匹配 比如 keys abc* 代表 abc 开头的 key

exists key :是否存在指定的key,存在返回1,不存在返回0

expire key second:设置某个key的过期时间 时间为秒

del key: 删除某个keyttl key:查看剩余时间,当key不存在时,返回 -2;存在但没有设置剩余生存时间时,返回 -1,否则,以秒为单 位,返回 key 的剩余生存时间。

persist key:取消过去时间

PEXPIRE key milliseconds: 修改key 的过期时间为毫秒

select : 选择数据库 数据库为0-15(默认一共16个数据库) 设计成多个数据库实际上是为了数据库安全和备份

move key dbindex : 将当前数据中的key转移到其他数据库

randomkey: 随机返回一个key

rename key key2 : 重命名key

echo: 打印命令

dbsize: 查看数据库的key数量

info: 查看数据库信息

config get * : 实时传储收到的请求,返回相关的配置

flushdb: 清空当前数据库

flushall: 清空所有数据库

DEL key

该命令用于在 key 存在时删除 key。 
复制代码

EXISTS key

检查给定 key 是否存在。 
复制代码

EXPIRE key seconds

为给定 key 设置过期时间(以秒计)。 
复制代码

PEXPIRE key milliseconds

设置 key 的过期时间以毫秒计。
复制代码

TTL key

以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live) 
复制代码

PTTL key

以毫秒为单位返回 key 的剩余的过期时间。 
复制代码

KEYS pattern

查找所有符合给定模式( pattern)的 key。
keys 通配符 获取所有与pattern匹配的key,返回所有与该匹配
通配符:
* 代表所有
? 表示代表一个字符
复制代码

RENAME key newkey

修改Key的名称 
复制代码

MOVE key db

将当前数据库的 key 移动到给定的数据库 db 当中 
复制代码

TYPE key

返回 key 所储存的值的类型
复制代码

应用场景

EXPIRE key seconds应用场景

  • 限时的优惠活动信息
  • 网站数据缓存(对于一些需要定时更新的数据,例如:积分排行榜)
  • 手机验证码
  • 限制网站访客访问频率(例如:1分钟最多访问10次)

Key的命名建议,redis单个key允许存入512M大小

  • key不要太长,尽量不要超过1024字节,这不仅消耗内存,而且会降低查找的效率;
  • key也不要太短,太短的话,key的可读性会降低;
  • 在一个项目中,key最好使用统一的命名模式,例如user:123:password;
  • key名称区分大小写

二、 Redis数据类型

string类型

string类型是Redis最基本的数据类型。

string 数据结构是简单的key-value类型,value其不仅是string,也可以是数字,是包含很多种类型的特殊类型,

string类型是二进制安全的。意思是redis的string可以包含任何数据。 比如序列化的对象进行存储,比如一张图片进行二进制存储,比如一个简单的字符串,数值等等。

string命令

赋值语法:

SET KEY_NAME VALUE: (说明:多次设置name会覆盖) (Redis SET 命令用于设置给定 key 的值。如果key已经存储值,SET就覆写旧值,且无视类型)

命令:

SETNX key1 value: (not exist) 如果key1不存在,则设值 并返回1。如果key1存在,则不设值并返回0; (解决分布式锁 方案之一,只有在 key 不存在时设置 key 的值。Setnx(SET if Not eXists) 命令在指定的 key 不存在时,为 key 设置指定的值)

SETEX key1 10 lx: (expired) 设置key1的值为lx,过期时间为10秒,10秒后key1清除(key也清除)

SETRANGE string range value: 替换字符串

取值语法:

GET KEY_NAME: Redis GET命令用于获取指定 key 的值。如果 key 不存在,返回 nil 。如果key 储存的值不是字符串类型,返回一个错误。

GETRANGE key start end: 用于获取存储在指定 key 中字符串的子字符串。字符串的截取范围由 start 和end 两个偏移量决定(包括 start 和 end 在内)

GETBIT key offset: 对 key 所储存的字符串值,获取指定偏移量上的位(bit)

GETSET语法: GETSET KEY_NAME VALUE;Getset 命令用于设置指定 key 的值,并返回 key 的旧值,当 key 不存在时,返回 nil

STRLEN key: 返回 key 所储存的字符串值的长度\

删值语法:

DEL KEY_Name: 删除指定的KEY,如果存在,返回值数字类型。

批量写: MSET k1 v1 k2 v2 ... 一次性写入多个值

批量读: MGET k1 k2 k3

GETSET name value: 一次性设值和读取(返回旧值,写上新值)\

自增/自减:

INCR KEY_Name: Incr 命令将 key 中储存的数字值增1。如果 key 不存在,那么 key 的值会先被初始化为 0,然后再执行 INCR 操作

应用场景

  • String通常用于保存单个字符串或JSON字符串数据
  • 因String是二进制安全的,所以你完全可以把一个图片文件的内容作为字符串来存储
  • 计数器(常规key-value缓存应用。常规计数: 微博数, 粉丝数)

INCR等指令本身就具有原子操作的特性,所以我们完全可以利用redis的INCR、INCRBY、DECR、 DECRBY等指令来实现原子计数的效果。假如,在某种场景下有3个客户端同时读取了mynum的值 (值为2),然后对其同时进行了加1的操作,那么,最后mynum的值一定是5。 不少网站都利用 redis的这个特性来实现业务上的统计计数需求。

Hash类型

Hash类型是String类型的field和value的映射表,或者说是一个String集合。hash特别适合用于存储对象,相比较而言,将一个对象类型存储在Hash类型要存储在String类型里占用更少的内存空间,并对整个对象的存取。

可以看成具有KEY和VALUE的MAP容器,该类型非常适合于存储值对象的信息, 如:uname,upass,age等。该类型的数据仅占用很少的磁盘空间(相比于JSON)。

Redis 中每个 hash 可以存储 2的32次方 - 1 键值对(40多亿)

赋值语法:

HSET KEY FIELD VALUE :为指定的KEY,设定FILD/VALUE

HMSET KEY FIELD VALUE [FIELD1,VALUE1]......: 同时将多个 field-value (域-值)对设置到哈希表key中。

取值语法:

HGET KEY FIELD: 获取存储在HASH中的值,根据FIELD得到VALUE

HMGET KEY field[field1]: 获取key所有给定字段的值

HGETALL KEY: 返回HASH表中所有的字段和值

HKEYS KEY: 获取所有哈希表中的字段

HLEN KEY: 获取哈希表中字段的数量

删除语法:

HDEL KEY field1[field2] :删除一个或多个HASH表字段\

其他语法:

HSETNX key field value :只有在字段 field 不存在时,设置哈希表字段的值

HINCRBY key field increment :为哈希表 key 中的指定字段的整数值加上增量increment

HINCRBYFLOAT key field increment :为哈希表 key 中的指定字段的浮点数值加上增量increment

HEXISTS key field :查看哈希表key中,指定的字段是否存在

应用场景

hash的应用场景:(存储一个用户信息对象数据)

hash是最接近关系数据库结构的数据类型,可以将数据库一条记录或程序中一个对象转换成hashmap存放在 redis中。

用户ID为查找的key,存储的value用户对象包含姓名,年龄,生日等信息,如果用普通的key/value结构来存储, 主要有以下2种存储方式:

第一种方式将用户ID作为查找key,把其他信息封装成一个对象以序列化的方式存储,这种方式的缺点是,增加了 序列化/反序列化的开销,并且在需要修改其中一项信息时,需要把整个对象取回,并且修改操作需要对并发进行保 护,引入CAS等复杂问题。

第二种方法是这个用户信息对象有多少成员就存成多少个key-value对儿,用用户ID+对应属性的名称作为唯一 标识来取得对应属性的值,虽然省去了序列化开销和并发问题,但是用户ID为重复存储,如果存在大量这样的数据, 内存浪费还是非常可观的。

总结: Redis提供的Hash很好的解决了这个问题,Redis的Hash实际是内部存储的Value为一个HashMap, 并提供了直接存取这个Map成员的接口



相关实践学习
基于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
相关文章
|
2天前
|
SQL 存储 NoSQL
SQL实践篇(三):什么是Redis
SQL实践篇(三):什么是Redis
26 1
|
10月前
|
存储 SQL 监控
优质!从Sql到Nosql,redis+mysql从架构到优化全覆盖
Redis是一个远程内存数据库,它不仅性能强劲,而且还具有复制特性以及为解决问题而生的独一无二的数据模型。Redis 提供了5种不同类型的数据结构,各式各样的问题都可以很自然地映射到这些数据结构上:Redis的数据结构致力于帮助用户解决问题,而不会像其他数据库那样,要求用户扭曲问题来适应数据库。除此之外,通过复制、持久化( persistence )和客户端分片( client side sharding )等特性,用户可以很方便地将Redis扩展成一个能够包含数百GB数据、每秒处理上百万次请求的系统。
|
SQL 关系型数据库 MySQL
系统设计与数据库系统 作业一 Basic SQL command LAB(下)
系统设计与数据库系统 作业一 Basic SQL command LAB(下)
97 0
系统设计与数据库系统 作业一 Basic SQL command LAB(下)
系统设计与数据库系统 作业一 Basic SQL command LAB(上)
系统设计与数据库系统 作业一 Basic SQL command LAB(上)
61 0
系统设计与数据库系统 作业一 Basic SQL command LAB(上)
|
存储 消息中间件 SQL
Not Only SQL (一) - Redis Introduce
Not Only SQL (一) - Redis Introduce
Not Only SQL (一) - Redis Introduce
|
存储 SQL 缓存
SQL:redis缓存数据库深入
SQL:redis缓存数据库深入
171 0
|
SQL 存储 NoSQL
Flink SQL 自定义 redis connector
一般情况下,我们不需要创建新的 connector,因为 Flink SQL 已经内置了丰富的 connector 供我们使用,但是在实际生产环境中我们的存储是多种多样的,所以原生的 connector 并不能满足所有用户的需求,这个时候就需要我们自定义 connector,这篇文章的重点就是介绍一下如何实现自定义 Flink SQL connector ? 先来看一下官网的一张 connector 架构图:
Flink SQL 自定义 redis connector
|
存储 SQL 缓存
SQL:redis缓存数据库深入
SQL:redis缓存数据库深入
119 0
|
SQL NoSQL 数据库
Data Lake Analytics: 以SQL方式查询Redis数据
Data Lake Analytics 作为云上数据处理的枢纽,最近加入了对于Redis 的支持, 这篇教程带你玩转 DLA 的 Redis 支持。 创建数据库 在 DLA 里面创建一个底层映射到 Redis 的数据库的语法如下: CREATE DATABASE `redis_test` WIT...
1916 0