最近看了一本好书《Redis开发与运维(付磊)》,感觉里面讲解深入浅出,实在受益匪浅,遂记录点滴。
Redis八个重要特性:
- 速度快:全部数据储存在内存,这一点就不知道比别的快了多少。C语言实现。单线程,避免多线程存在的竞争问题。
- 基于键值对的数据结构服务器
- 丰富的功能:提供键过期机制,可用于缓存。提供订阅发布功能,可用做实现消息系统。支持Lua脚本。简单的事务功能。提供pipeline功能,一次性传输数据,避免网络开销。
- 简单稳定
- 支持语言多
- 持久化:RDB和AOF,可将数据保存到硬盘,不会掉电消失。
- 主从复制
- 高可用和分布式
全局命令:
- 查看所有键:keys * 时间复杂度:O(n)
- 键总数:dbsize 时间复杂度O(1) 因为内部有键总数变量
- 查看键是否存在:exists key
- 删除键:del key [key1] 返回结果为删除成功的键数
- 键过期:expire key seconds
- 键剩余过期时间:ttl key 返回值:大于0的整数,键剩余过期时间,-1键没设置过期时间,-2键不存在
- 键的数据结构类型:type key 键不存在则返回none
- 查询内部编码:object encoding key
字符串:
- 键值最大不能超过512M
- 设置命令:set key value [ex seconds] [px milliseconds] [nx|xx]
- ex seconds: 为键设置秒级过期时间。
- ·px milliseconds: 为键设置毫秒级过期时间。
- ·nx: 键必须不存在, 才可以设置成功, 用于添加
- .xx :键必须存在,用于更新键
- setex setnx 命令为开关ex nx简写命令
- 获取值:get key 不存在返回nil
- 批量设置值:mset key1 val1 key2 val2...
- 批量获取值:mget key1 key2...
- 批量操作节省网络开销
- 自增:incr key 键存在且为整数时,执行后加一,键为非整数报错,键不存在返回1
- 扩展:decr incrby decyby incrbyfloat
- 追加值:append key value
- 字符串长度:strlen key
- 设置并返回原值:getset key value
- 设置指定位置的字符:setrange key offeset value
- 获取部分字符串:getrange key start end
- 应用场景:
- 缓存功能
- 计数功能
- 共享session:解决分布式系统中session存在多个服务器中问题,集中在redis中读取
- 限速
哈希:
- 设置值:hset key field value
- 获取值:hget key field
- 删除field:hdel key field :返回成功删除field的个数
- 计算field个数:hlen key
- 批量操作:hmget key field1 field2... hset key field1 val field2 val2
- 判断field是否存在:hexists key field
- 获取所有field :hkeys key
- 获取所有val:hvals key
- 获取所有field-val:hgetall key
- hincrby hincrbyfloat
- 计算val长度:hstrlen key field
不知不觉已经12点后了,困得不行,早点睡个“养生觉”吧,别的部分下回更新~See you