目录
通用命名
- 查找键,参数支持正则 (一般不在生产环境中使用) O(n)
KEYS pattern
- 判断键是否存在,如果存在返回1,不存在返回0 O(1)
EXISTS key [key ...]
- 查看键对应的value的类型 O(1)
TYPE key
- 删除键及对应的值 O(1)
DEL key [key ...]
- 设置过期时间,以秒为单位
- 创建时没有设置过期时间则一直存在,直到使用使用DEL移除 O(1)
EXPIRE key seconds
- 查看有效时间,以秒为单位 -1代表没有过期时间 -2代表已经过期 O(1)
TTL key
- 去掉key的过期时间 O(1)
persist key
- 计算key的总数 O(1)
dbsize
数据结构和内部编码
单线程
为什么那个快
- 纯内存
- 非堵塞IO
- 避免线程切换和静态消耗
注意
- 一次只运行一次命令
- 拒绝长(慢)命令
- keys, flushall, flushdb, slow lua script, mutil/exec, operate,big value(collection)
- 其实不是单线程
- fysnc file descriptor
- close file descriptor
String
键值结构
- string是redis最基本的类型
- 最大能存储512MB数据
- string类型是二进制安全的,即可以为任何数据,比如数字、图片、序列化对象等
值可以为字符串 数字 二进制 或者 json字符串
应用场景
- 缓存
- 计数器
- 分布式锁
等
命令
设置
- 设置键值 O(1)
set key value
- 设置键值及过期时间,以秒为单位
SETEX key seconds value
- 设置多个键值 O(n)
MSET key value [key value ...]
获取
- 根据键获取值,如果不存在此键则返回nil
GET key
- 根据多个键获取多个值
MGET key [key ...]
运算
- 要求:值是数字
- 将key对应的value加1
INCR key
- 将key对应的value加整数
INCRBY key increment
- 将key对应的value减1
DECR key
- 将key对应的value减整数
DECRBY key decrement
其它
- 追加值
APPEND key value
- 获取值长度 (中文长度如果是utf8 一个字两个字节)
STRLEN key
扩展
实战
计数器:通过incr userid:pageview(单线程无竞争) 来实现
缓存:
伪代码,先从reids中读取数据,如果存在直接返回,不存在则查找数据库,找到并将其数列化存到redis当中做缓存,然后返给前端
分布式id
incr id (原子操作) 最基本的实现分布式id的原理
总结
Hash
键值结构
hash用于存储对象,对象的格式为键值对
key field value key:键 field 对象的属性 value 属性值
field不能相同,value值可以相同
命令
设置
- 设置单个属性
HSET key field value
- 设置多个属性
HMSET key field value [field value ...]
获取
- 获取一个属性的值
HGET key field
- 获取多个属性的值
HMGET key field [field ...]
- 获取所有属性和值
HGETALL key
- 获取所有的属性
HKEYS key
- 返回包含属性的个数
HLEN key
- 获取所有值
HVALS key
其它
- 判断属性是否存在
HEXISTS key field
- 删除属性及值
HDEL key field [field ...]
- 返回值的字符串长度
HSTRLEN key field
实战
1.记录网站每个用户个人主页的访问量
hincrby user:1:info pageview count
2.缓存视频的基本信息(数据源在mysql中),伪代码
总结
List
键值结构
- 列表的元素类型为string
- 按照插入顺序排序
- 在列表的头部或者尾部添加元素
列表时有序的,可重复的,左右两边可进行插入弹出
命令
设置
- 在头部插入数据
LPUSH key value [value ...]
- 在尾部插入数据
RPUSH key value [value ...]
- 在一个元素的前|后插入新元素 O(n) 在list指定的值前后插入value pivot(指定的值)
LINSERT key BEFORE|AFTER pivot value
- 设置指定索引的元素值
- 索引是基于0的下标
- 索引可以是负数,表示偏移量是从list尾部开始计数,如-1表示列表的最后一个元素
LSET key index value
获取
- 移除并且返回 key 对应的 list 的第一个元素
LPOP key
- 移除并返回存于 key 的 list 的最后一个元素
RPOP key
- 返回存储在 key 的列表里指定范围内的元素
- start 和 end 偏移量都是基于0的下标
- 偏移量也可以是负数,表示偏移量是从list尾部开始计数,如-1表示列表的最后一个元素
- 包头包尾
LRANGE key start stop
其它
- 裁剪列表,改为原集合的一个子集
- start 和 end 偏移量都是基于0的下标
- 偏移量也可以是负数,表示偏移量是从list尾部开始计数,如-1表示列表的最后一个元素
- 包头包尾
LTRIM key start stop
- 返回存储在 key 里的list的长度
LLEN key
- 返回列表里索引对应的元素
LINDEX key index
实战
timeLine