Redis 数据库
一、 概要
1. 特点
- 用于抽象数据类型的 DSL
- 内存存储
- 基础数据结构 API
- 编码风格
- 避免代码复杂
- 两层 API
- 以优化为乐
2. 数据类型
- 键值对(字符串->字符串)
- 哈希
- 列表(链表)
- 集合:差并交
- 有序集合 = 列表 + 集合
- 位图(严格上说不算是一种数据结构)
- HyperLogLogs 一种概率数据结构
3. 底层数据结构
- ziplist 压缩列表(整数 + 字符串)
- hashtable 哈希表
- skiplist 跳表
- 整数集合
- 字符串
- 链表
4. 键过期策略
(1)noeviction policy
默认策略:永不过期
(2) LRU
- 前提:存在已设置过期时间的键,
- volatile-lru 删除最近最少使用的键
- allkeys-lru 删除全部键
- 注意:不准确,默认选取 5个键作为样本,删除最少使用的一个
(3)random
- volatile-random
- allkeys-random
二、五种数据类型
0. 基本命令
- 获得匹配键名
KEYS pattern
- ? --匹配一个字符
- * --匹配任意个字符
- [] --匹配括号间的任一字符,‘-’ 表示一个范围
- 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 fieldHMGET 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 keySRANDMEMBER 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 memberZRANGE key start stop [WITHSCORES] --取指定范围元素【带值】
ZREVRANGE key start stop [WITHSCORES] --按分数排序,取指定范围元素【带值】ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] --取指定范围元素【带值】
- 运算
ZINCRBY key increment member --自增 1
- 数量
ZCARD keyZCOUNT key min max --指定范围内
- 删除
ZREM key member [member ...]ZREMRANGEBYRANK key start stopZREMRANGEBYSCORE key min max
- 排名
ZRANK key member --降序ZREVRANK key member --升序
6. 位图
- 提供实时分析
- 更高效地利用存储空间
setbit key index valuegetbit key indexbitcount 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 个元素)6SORT key ALPHA --按字典
四、其他
- 安全配置 redis.conf / redis.cnf
- bind 127.0.0.1 设置只允许本机访问
- requirepass XXXXXXXXX 设置密码
- AUTH XXXXXXXX 发送密码
注意:(敲黑板啦!)
- 索引为负时,从键值末尾数起。如 index = -3,表示倒数第 3 个位置。