一、redis与memcache的区别
1、redis不仅支持k/v类型的数据,同时还提供了list,set,zset,hash数据结构的存储。
2、redis支持集群化,即master-slave模式的主从复制
3、redis支持数据的持久化,可将内存数据保存在磁盘中,重启的时候可以再次加载进行使用
4、Redis能够替代memcached,让你的缓存从只能存储数据变得能够更新数据,因此你不再需要每次都重新生成数据了。
redis底层使用hash表的方式来存储k/v对,保证可以快速查询到相应的key值
二、Redis各类型的应用
1、string
作为常规的key-value缓存应用。
应用场景:微博数、粉丝数等
注:一个键最大能存储512MB,value其实不仅是String,也可以是数字,常用在数字的自加自减
常用方法示例
客户端查看结果
2、Redis Hash表
redis hash是一个string类型的field和value的映射表,hash特别适用于存储对象(应用对象包含多种属性)
常用方法示例
常用命令:hget hset hgetall
hmset user:001 name "李三" age 18 birthday "20010101"
Key是用户ID,value是一个Map,这个Map的key是成员的属性名,value是属性值,
这样对数据的修改和存取都可以直接通过其内部Map的Key(Redis里称内部Map的key为field), 也就是通过
key(用户ID) + field(属性标签) 操作对应属性数据了,既不需要重复存储数据,也不会带来序列化和并发修改控制的问题。很好的解决了问题。
客户端查看结果
3、List
list列表是简单的字符串列表,按照插入顺序排序(内部实现为LinkedList),可以选择将一个链表插入到头部或尾部。在redis实现为一个双向链表,可以从两边插入、删除数据。应用场景可以有微博的关注列表、粉丝列表、消息列表等。
常用方法示例:
lpush(添加左边元素),rpush,lpop(移除左边第一个元素),rpop,lrange(获取列表片段,LRANGE key start stop)等。
客户端查看结果
4、set
set表示存储的一个元素不重合的集合。Redis还为集合提供了求交集、并集、差集等操作,可以非常方便的实现如共同关注、共同喜好、二度好友等功能。set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。
常用方法示例:
sadd spop smembers sunion sinter
客户端查看结果:
5、zset
相对于Set,Sorted Set多了一个Score作为权重,使集合里面的元素可以按照score排序,注意它是Set,所以它里面的元素也不能重复。可应用与排名和榜单
常用命令示例
zadd,zrange,zrem,zcard等
客户端查看结果: