String
set
get
setex:设置值时候同时设置过期时间
setnx:当不存在的时候才设置新值
List
rpush
rpop
lpush
lpop
lrange index1 index2
lindex key idnex1
ltrim key index1 index2
hash
hset key key1 value1
hget key key1
hgetall key
set
sadd key v1
sadd key v1 v2 v3
smemebers key
sismember key v1
scard key #key代表的set的成员个数
spop 弹出一个
zset
zadd key score value
zrange key index1 idnex2
zrangebyscore key score1 score2
zcard key
zrank key value1
当多个客户端操作redis-server的同一个数据变量的时候,容易出现丢失修改。比如一个client将数据a 拿到 += 20 然后再写入,另一个client 同时拿到数据a += 10,之后再写入。这时显然后写入的会覆盖掉之前写入的,导致修改被丢失了。redis 通过加锁操作来限制并发执行。
set clock true ex 5 nx
位图
setbit key 1 1#对key变量设置第2bit为1
bitcount key index1 idnex 2 #key [index1,idnex2] 中1的个数
bitpos key 1 index1 idnex2 #key [index1,index2(单位:字节)]中第一个1 的索引位置
#setbit 只能对单个位处理 ,bitfield 可以对多个位进行处理 <=64
bitfield key get u4 0 #从第一个位开始取4个位组成无符号整数
bitfield key set u8 8 97 #从第9位开始的8bit 设置为无符号数97
bitfield key incrby u4 2 1 # 从第3位开始的4位 代表的无符号数+1
hyperloglog 使用场景:大数据量下的不准确去重计数,它并不是将数据保存在容器中,而是将数据元素hash成为64bit,前14bit映射到桶,计算后面50bit最大低位为0 比如100 就是3 10 就是2,需要6bit就可存储结果,所以hyperloglog 总共需要12kB。注意:与set的区别是,set可以拿到每个具体存储的元素,而hyperloglog只是计数。
pfadd key v1 将元素v1 加入
pfcount key
pfmerge key1 key2
布隆过滤器:hyperloglog 使用 能计数 但是并不能确定是否包含某个元素,如果某网站需要将用户未浏览过的信息推送给用户,那么可以使用该数据结构。但是注意该数据结构存在一定的误判率,即可能出现你浏览过的内容被推送过来。但是对于大部分用户是未被推送的内容。原理就是将数据元素 用k个hash函数 得到对应的值,并将位数组相应位置置1。那么判断的时候,同样需要hash函数hash,如果相应位数组位置存在 一个为0 则 肯定不存在,如果全为1则有很大的可能存在。
bf.add key v1
bf.exists key v1