Redis是一个开源的、内存数据结构存储中间件,可以用作数据库,缓存,和消息代理。
不是普通的key-value存储,Redis支持strings字符串,hashes字典, lists列表,sets集合,sorted sets有序集合等数据结构,
还提供范围查找,bitmaps位图,HyperLogLog,geospatial 地理空间索引,和流。
Redis支持同步,Lua脚本, LRU淘汰策略,事务,数据持久化,通过Sentinel哨兵模式和Cluster集群自动分片存储实现高可用性和扩展性。Redis基于内存,减少磁盘I/O性能造成的瓶颈,使用单线程,减少串行控制的开销,比Memcache速度快,支持更多数据类型和数据的持久化。主要用于小数据量的高性能的操作和运算,有很多的应用场景。
Redis key值不宜过长,因为key比较和查找会耗费更多,也不宜过短,命名最好有好的可读性,例如使用.或者-拼接起多个单词作为一个key值,如user:12345:buy-book,key最大512MB。
1、Strings 字符串
将字符串作为value,不能超过512MB,可以缓存页面,序列化后的对象。
set key value 支持set赋值操作,key存在的情况下,重新赋值,也可以在set key value后加额外的参数nx,或者xx,可以实现只有在不存在,或者存在key的情况下进行set赋值操作,
还可以进行incr,incrby,decr,decrby原子增加/减少的操作,也就是读-增加/减少-写是一个整体的操作,实现计数器功能
2、Lists 列表
Redis 列表为一组有序元素,底层实现为Linked List链表,往列表里添加元素的速度很快。
lpush key value1 在队首添加元素,rpush key value2队尾添加元素;
lrange key 0 -1找出指定索引位置的列表元素,lpop key, rpop key从队首,队尾删除一个元素;
ltrim key 0 9,只保留10个元素,其他的删除掉;
可以存储社交网站上用户最新发布的动态,帖子,博客等,提升网站的访问速度;将列表元素限定在指定长度;
也可以用做两个进程通信,例如消息队列的生产和消费,lpush key 和brpop key n结合使用。
当删除最后一个元素时,列表也删除了。
3、Hashes 字典
方便存储对象信息,并且对象的属性个数没有实际限制。
hmset user:123 name Alice address Beijing, 往key中添加多个字段
hget user:123 name,从key中提取name字段
hmget user:123 name address,读取name,address两个字段
4、Sets 集合
表示一组无序不重复的元素的集合
sadd key Alice, Blair, Cindy, David ,往集合里添加元素
smembers key ,列出集合中的所有元素
sismember key value,判断是否是集合中的元素
scard key,集合元素个数
5、Sorted sets 有序集合
为一组不重复的元素的集合,类似set,只是添加元素的时候,需要同时添加一个浮点型的数值,代表该元素的score,实现有序,
当两个元素的score相同时,根据元素字母顺序的先后判断两个元素的大小。可以实现排行榜。
zadd,zrange,zrevrange,zrangebyscore,zremrangebyscore, zrank, zrevrank