Redis实战笔记(一)

200 阅读4分钟

这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战

一、 概要

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 内存不足时,在设有TTL的键中,删除最近最少使用的键。(不推荐)
  3. allkeys-lru 内存不足时,删除最近最少使用的键。(推荐)
  4. 举例:通常默认选取 5个键 作为样本,删除最少使用的一个

(3)random

  1. volatile-random:内存不足时,在设有TTL的键中,随机删除。
  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 个位置。