一. Redis 的应用
- 为热点数据加速查询,如热点商品等高访问量信息;
- 任务队列,如秒杀 ,抢购等;
- 即时信息查询,如公交到站信息,在线人数信息等;
- 时效性信息控制,如验证码时间控制,投票控制;
- 分布式数据共享,如session;
- 消息队列;
- 分布式锁。
二. Redis 支持类型
key永远为string类型,value可以为 string、list、hash、set、sorted_set。 类似于Java中的String、LinkedList、HashMap、HashSet、TreeSet。
key 命名规范:表名:主键名:主键值:字段名,如 user: id:2213:fans。
1. string 命令
常用命令:
- get/set,mget/mset,strlen(字符串长度),append(追加到字符串后)
扩展命令:
- incr/decr,incrby/decrby,incrbyfloat/decrbyfloat 用于做自增自减操作。可用于分布式数据库控制主键生成。
- setex/psetex 用于设置数据具有指定的生命周期。可用于限制微信号投票。
2. hash 命令
常用命令:
- hget/hset,hgetall,hdel,hmset/hmget,hlen,hexists
扩展命令:
- hkeys 获取key所有的field
- hvals 获取key所有的value
- hincrby/hincrbyfloat 按值增加
- hsetnx 无值set,有值不做处理
注意:hash 的 value 也只能存储字符串,不允许嵌套存储 hash 结构。hgetall 操作可以获取所有属性,但是如果 field 过多,效率会很低,可能成为数据访问的瓶颈。
3. list 命令
常用命令:
- lpush : 先进的元素排在最后
- rpush:先进的元素排在最前
- lrange/lindex:获取数据
- llen
- lpop/rpop
lpush + rpop 或 rpush + lpop 保证元素先进先出,否则是先进后出。
扩展命令:
- blpop/brpop:阻塞式获取数据,在规定时间内等待获取数据,超时则返回。
- lrem : 移除指定的数据。
4. set 命令
set 的存储结构是由 hash 演变而来,以 hash 的 field 作为值(value 为 nil)进行存储就变成了 set。set 弥补了 list 查询效率低的缺陷,且不允许数据重复。
set 可以用于数据去重、求集合交集等。
常用命令:
- sadd 向key中添加元素
- smembers 查看key的成员
- srem 删除key中的成员
- scard 获取key 中数据个数
- sismember 判断key中是否存在某成员
扩展命令:
- srandmember 随机获取集合中指定数量的成员
- spop 随机获取集合数据并移除
- sinter 求两个集合的交集
- sunion 求两个集合的并集
- sdiff 求两个集合的差集(有方向性)
5. sorted_set 命令
支持排序的存储结构,在 set 的存储结构基础上添加可排序字段 score。
常用命令
- zadd key score member 添加数据(score为权重)
- zrange 获取全部数据(由小到大)
- zrevrange 获取全部数据(由大到小)
- zrem 删除数据
扩展命令
- zrangebyscore/zrevrangebyscore 按条件查询数据
- zremrangebyrank 按条件删除
- zcard、zcount 获取数据数量
- zrank 获取数据对应的索引(排名)
- zscore 获取数据的score值
- zincrby 增加score值
三. key 常用操作
1. 常用操作
2. 时效性操作
- 设置key过期时间:expire、pexpire;
- 获取key有效时间:ttl、pttl;
- 将key的有效期设置为永久:persist
3. 查询操作
匹配模式:*匹配所有;?匹配单个字符;[]匹配中括号中的某一字符。
4. 其他操作
- 改名操作:rename(改名后如果名字已经存在则覆盖)、renamenx
- 排序操作:sort (为 list、set、sorted_set 排序 )
- 查询key相关指令:help @generic
5. db 操作
redis 存储空间实际上划分成 0-15 区域,16个区域共用一块内存,但是区域之间数据相互独立。
- select 命令选择操作的区域;
- move 移动数据至另一个区域;
- dbsize 获取当前区域key的数量;
- flushdb 清除当前区域所有的 key;
- flushall 清除所有区域所有的key。
|