分布式缓存技术的使用
redis的魅力
数据结构
k-v
key
key是二进制安全的,可以用任何二进制序列作为key值。空字符串也是有效key值。
value
字符串、列表、散列、集合、有序集合、HyperLogLog
string
二级制安全的,一个redis字符能包含任意类型的数据。一个字符串类型的值最多能存储512M字节的内容
- 字符串操作:追加、截取:set、get、apend
- SETNX key val 只能创建(有不修改)
SET key value XX 只能修改(没有nil)
SET key value [EX seconds] [PX milliseconds] NX|XX
EX = SETEX key s value
PX = SETPX key ms value
NX = SETNX key value 键不存在,才能设置
XX:键存在时,才能设值 - 设值多个键的字符串值
MSET k1 v1 [k2 v2] - 键不存在时,设置字符串
MSETNX - OBJECT encoding k2 值最原始类型(raw,int-支持数值运算)
- keys pattern
- flushdb 清除数据库
- redis-cli -n 0 登录库-16个
- Unicode UFT-8 中文三个字符 GBK 中文2个字符
- rename k1 k0
- append k1 aa
- getrange k1 0 8
- 数值类计算
- 位图 位图不是真正的数据类型,定义在字符串类型中.偏移量超过字节重新开辟字节,从左往右
list 双向链表
- 消息队列 lpush brpop
- 队列 lpush rpop
- 栈 lpush lpop
- 按存入的顺序有序
- 基于链表实现
- 元素是字符串类型
- 列表头尾删除快,中间删除慢,删除元素是常态
- 元素可以重复出现
- 最多包含2^32-1个元素
- 从左往右,从0开始。从右往左,从-1开始
- 队列
- 栈
- lrange l1 0 -1 左右都包含 |
- lpush l1 a b c d 左入栈 |
- lpop l1 左出栈 |
- rpoplpush l1 l2 右弹左推|
- lindex l1 2
- LREM key count value
- count > 0: 从表头开始向表尾搜索,移除与value相等的元素,数量为count。
- count < 0: 从表尾开始向表头搜索,移除与value相等的元素,数量为count绝对值。
- count < 0: 移除所有与value相等的值。
- ltrim l3 0 0 去除指定范围外的元素|微博评论的最后500条
- linsert l3 before|after c in2 左边第一元素之前或之后插字符in2
hash散列
- 由field和关联的value组成的map键值对。field和value是字符串类型。一个hash中最多包含2^32-1键值对
- HSET key_hash field1 value1
- HMSET key_hash field1 value1 f2 v2 ...
- HSETNX key_hash field1 value1 key的file不存在的情况下执行,key不存在直接创建
- HVALS mike 获取值
- HKEYS mike 获取键
- HGET mike age 获取值
- HMGET mike age name ... 获取值
- hlen mike field数量
- hincrby mike age 10 field age加10
- hincrbyfloat mike age 10.5 浮点数加 类型变化:int->raw
- 用途
- 节约内存空间
- 每创建一个键,它都会为这个键存储一些附加的管理信息|这个键的类型、最后一次被访问的时间
- 数据库里的键越多,redis数据库服务器在存储附加管理信息方面耗费的内存就越多,花在管理数据库键上的cpu也会越多在字段对应的值上进行浮点数的增量计算
- 微博好友关注
- 用户维度统计
set集合
- 无序、去重的
- 元素是字符串类型
- 最多包含2^32-1个元素
- sadd kset 1 22 1
- smembers kset 数据量大顺序不一定一致
- srem kset 22 移除22
- sismember kset 22 检查元素 1/0
- srandmember kset count 随机15个元素 count<0 |count|>size 重复多个元素至count
- scard kset 个数
- spop kset 随机移除并返回移除元素
- smove kset dset 1 移动kset中的1到dest 1/0 只能移动1个元素
- sdiff k1 k2 k3 ... 返回从k1的集合中去除其他集合和自己交集部分(只返回结果,不操作集合)
- sdiffstore dest k1 k2 将差集存储在key dest下
sortedset 有序集合
- 有序的、去重的
- 元素是字符串类型
- 每一个元素都关联着一个浮点分值,并按照分值从小到大的顺序排列成集合中的元素。分值可以相同。
- 2^32 - 1
- ZADD 3.2(分值) apple(元素)
- zrange fruits 0 -1 [withscores] 从小到大
- zrevrange fruits 0 -1 withscores 逆序
- zrank fruits apple 排名
- zrangebyscore fruits (0.5 (3.5 withscores 开区间
- zrangebyscore fruits (0.5 3.5 withscores 闭区间
- zrangebyscore fruits -inf +inf withscores 正负无穷
- zremrangebyrank fruits 0 2 移除排名0-2的数
- zcard fruits 返回个数
- 应用: 网易云音乐播放量、新浪微博翻页、京东图书畅销