redis 五种 String set zset(sorted set) hash list
String
二进制安全:序列化byte[] 没有类型概念,就没有溢出概念,所以通信的两端要定义好编解码 。具有同性质的还有zk,hbase,kafka
在redis 中 中文或者数值的长度和传输的时候和编码规则有关和java 不一样(<127 的数字占一个字节,> 127 的int 占4字节(32位)+- 2**31 )
String 三种 字符串 Get / set / append / strlen(取字节长度) [name]
数值 incr decr
二进制位 setbit / getbit offset(偏移量) value
字符串 和 数值 应用场景: session kv 缓存,数值计算计数器,fs分布式文件系统(小文件 磁盘 io ) 内存
二进制 应用场景 :bitmap(索引优化,内存压榨,数据传输,类型判定)登录天数 ,活跃用户数or一下
指令:存放格式 0 0 0 0 0 0 0 0
指令setbit k 1 1 存的就是01000000 取值的时候对应二进制的ascii 此处为64 对应为@
指令setbit k 7 1 存为01000001 取值为A
指令setbit k 9 1 01000001 ~01000000 取值为A@ strlen k=2 会自动扩展一个字节
对于utf-8 0x00000080 - 0x000007FF: 0x00000800 - 0x0000FFFF: 下方xxx的部分去值当做索引 所以setbit k 99999 1 ,strlen k =12500
110xxxxx 10xxxxxx 1110xxxx 10xxxxxx 10xxxxxx
bitcount key start end 计数 s~e 的字节中有多少个 1 支持双向索引 bitcount k 0 -1 =5 就是全部
指令 bittop operation destkey key【key....】 bittop and/or andkey k1 k2 结果是放在andkey 中
场景:用户登录多少天 ,活跃数
list
lpush k1 a b c d e , lrange k1 0 -1 e d c b a 左侧push rpush 则是右侧,反之 lpop 和rpop 从两侧 pop一个
INDEX 0 数组一样取值,LTRIM/RTRIM k1 start end 删除两端的不是s~e 中间的
场景:评论,消息队列,同一个服务中共享数据
hash:
相似与hashmap
指令 hset k k1 v ,hset s name mmy , hset s age 18
hgetall s 得到全部的k v , hkeys s 得到全部key , hvals 得到全部的值
还支持计算 hget s age -1
应用场景:聚集数据 是指在多个库中,或多个查询中,放在一起
详情页,商品详情,用户详情
set:
集合 无序 不重复 不推荐 集合交并差 多实例 随机事件(抽奖,验证码)
指令 sadd k1 a b c d a ,SMEMBERS k1 返回全部,无序,无重复
srandmember k1 3 反回随机3个 - 3 返回可以重复的 3个
srandmember k1 3 8大于长度 返回不重读的 全部, -8 有重复八个
SUNION / SINER / SDIFF k1 k2 交并差 运算 diff 是 k1 - k2
应用场景:可以共同好友,好友推荐,游戏推荐,商品推荐
sorted set:
有序集合,去重,排序
指令: zadd key score member
zadd k1 22 apple 11 banana 33 orange
ZRANGE k1 0 -1 withscores 按照 score 排序的
应用场景:排行榜(粉丝),评论,
对于新的要求的序列(中间5个倒叙)就是重排序,存的内容小于64k 使用的是压缩表ziplist
大于的时候用的是 skiplist ,可以通过object enconde key 查看