redis常见类型及其适用场景
Redis全称?
Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。Redis全称为:Remote Dictionary Server(远程数据服务),该软件使用C语言编写,Redis是一个key-value存储系统,它支持丰富的数据类型,如:string、list、set、zset(sorted set)、hash。
String
String 类型是包含很多种类的的特殊类型(字节串,整数,浮点),并且是二进制安全的,比如对序列化对象进行存储,图片,进行二进制存储,比如一个简单字符串,数值等。
常规操作
Set和Get方法
setnx( not exist)
setex(expired) 设置有效期(psetex)
setrange 替换字符串
mset和mget 一次性获取或设置多个值
getset 返回旧值设置新值
append[name] 字符串追加方法
strlen[name] 获取字符串长度
面试题 redis key value最大值?
一个key或是value大小最大是512M
memcached 和redis区别?
memcached key最大长度250个字符,value最大是1M的(默认情况)
分布式锁基本原理
setnx来争抢锁
再用expire给锁加一个过期时间防止锁忘记了释放。
计数相关操作
incr和decr 对某一值进行递增递减(可以用来计数)
incrby和decrby对某一值进行制定长度递增递减
incrbyfloat 对浮点数操作
HASH(map)
应用场景:
面试题
比如我们要一个用户的信息存储内存,包含以下信息:
Key 用户ID
value用户对象包含姓名name,年龄age,生日birthday 等信息
方案1 任何对象都可以转字符串,也可以采用json序列化(程序控制)
方法2 Map 结构 (类似列数据库)
Hash 它特别适合存储对象,相比较而言,将一个对象存在hash类型里比存String类型里占用内存空间更少,并方便存储整个对象
hset和hget hmset(批量)
hsetnx
hincrby和hdecrby 递增和递减
hexists 存在返回,不存在返回0
hlen 返回集合所有键数值
hdel 删除制定field
hkeys 返回所有字段
hvals 返回所有value值
hgetall 返回所有key和value
hset 001 name “zhangsan1”
hmset 001 name “zhangsan2” age 18 birthday “20010121”
HGET 001 name
hgetall 001
List
利用Lists的push的操作,将任务存储在list中,然后工作线程再用pop操作将任务取出进行执行。
List 类型是链表结构的集合,常用于存储任务信息,最近浏览过的文章,常用联系人,主要有pop和push功能
lpush/rpop 从头部加元素
rpush/lpop 从尾部加元素
linsert 插入元素
lset 将指定下标的元素替换掉
lrem 删除元素 返回删除个数
ltrim 保留制定key 的值范围内的数据
lpop 从list头部删除元素,并返回删除元素
rpop 从list尾部删除元素,并返回删除元素
rpoplpush 从尾部删除元素 在从头部加入元素(内部循环)
lindex 返回key的list中index位置元素
llen返回元素个数
Set(去重)
对集合我们可以取交集(SINTERSTORE),并集(SUNIONSTORE),差集(SDIFFSTORE)。
sadd 添加
srem 删除
spop 随机返回删除的key(弹出一个元素)
sdiff 返回俩集合不同元素
sdiffstore 返回不同元素存在另一个集合
smembers 查看集合元素
smove 从一个set集合移到另一个set集合中(相当于剪切复制)
scard 查看集合里元素个数
srandmember 随机返回一个元素
sismember 判断某元素是否为集合中元素(
返回1代表是集合中元素,返回0则不是)
ZSet(sorted set)
ZSet 有序集合 (有序且唯一)内部跳跃表实现的
zadd 添加
zrem 删除
zincrby 以制定值去自动减少或增加
zrangebyscore找到制定区间范围的数据
zremrangebyrank删除1到1
zremrangebyscore删除制定需要
zcard 返回集合里所有元素个数
zcount 返回集合中score在给定区间的数量
排行榜 延迟队列
返回排序集合
ZRANGE game 0 -1
返回集合及分数
ZRANGE game 0 -1 WITHSCORES
根据分数范围获取集合
ZRANGEBYSCORE game 0 1
倒序
ZREVRANGE