Redis实战笔记

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis 数据库 一、 简介 1. 特点 用于抽象数据类型的 DSL 内存存储 基础数据结构 API 编码风格 避免代码复杂 两层 API 以优化为乐 2. 数据类型 键值对(字符串->字符串) 哈希 列表(链表) 集合:差并交 有序集合 = 列表 + 集合 3.

Redis 数据库


一、 概要

1. 特点

  1. 用于抽象数据类型的 DSL
  2. 内存存储
  3. 基础数据结构 API
  4. 编码风格
  5. 避免代码复杂
  6. 两层 API
  7. 以优化为乐

2. 数据类型

  1. 键值对(字符串->字符串)
  2. 哈希
  3. 列表(链表)
  4. 集合:差并交
  5. 有序集合 = 列表 + 集合
  6. 位图(严格上说不算是一种数据结构)
  7. HyperLogLogs 一种概率数据结构

3. 底层数据结构

  1. ziplist 压缩列表(整数 + 字符串)
  2. hashtable 哈希表
  3. skiplist 跳表
  4. 整数集合
  5. 字符串
  6. 链表

4. 键过期策略

(1)noeviction policy

默认策略:永不过期

(2) LRU

  1. 前提:存在已设置过期时间的键,
  2. volatile-lru 删除最近最少使用的键
  3. allkeys-lru 删除全部键
  4. 注意:不准确,默认选取 5个键作为样本,删除最少使用的一个

(3)random

  1. volatile-random
  2. allkeys-random

二、五种数据类型

0. 基本命令

  • 获得匹配键名
KEYS pattern
  1. ? --匹配一个字符
  2. * --匹配任意个字符
  3. [] --匹配括号间的任一字符,‘-’ 表示一个范围
  4. x --匹配字符 x (特殊字符需要用 转义)
  • 判断键存在
EXISTS key
  • 删除
DEL key [key ...]
  • 获取类型
TYPE key

1. 字符串

  • 获取/设置
GET key --获取键值
SET key value --设置键值

MGET key [key ...] --获取多个键值
MSET key [key ...] --设置多个键值
  • 字符串
STRLEN key --长度
**APPEND key value** -- 追加
  • 整型
INCR key --自增 1
DECR key --自减 1
INCRBY key increment --自增某个整数
DECRBY key decrement --自减某个整数
  • 浮点
INCRBYFLOAT key increment --自增某个数
DECRBYFLOAT key decrement --自减某个数
  • 位操作
GETBIT key offset --获取某二进制位的值
SETBIT key offset value --设置某二进制位的值

BITCOUNT key [start] [end]** --统计【一定范围内】二进制位为 1 的个数
BITOP operation destkey key [key ...] --位运算:operation可取值【OR、AND、XOR、NOT】

BITPOS key 1|0 [start end]** --获取键值第一个二进制位为 1 的偏移量

2. 散列

  • 基本
HSET key field value
HGET key field

HMGET key field value [field value ...]
HMSET key field value [field value ...]

HGETALL key --获取全部键值

HKEYS key --获取字段名

HVALS key --获取字段值

HLEN key --统计字段数量

HDEL key field [field ...] --删除字段
  • 检测存在
HEXISTS key field [field ...]

HSETNX key field value --值不存在时赋值
  • 运算
HINCRBY key field increment --为整型键值加 1

3. 列表

  • 添加
LPUSH key value [value ...] --左添
RPUSH key value [value ...] --右添

LINSERT key BEFORE|AFTER pivot value --在 pivot 前|后插入元素

LSET key index value --设置指定索引的值
  • 获取
LINDEX key index --获取指定索引的值

LRANGE key start stop --获取部分(通过索引)
  • 删除
LPOP key --左弹出
RPOP key --右弹出

LREM key count value --删除前 count 个值为 value 的元素(count 为负则从后面数起)

LTRIM key start end --删除指定索引范围之内的元素
  • 转移
RPOPLPUSH source destination --右弹出并左添到另一个列表

4. 集合

  • 添加
SADD key member [member ...]
  • 删除
SREM key member [member ...]

SPOP key --随机弹出一个元素
  • 获取
SMEMBERS key

SRANDMEMBER key [count] --取数不大于集合元素数量时,随机取 count 不重复个元素(count 为负时可能取得重复元素)
  • 检测存在
SISMEMER key [value ...]
  • 统计
SCARD key
  • 运算
SDIFF key [key ...] --差集
SINTER key [key ...] --交集
SUNION key [key ...] --并集
  • 运算并存储
SDIFFSTORE destination key [key ...]
SINTERSTORE destination key [key ...]
SUNIONSTORE destination key [key ...]

5. 有序集合

  • 增或改
ZADD key score member [score member ...]
  • 获取
ZSCORE key member

ZRANGE key start stop [WITHSCORES] --取指定范围元素【带值】
ZREVRANGE key start stop [WITHSCORES] --按分数排序,取指定范围元素【带值】

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] --取指定范围元素【带值】
  • 运算
ZINCRBY key increment member --自增 1
  • 数量
ZCARD key

ZCOUNT key min max --指定范围内
  • 删除
ZREM key member [member ...]

ZREMRANGEBYRANK key start stop

ZREMRANGEBYSCORE key min max
  • 排名
ZRANK key member --降序

ZREVRANK key member --升序

6. 位图

  1. 提供实时分析
  2. 更高效地利用存储空间
setbit key index value

getbit key index

bitcount key --统计

7. HyperLogLogs

pfadd key member [member...] --设置

pfcount key --统计已被设置的个数

三、事务

  • 生命周期
MULTI --开始

// .... 其他指令

EXEC --执行
  • 错误显示
ERRORCOMAND key
  • 监控
WATCH key --监控键值被修改后不执行下一条命令

UNWATCH --取消监控
  • 生命周期
EXPIRE key seconds --定义(更新)生存时间

TTL key --查询剩余生存时间

PERSIST key --取消过期时间设置(临时->永久)

EXPIREAT key UNIXTIME --时间为秒

PEXPIREAT key UNIXTIME --时间为毫秒
  • 排序
SORT key [BY field] [ASC|DESC] [LIMIT offset count]
(LIMIT:跳过前 offset 个元素,取 count 个元素)6

SORT key ALPHA --按字典

四、其他

  1. 安全配置 redis.conf / redis.cnf
  • bind 127.0.0.1 设置只允许本机访问
  • requirepass XXXXXXXXX 设置密码
  • AUTH XXXXXXXX 发送密码

注意:(敲黑板啦!)

  1. 索引为负时,从键值末尾数起。如 index = -3,表示倒数第 3 个位置。
相关实践学习
基于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月前
|
存储 缓存 NoSQL
蚂蚁金服P7私藏的Redis原理与实践内部笔记
Redis 是完全开源免费的,是一个高性能的key-value类型的内存数据库。整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。
59 1
|
2月前
|
缓存 监控 NoSQL
Redis - 在电商购物车场景下的实战分析
Redis - 在电商购物车场景下的实战分析
156 0
|
2月前
|
消息中间件 NoSQL Java
Redis List:打造高效消息队列的秘密武器【redis实战 一】
Redis List:打造高效消息队列的秘密武器【redis实战 一】
110 0
|
3月前
|
存储 NoSQL BI
Redis 实战篇:巧用 Bitmap 实现亿级海量数据统计
Redis 实战篇:巧用 Bitmap 实现亿级海量数据统计
52 0
|
3月前
|
NoSQL Redis
Redis原理之网络通信协议笔记
1. RESP协议 ​2. 自定义Socket连接Redis
|
3月前
|
NoSQL Linux Redis
Redis原理之网络模型笔记
Redis采用单线程模型,这意味着一个Redis服务器在任何时刻都只会处理一个请求。Redis的网络模型涉及到阻塞I/O(Blocking I/O)、非阻塞I/O(Non-blocking I/O)、I/O多路复用(I/O Multiplexing)、信号驱动I/O(Signal-driven I/O)以及异步I/O(Asynchronous I/O)。
|
2月前
|
消息中间件 NoSQL Java
Redis Streams在Spring Boot中的应用:构建可靠的消息队列解决方案【redis实战 二】
Redis Streams在Spring Boot中的应用:构建可靠的消息队列解决方案【redis实战 二】
187 1
|
23天前
|
NoSQL Redis
Netty实战:模拟Redis的客户端
Netty实战:模拟Redis的客户端
11 0
|
1月前
|
存储 NoSQL Redis
KubeSphere 核心实战之二【在kubesphere平台上部署redis】(实操篇 2/4)
KubeSphere 核心实战之二【在kubesphere平台上部署redis】(实操篇 2/4)
22 0
|
1月前
|
消息中间件 存储 缓存
【Redis实战】有MQ为啥不用?用Redis作消息队列!?Redis作消息队列使用方法及底层原理高级进阶
【Redis实战】有MQ为啥不用?用Redis作消息队列!?Redis作消息队列使用方法及底层原理高级进阶

热门文章

最新文章