redis学习记录(1)

一、redis特性

1、速度快 10w QPS

数据存放在内存,C语言实现,单线程

2、持久化

Redis所有数据保存在内存中,但是对数据的更新将异步地保存在磁盘上。

3、多种数据结构

列表

哈希

集合

有序集合

字符串

位图 :BitMaps

HyperLogLog:超小内存唯一值计数   12K 计算用户唯一值

GEO:地理信息定位

4、支持多种编辑语言

Java,Python,php,Ruby……

5、功能丰富

发布订阅,事务,pipeline

6、简单

源码较短 23000 lines  ; 不依赖外部库;单线程模型;

7、主从复制

8、高可用,分布式

 二、redis使用场景

1、缓存系统

网站设置缓存,可以提高响应速度;

2、计数器

如之前爬虫爬取网站次数的应用;有incr方法,加1

3、消息队列

4、排行榜

之前做的一个搜索引擎项目,可以对当前热搜进行查询

5、社交网络

6、实时系统

垃圾邮件处理系统

三、linux下安装:

$ wget http:/ /download. redis. io/releases/redis-3.0.7.tar.gz
$ tar xzf redis-3.0.7.tar.gz
$ ln -s redis-3.0.7 redis
$ cd redis
$ make
$ make install .
1)下载Redis指定版本的源码压缩包到当前目录。
2)解压缩Redis源码压缩包。
3)建立一个redis目录的软连接,指向redis-3.0.7。
4)进入redis目录。.
5)编译(编译之前确保操作系统已经安装gcc
6)安装。

四、三种启动方法

1、默认配置

redis-server,使用默认配置启动

2、动态参数启动

redis-server --port 6380   :6380端口启动

3、配置文件启动

redis-server config,生产环境建议配置启动

 

 常用配置:

五、API的理解和使用

1、通用命令

keys   遍历所有key         时间复杂度:O(n)

dbsize   数据库大小,算出key的总数   时间复杂度:O(1)

exists key   判断一个key是否存在     时间复杂度:O(1)

del key  删除指定的 key-value        时间复杂度:O(1)

expire key seconds 过期时间   ttl 查看key剩余的过期时间  persist:去掉过期时间         时间复杂度:O(1)

type key  返回key的数据类型         时间复杂度:O(1)

2、数据结构和内部编码

type命令实际返回的就是当前键的数据结构类型, 它们分别是:

string(字符串) 、 hash(哈希) 、 list(列表) 、 set(集合) 、 zset(有序集合)

但这些只是Redis对外的数据结构,实际上每种数据结构都有自己底层的内部编码实现, 而且是多种实现,这样Redis会在合适的场景选择合适的内部编码。

3、单线程结构

不会同时执行两条命令

redis单线程为什么这么快?

1、纯内存访问,内存的响应时间大约为100ns。

2、非阻塞IO,redis使用epoll作为I/O多路复用技术的实现。

3、避免线程切换和竞态消耗(简化实现,避免多线程竞争)。

注意:一次只能执行一条命令;拒绝长命令(keys *);

4、API

常用函数:

https://blog.csdn.net/T_I_A_N_/article/details/95660323

1、字符串

字符串value不能大于512MB,一般用不了。

场景:缓存,计数器、分布式锁……

天然适合作为计数器,因为redis是单线程,不会产生竞争问题。

作为缓存的流程

2、哈希

h开头

几乎所有的编程语言都提供了哈希(hash) 类型, 它们的叫法可能是哈希、 字典、 关联数组。 在Redis中, 哈希类型是指键值本身又是一个键值对结构, 形如value={{field1, value1}, ...{fieldN, valueN}}

3、列表

特点:有序,可重复,左右两边可以插入删除

L开头

使用场景:消息队列、文章列表

  • lpush+lpop=Stack(栈)
  • lpush+rpop=Queue(队列)
  • lpsh+ltrim=Capped Collection(有限集合)
  • lpush+brpop=Message Queue(消息队列)

4、集合

特点:无序,无重复元素,集合间操作,一个集合最多可以存储 _{2}32-1 个元素。除了支持集合内的增删改查,还支持多个集合间取交集,并集,差集。

S

场景:抽奖,放在集合中,使用spop随机弹出一个;标签,给用户添加标签;共同关注

5、有序集合

保留了集合不能有重复成员的特性,但是有序集合中的元素可以排序。有序集合中的元素不能重复,但是分数可以重复。

Z开头

场景:排行榜

六、redis其他功能

1、慢查询

生命周期:

 (1)慢查询发生在第3阶段;

(2)客户端超时不一定慢查询,但慢查询是客户端超时的一个潜在因素。

两个配置:

(1)slowlog-max-len :队列长度,慢查询入队。

(2)slowlog-log-slower-than:慢查询阈值(微秒)
三个命令:

(1)slowlog get [n] :获取慢查询队列

(2)slowlog len:获取慢查询队列长度

(3)slowlog reset:清空慢查询队列。

2、pipeline

redis客户端执行一条命令分为如下四个过程:

  1. 发送命令
  2. 命令排队
  3. 命令执行
  4. 返回结果
    其中1和4称为往返时间

redis提供了批量命令操作,有效减少往返时间。

流水线

 redis的命令时间是微秒级别。执行命令速度快,受网络限制。

注意:

(1)注意每次携带量

(2)pipeline只能作用在一个redis结点上。

3、发布订阅

角色: 发布者、订阅者、频道

 publish(发布)

#发布消息
publish channel message  

subscribe(订阅)

subscribe [channel] #一个或多个
unsubscribe [channel]  #取消订阅

使用场景:

聊天室、公告牌。

4、Bitmaps (位图)

redis可以操作位。

127.0.0.1:6379> set tian mingbo
OK
127.0.0.1:6379> getbit tian 0
(integer) 0
127.0.0.1:6379> getbit tian 1
(integer) 1
127.0.0.1:6379> setbit tian 1 0
(integer) 1
127.0.0.1:6379> get tian
"-ingbo"
127.0.0.1:6379> 

场景:用户统计

使用1位代表一个用户,可以节省内存(并不是绝对好,当数据大时)

假设网站有1亿用户,每天独立访问的用户有5千万,如果每天用集合类型和Bitmaps分别存储活跃用户可以得到下图。

5、hyperloglog  :极小空间完成独立数量统计,本质还是字符串

三个命令:

(1)pfadd key element [element] 向hyperloglog添加元素

(2)pfcount key [key...]: 计算hyperloglog的独立总数

(3)pfmerge destkey sourcekey [sourcekey ...]: 合并多个hyperloglog

存在一定的误差率,官方给出的误差率是0.81%。

6、GEO  

地理信息定位:存储经纬度,计算两地距离,范围计算等。

API:

geoadd key longitude latitude member [longitude latitude member]  #经度,纬度 ,标识

geopos key member [member ...]   #获取地理位置信息

geodist key member1 member2  #获取两个位置的距离

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值