一、Redis 数据结构
- String :值最大不能超过512MB
- Set 设置值:set key value [ex seconds] [ px milliseconds] [nxlxx];ex seconds:秒级过期时间 px millisecondes:毫秒级过期时间 nx:键必须不存在才可添加xx:键必须存在才可设置用于更新 除了set 还提供了setex 和setnx:setex dey seconds value setnx dey value ;setex ,setnx 和ex nx选项一样,setex设置秒级过期时间,sexnx键必须不存在才可成功。
- Get获取值
- Mset 批量设置值
- mget批量获取值
- lncr数字运算(用于对值做自增):值不是整数返回错误,是整数,返回自增结果,键不存在,按值为0自增,反回1
- decr自减,incrby(自增指定数字)decrby(自减指定数字)incrbyfload(自增浮点数)
- Append 追加
- Strlen 长度
- Getset设置并返回原值
- Setrange设置指定位置字符
- Getrange截取字符串
- Set 设置值:set key value [ex seconds] [ px milliseconds] [nxlxx];ex seconds:秒级过期时间 px millisecondes:毫秒级过期时间 nx:键必须不存在才可添加xx:键必须存在才可设置用于更新 除了set 还提供了setex 和setnx:setex dey seconds value setnx dey value ;setex ,setnx 和ex nx选项一样,setex设置秒级过期时间,sexnx键必须不存在才可成功。
命令的时间复杂度
Del,mset,mget,支持多个键批量操作,时间复杂度与键个数有关,getrange和字符串长度有关,其它的基本都是O(1)的时间复杂度,速度很快
使用场景:
缓存:redis作为缓存,mysql作为存储
计数:可以实现快速计数,查询缓存功能,同时数据可以异步到其它数据源
共享session:一个分布式web服务将用户session信息保存到各自服务器,出于负载均衡考虑,分布式服务将用户的访问均衡的不同服务器,用户刷新一次就重新登录,这明显不可以为解决这个问题,redis将用户session进行集中管理,在这种模式下只要保证redis是高可用和扩展性的,每次用户从redis中集中获取
限速:限制每分钟获取验证频率
- Hash
- Hset 设值 hset user:1 name mark
- Hget 取值 hget user:1 name
- Hdel:删除
- Hlen:计算个数
- Hmset 批量设值
- Hmget:批量取值
- Hexists 判断是否存在
- Hkeys 获取所有filed
- hvals获取所有vale
- hgetall获取所有filed 与value
- .....
时间复杂度
,hdel,hmget,hmset 的时间复杂度和命令所带的 field 的个数相关 O(k),hkeys,hgetall,hvals 和存储的 field 的总数相关,O(N)。其余的命 令时间复杂度都是 O(1)
使用场景
哈希类型比较适宜存放对象类型的数据
- 列表
- Lrange 获取指定范围内的元素列表
- Rpush 右向插入 lpush左向插入
- Linsert 在某个前或后插入
- Lpop 左侧弹出 rpop右侧弹出
- Lrem 删除
- Ltrirm 按索引范围修剪列表
- lset修改指定索引下标元素
- Lindex 获取列表指定索引下标元素
- llen获取列表长度
- Blpop brpop阻塞式弹出元素
时间复杂度
列表类型的操作命令中,llen,lpop,rpop,blpop 和 brpop 命令时间复杂度都是 O(1),其余的命令的时间复杂度都是 O(n),只不过 n 的值根据命令不同而不同, 比如 lset,lindex 时间复杂度和命令后的索引值大小相关,rpush 和 lpush 和插入元 素的个数相关等等。
使用场景
消息队列 文章列表
4 set 集合
- Sadd
- Srem
- Scard
- Sismember
- Srandmember 随机从集合中返回指定个数元素
- Spop
- Smembers 获取所有元素无序
- Sinter 求多个集合的交集
- Suinon 求多个集合并集
- Sdiff 求多个集合差集
时间复杂度
scard,sismember 时间复杂度为 O(1),其余的命令时间复杂度为 O(n),其中 sadd,srem 和命令后所带的元素个数相关,spop,srandmember 和命令后所带 count 值相关,交集运算 O(m*k),k 是多个集合中元素最少的个数,m 是键个数, 并集、差集和所有集合的元素个数和相关。
使用场景
标签,抽奖,社交图谱
- 有序集合zset
使用场景:排行榜
- Redis 高级数据结构
Bitmaps 位图
现代计算机用二进制作为信息基础单位,1字节等于8位,eg:”big”字符串3个字节。bitmaps本身不是一种数据结构,实际上就是字符串,但它对字符串的位进行操作。bitmaps想成一个以位为单位的数组,每个单元只存0,1 数组下标在bitmaps中叫偏移量
Set bit 设置值
Get bit 获取
Bitcount 获取指定范围内为1的个数
Bitop bitmaps 间的运算
优势:如网站有1亿用户,每天访问用户5千万,如果每天用集合类型和bitmaps分别存储活跃用户,假如用户id是long 64位,则集合占空间为64位*50 000 000=400M,而bitmap则要1位* 100 000 000 = 12.5Mb节省甚多空间
布隆过滤器
比较巧妙的概率型数据结构,比于传统list,set ,map等它更高效,占空间更少但是概率性的,不准确,应用于黑名单,垃圾邮件过滤,爬虫网址判重等