Redis 基础篇(一)

今天我们来讲一讲缓存

目前,memcache 和 redis 是互联网分层架构中,最常用的 key/value 缓存。

那么如何选择呢 ?

下面来看一下两种缓存的比较

 

redis

mecache

吞吐量

十万左右 QPS

达到几十万 QPS

数据结构

支持多种数据结构,如哈希,列表,集合,有序集合这类复杂的数据结构

只支持简单的 key/value 数据结构

持久化

1.redis 的定期快照不能保证数据不丢失

2.redis 的 AOF 会降低效率,并且不能支持太大的数据量

mecache 无法满足持久化的需求

高可用

redis 天然支持集群功能,可以实现主动复制,读写分离

memcache,要想要实现高可用,需要进行二次开发

能存储的内容大小

存储的内容比较大,最大为 1M

较小

并发量

使用单核

可以使用多核

内存分配

redis 是临时申请空间,可能导致碎片

memcache 使用预分配内存池的方式管理内存,能够省去内存分配时间

网络模型

非阻塞 IO 复用模型,但由于redis还提供一些非KV存储之外的排序,聚合功能,在执行这些功能时,复杂的CPU计算,会阻塞整个 IO 调度

非阻塞 IO 复用模型

底层模型

有自己的 VM 机制,理论上能够存储比物理内存更多的数据,当数据超量时,会引发 swap ,把冷数据刷到磁盘上,会浪费一定的时间去移动和请求

memcache 把所有的数据存储在物理内存里

 

总结一下,有持久化需求或者对数据结构和处理有高级要求的应用,选择redis,其他简单的 key/value 存储,选择 memcache

 

接下来,我会着重讲一下 redis

 

首先,我们来想一想,redis 为什么效率这么高?

简单概括一下,有下面几点

1)纯内存操作,内存响应时常大约 100 nm

2)核心是基于非阻塞的 IO 多路复用机制,加上reids自身的事件处理模型将 epoll 的连接,读写,关闭都转换为事件。不在网络 IO 上浪费时间。

3)单线程反而避免了多线程的频繁上下文切换问题

4)C 语言的执行速度更快

 

那他能用于哪些场景呢?

1.缓存,这是最常见的,对于经常需要读取的数据,可以添加缓存

2.排行榜系统, list 和 sortSet

3.计数器应用,播放量,浏览数等

4.社交网络,

5消息队列系统

6共享 session

7限制访问

。。。。。。

 

那我们该怎么使用它呢?

第一步:安装,参考网上教程 , 可在配置文件(redis.conf)中配置相应属性

第二步:启动并连接,进入安装的文件夹后,在命令栏输入 bin/redis-server 便可启动 redis 服务端,输入 bin/redis-cli 便可进入客户端,如果你连的是远程服务器,需要指定地址​。bin/redis-cli -h host -p port -a password​, 如:redis-cli -h 127.0.0.1 -p 6379 -a "mypass",-h, -p, -a, 分别是主机,端口,密码​

 

那么现在就可以尽情使用 redis 了。

 

使用前我先来说一下,redis 它到底能存些什么东西

1.字符串

    Redis 中的字符串是一个字节序列。Redis 中的字符串是二进制安全的,这意味着它们的长度不由任何特殊的终止字符决定。因此,可以在一个字符串中存储高达 512 兆字节的任何内容

示例命令

127.0.0.1:6379> set key "hello redis" 

 OK 

 127.0.0.1:6379> get key  

"hello redis"

 

2. 哈希

    Redis 散列/哈希 (Hashes) 是键值对的集合。Redis 散列/哈希是字符串字段和字符串值之间的映射。因此,它们用于表示对象。每个散列/哈希可以存储多达 2^32-1 个健-值对

示例命令

127.0.0.1:6379> HMSET key123 name "apple" color "red" distinct "zhejiang"

OK

127.0.0.1:6379> hmget key123 name

1) "apple"

 

3.列表

   Redis 列表只是字符串列表,按插入顺序排序。您可以向 Redis 列表的头部或尾部添加元素。列表的最大长度为 2^32-1 个元素

示例命令

127.0.0.1:6379> lpush namelist "apple" "pear" "oringer"

(integer) 3

127.0.0.1:6379> lrange namelist 0 4

1) "oringer"

2) "pear"

3) "apple"

 

4 集合

   Redis 集合是字符串的无序集合。在 Redis 中,您可以添加,删除和测试成员存在的时间 O(1) 复杂性

127.0.0.1:6379> sadd nameset "aa" "bb" "cc" "dd"

(integer) 4

127.0.0.1:6379> SMEMBERS nameset

1) "bb"

2) "dd"

3) "cc"

4) "aa"

 

5 排序集合

   Redis 可排序集合类似于 Redis 集合,是不重复的字符集合。 不同之处在于,排序集合的每个成员都与分数相关联,这个分数用于按最小分数到最大分数来排序的排序集合。虽然成员是唯一的,但分数值可以重复

示例命令

127.0.0.1:6379> ZADD namezset 1 "aaa"

(integer) 1

127.0.0.1:6379> ZADD namezset 2 "bbb"

(integer) 1

127.0.0.1:6379> ZADD namezset 2 "bbb"

(integer) 0

127.0.0.1:6379> ZADD namezset 2 "bbcb"

(integer) 1

127.0.0.1:6379> ZADD namezset 3 "ccc"

(integer) 1

127.0.0.1:6379> ZRANGEBYSCORE namezset 1 3

1) "aaa"

2) "bbb"

3) "bbcb"

4) "ccc"​

127.0.0.1:6379> ZRANGEBYSCORE namezset 1 2

1) "aaa"

2) "bbb"

3) "bbcb"

这次先到这里,相信大家对redis已经有一个初步的认识

 


 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值