1.redis概念
redis是非关系型数据库,存储于内存当中(所以速度非常快)。一般用于热点数据的缓存使用,也可以用于分布式锁(因为可以多个服务器共享数据),以key-value的形式存储。
主要用于减轻数据库的压力。
安装可参考该文章
2.redis的五大数据类型
1.String
常用命令为:
1.set key value 设置固定键的值
2.get key 获取固定键的值
3.mget key 获取多个key的值
4.setex key seconds value 插入一个键值并设置一个过期时间(单位为秒)
5.setnx key value 当key不存在时设置一个值(常用于分布式锁)
6.incr key 将键的整数值加1
7.decr key 将键的整数值减1
使用场景:常规key-value缓存应用。也可用于常规计数: 微博数, 粉丝数。
2.List
list就是链表,按插入顺序排序,也可以在头尾插入。
常用命令为:
1.lpush key value (value2) 将一个或多个值插入列表
2.lrange key start stop 获取范围内元素
3.lrem key count value 移除列表几个元素
4.llen key 获取列表长度
5.lpop key 移除并获取第一个元素
6.rpop key 移除并获取最后一个元素
7.rpush key value(value2)将一个或多个值插入列表底部
8.ltrim key start stop 对一个列表进行范围管制,只保留该范围内的数据。
应用场景:正常用于粉丝列表,关注列表。(list为链表)
3.Set
Set是String类型的无序集合,但成员具有唯一性。即不会出现重复的数据。
常用命令为:
1.sadd key value(value2) 向集合添加成员
2.smembers key 获取集合所有成员
3.spop key 移除并返回一个随机成员
4.scard key 获取集合的成员数
5.sdiff key1 key2 返回集合的差集
6.sinter key1 key2 返回集合的合集
7.sunion key1 key2 返回集合并集
8. sismember key member 判断 member 元素是否是集合 key 的成员
应用场景:可以自动排重,一般可以比作不重复的list。一般可以用于微博中的共同关注、共同喜好、二度好友等功能。
set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。
4.Zset
常用命令为:
1. zadd key score member1 (socre2 member2) 向有序集合添加成员
2.zcard key 获取成员数量
3.zrange key start stop 获取范围内成员
4.zrem key menber 移除指定值的成员
5.zremrangebyrank key start stop 移除指定排名区间的成员
6.zremrangebylex key min max 移除指定区间成员 (一般加入“[”表示包含 “(”表示不包含)
7.zrangebylex key min max 查询字典区间范围 (“-”和“+”)则表示最小值和最大值
应用场景:与set相比,多了个自动排序。即为一个有序且不重复的集合列表。一般用于文章的发表排行,以发表时间为score。
zset内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,而跳跃表里存放的是所有的成员,排序依据是HashMap里存的score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。
5.hash
常用命令为:
1.hmset key field value(field2 value2)插入field-value数据
2.hmget key field (field2)查询对应field数据
3.hkeys key 获取表中所有字段名
4.hgetall key 获取所有字段和值
5.hvals key 获取表中所有值
应用场景:一般用于存放用户对应的姓名年龄生日等数据,如以用户id为key 姓名和姓名数据为field和value。这样相比于用string类型会省去很多重复数据降低了内存的开销。