☆ redis之安装部署
☆ redis之基本使用
☆ redis之应用场景
☆ redis之源码制作rpm包
redis之应用场景
1、配合关系型数据库做高速缓存
1.1、热点数据缓存
查询热点数据缓存。
1.2、会话缓存( Session Cache)
用Redis 缓存会话比其他存储(如Memcached)的优势在于:Redis 提供持久化。当维护一个不是严格要求一致性的缓存时,如果用户的购物车信息全部丢失, 大部分人都会不高兴的, 现在,他们还会这样吗? 幸运的是,随着Redis 这些年的改进,很容易找到怎么恰当的使用Redis 来缓存会话的文档。甚至广为人知的商业平台Magento 也提供Redis 的插件。
1.3、全页缓存( FPC)
除基本的会话token 之外,Redis 还提供很简便的FPC 平台。回到一致性问题,即使重启了Redis 实例,因为有磁盘的持久化,用户也不会看到页面加载速度的下降,这是一个极大改进,类似PHP 本地FPC。再次以Magento 为例,Magento提供一个插件来使用Redis 作为全页缓存后端。此外,对WordPress 的用户来说,Pantheon 有一个非常好的插件wp-redis,这个插件能帮助你以最快速度加载你曾浏览过的页面。
2、多样的数据结构存储持久化数据
2.1、最新N个数据
通过List实现按自然时间排序的数据。
2.2、排行榜 topN
利用zset(有序集合);Redis 在内存中对数字进行递增或递减的操作实现的非常好。集合(Set
)和有序集合(Sorted Set
)也使得我们在执行这些操作的时候变的非常简单,Redis 只是正好提供了这两种数据结构。所以, 我们要从排序集合中获取到排名最靠前的10个用户– 我们称之为“ user_scores”,我们只需要像下面一样执行即可: 当然,这是假定你是根据你用户的分数做递增的排序。如果你想返回用户及用户的分数,你需要这样执行: ZRANGE user_scores 0 10 WITHSCORES Agora Games 就是一个很好的例子,用Ruby 实现的, 它的排行榜就是使用Redis 来存储数据的,你可以在这里看到。
2.3、时效性数据(验证码等)
expire过期性质
2.4、计数器、秒杀
原子性,自增方法incr
,decr
2.5、去除大量数据中的重复数据
利用set集合
2.6、队列
Reids 在内存存储引擎领域的一大优点是提供 list 和 set 操作,这使得Redis能作为一个很好的消息队列平台来使用。Redis 作为队列使用的操作,就类似于本地程序语言(如Python)对 list 的 push/pop 操作。如果你快速的在Google中搜索“ Redis queues”,你马上就能找到大量的开源项目, 这些项目的目的就是利用 Redis 创建非常好的后端工具,以满足各种队列需求。例如, Celery 有一个后台就是使用Redis 作为broker,你可以从这里去查看。
2.7、发布/订阅 消息系统
Redis 提供发布/订阅功能。发布/订阅的使用场景确实非常多。我已看见人们在社交网络连接中使用,还可作为基于发布/订阅的脚本触发器,甚至用Redis 的发布/订阅功能来建立聊天系统!
3、Redis 中 List 常用操作
在 Redis 中,List 是一种常用的数据类型,它可以像 Java 中的数组一样,保存一组有序的数据。Redis 中的 List 支持从两端进行元素的插入和删除操作,非常适合在消息队列、栈、队列等场景中使用。下面是 Redis 中 List 常用的一些操作:
-
LPUSH:将元素添加到 List 的左侧
redis> LPUSH mylist "world" (integer) 1 redis> LPUSH mylist "hello" (integer) 2 redis> LRANGE mylist 0 -1 1) "hello" 2) "world"
-
RPUSH:将元素添加到 List 的右侧
redis> RPUSH mylist "hello" (integer) 1 redis> RPUSH mylist "world" (integer) 2 redis> LRANGE mylist 0 -1 1) "hello" 2) "world"
-
LPOP:从 List 的左侧弹出元素
redis> LPOP mylist "hello" redis> LRANGE mylist 0 -1 1) "world"
-
RPOP:从 List 的右侧弹出元素
redis> RPOP mylist "world" redis> LRANGE mylist 0 -1 (empty list or set)
-
LINDEX:获取 List 中指定位置的元素
redis> LPUSH mylist "world" (integer) 1 redis> LPUSH mylist "hello" (integer) 2 redis> LINDEX mylist 0 "hello" redis> LINDEX mylist 1 "world"
-
LTRIM:修剪 List,只保留指定区间内的元素
redis> LPUSH mylist "world" (integer) 1 redis> LPUSH mylist "hello" (integer) 2 redis> LPUSH mylist "foo" (integer) 3 redis> LPUSH mylist "bar" (integer) 4 redis> LRANGE mylist 0 -1 1) "bar" 2) "foo" 3) "hello" 4) "world" redis> LTRIM mylist 1 2 OK redis> LRANGE mylist 0 -1 1) "foo" 2) "hello"
-
LLEN:获取 List 的长度(即包含元素的个数)
redis> LPUSH mylist "world" (integer) 1 redis> LPUSH mylist "hello" (integer) 2 redis> LLEN mylist (integer) 2
-
LRANGE:获取 List 中指定区间范围内的元素
redis> LPUSH mylist "world" (integer) 1 redis> LPUSH mylist "hello" (integer) 2 redis> LPUSH mylist "foo" (integer) 3 redis> LPUSH mylist "bar" (integer) 4 redis> LRANGE mylist 1 3 1) "foo" 2) "hello" 3) "world"
通过上面这些操作,可以方便地使用 Redis 的 List,实现各种队列、栈等数据结构。另外,List 在 Redis 中还被广泛用于实现简单的消息队列、任务队列等场景,可以实现消息的生产、消费等功能。
4、Redis 中 Sorted Set 常用操作
在 Redis 中,有序集合(Sorted Set)是一种基于哈希表和跳跃表(Skip List)实现的数据结构,它类似于 Set,但每个元素都会关联一个分值,因此元素的插入、删除和查找都支持按照分值进行有序操作。有序集合在实现排行榜、任务调度等场景中非常有用。下面是 Redis 中 Sorted Set 常用的一些操作:
-
ZADD:添加元素到有序集合中
redis> ZADD myzset 1 "one" (integer) 1 redis> ZADD myzset 2 "two" (integer) 1 redis> ZADD myzset 3 "three" 4 "four" (integer) 2
-
ZRANGE:获取有序集合中指定范围的元素
redis> ZADD myzset 1 "one" (integer) 1 redis> ZADD myzset 2 "two" (integer) 1 redis> ZADD myzset 3 "three" 4 "four" (integer) 2 redis> ZRANGE myzset 0 -1 1) "one" 2) "two" 3) "three" 4) "four" redis> ZRANGE myzset 1 3 1) "two" 2) "three" 3) "four"
-
ZREM:从有序集合中移除指定元素
redis> ZADD myzset 1 "one" (integer) 1 redis> ZADD myzset 2 "two" (integer) 1 redis> ZADD myzset 3 "three" 4 "four" (integer) 2 redis> ZREM myzset "two" (integer) 1 redis> ZRANGE myzset 0 -1 1) "one" 2) "three" 3) "four"
-
ZSCORE:获取指定元素的分值
redis> ZADD myzset 1 "one" (integer) 1 redis> ZADD myzset 2 "two" (integer) 1 redis> ZADD myzset 3 "three" 4 "four" (integer) 2 redis> ZSCORE myzset "three" "3"
-
ZCARD:获取有序集合中元素的数量
redis> ZADD myzset 1 "one" (integer) 1 redis> ZADD myzset 2 "two" (integer) 1 redis> ZADD myzset 3 "three" 4 "four" (integer) 2 redis> ZCARD myzset (integer) 4
-
ZCOUNT:获取有序集合中指定分值范围内的元素数量
redis> ZADD myzset 1 "one" (integer) 1 redis> ZADD myzset 2 "two" (integer) 1 redis> ZADD myzset 3 "three" 4 "four" (integer) 2 redis> ZCOUNT myzset 2 3 (integer) 2
-
ZRANK:获取有序集合中指定元素的排名(排行)
redis> ZADD myzset 1 "one" (integer) 1 redis> ZADD myzset 2 "two" (integer) 1 redis> ZADD myzset 3 "three" 4 "four" (integer) 2 redis> ZRANK myzset "three" (integer) 2
通过上面这些操作,可以方便地使用 Redis 的 Sorted Set,实现各种排行榜、任务调度等功能。其中,ZADD、ZREM、ZRANK 等操作常用于实现排名系统和任务调度系统,ZRANGE、ZSCORE、ZCOUNT 常用