『互联网架构』软件架构-redis特性和集群特性(上)(48)

栏目: 数据库 · 发布时间: 5年前

内容简介:上次已经说到了redis其实就是nosql,这次具体redis是个什么样的东西。源码文档:https://github.com/limingios/netFuture/tree/master/源码/『互联网架构』软件架构-redis特性和集群特性(48)

上次已经说到了 redis 其实就是nosql,这次具体redis是个什么样的东西。

源码文档:https://github.com/limingios/netFuture/tree/master/源码/『互联网架构』软件架构-redis特性和集群特性(48)

『互联网架构』软件架构-redis特性和集群特性(上)(48)

(一)Redis安装

通过虚拟机的方式在centos7下面安装下,这次我不通过 docker 的方式了,按照正常的方式,让老铁们熟悉redis的结构。

mkdir soft
cd soft
#虽然这个不是最新版本,但是这个版本已经够了解了。
#我一直说不要使用最新版本的,
#如果新版本没有太多建设性的改变,
#因为新版本资料少,出问题不好解决。
wget http://download.redis.io/releases/redis-3.2.9.tar.gz
tar xvf redis-3.2.9.tar.gz
cd redis-3.2.9
make install PREFIX=/root/soft/redis-3.2.9
 #启动
src/redis-server ./redis.conf&

ps -ef | grep redis

#客户端连接
src/redis-cli

『互联网架构』软件架构-redis特性和集群特性(上)(48)

『互联网架构』软件架构-redis特性和集群特性(上)(48)

(二)常用命令

  • keys

    >*表示区配所有

set liming 'hi'
set liming2 'hi'
set idig8 'hi'
keys *

『互联网架构』软件架构-redis特性和集群特性(上)(48)

以liming开头的

keys liming*

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • exists

    >key是否存在

exists li
exists liming

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • set

    >设置 key 对应的值为 string 类型的 value。

set aa 'liming'

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • setnx

    >设置 key 对应的值为 string 类型的 value。如果 key 已经存在,返回 0,否则返回1。nx 是 not exist 的意思。

setnx idig8 'idig8'
setnx aa 'idig8'

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • del

    >删除某个key,存在返回1,不存在返回0

del idig8
del aaa

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • expire

    >设置过期时间(单位秒),1 返回 设置成功,0 设置失败

expire aa 45
expire aaa 45

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • ttl

    >查看剩下多少时间。返回负数则key失效,key不存在了

ttl liming
expire liming 45
ttl liming

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • setex

    >设置 key 对应的值为 string 类型的 value,并指定此键值对应的有效期。

setex AAA 544 'sss'
ttl AAA

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • mset

    >一次设置多个 key 的值,成功返回 ok 表示所有的值都设置了,失败返回 0 表示没有任何值被设置。其实实际生产中这个用处比较大,一次放入多个值,减少跟客户端的请求次数。

mset a 'a' b 'b' c 'c'

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • getset

    >设置 key 的值,并返回 key 的旧值。

set abc 'abc'
getset abc 'abc_new'

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • mget

    >一次获取多个 key 的值,如果对应 key 不存在,则对应返回 nil。

mget abc a b c

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • incr

    >对key 的值做加加操作,并返回新的值。注意 incr 一个不是 int 的 value 会返回错误,incr 一个不存在的 key,则设置 key 为 1

incr aaa
incr aaa
incr aaa
incr aaa

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • incrby

    >同 incr 类似,加指定值 ,key 不存在时候会设置 key,并认为原来的 value 是 0

incrby aaa 200
get aaa

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • decr

    >对 key 的值做的是减减操作,decr 一个不存在 key,则设置 key 为-1

decr aaa
decr aaa
decr aaa

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • decrby

    >同 decr,减指定值。

decrby aaa 100

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • append

    >给指定 key 的字符串值追加 value,返回新字符串值的长度。

append aaa 200
get aaa

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • strlen

    >取指定 key 的 value 值的长度。

strlen aaa

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • persist

    >用于移除给定 key 的过期时间,使得 key 永不过期。

persist  aaa

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • select

    >默认的16个库。默认选中0库。选择数据库(0-15库)

select 0 
select 1
select 0

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • move

    >key 迁移到 1库中

set aaaaaa 'aaaaaa'
move aaaaaa 1
select 1
keys *

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • randomkey

    >随机返回一个key

randomkey
randomkey
randomkey

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • rename

    >重命名

set age 10
rename age age_new
get age_new

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • type

    >返回数据类型

get age_new
type age_new

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • ping

    >测试连接是否可以成功

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • quit

    >退出连接

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • dbsize

    >返回key的数量

dbsize

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • info

    >输出redis信息

info

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • config get|set

    >显示与修改配置

config get '*port*'

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • string

    >格式: set key value

    string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。

    string类型是Redis最基本的数据类型,一个键最大能存储512MB。

set abc 'abc'
get abc

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • hash

    >格式: hmset name key1 value1 key2 value2

    Redis hash 是一个键值(key=>value)对集合。

    Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。

hmset idig8 a 'a' b 'b'
hget idig8 a
type idig8

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • list(列表)

    >Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

    格式: lpush name value

    在 key 对应 list 的头部添加字符串元素

    格式: rpush name value

    在 key 对应 list 的尾部添加字符串元素

    格式: lrem name index

    key 对应 list 中删除 count 个和 value 相同的元素

    格式: llen name

    返回 key 对应 list 的长度

lpush idiglist redis
lpush idiglist mongodb
lpush idiglist hbase
llen idiglist
lrange idiglist 0 10
type idiglist

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • zset(sorted set:有序集合)

    >格式: zadd name score value

    Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。

    不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

    zset的成员是唯一的,但分数(score)却可以重复。

zadd idig88 1 redis
zadd idig88 2 redis
zadd idig88 3 java
zadd idig88 4 mongodb
zrangebyscore idig88 0 1000
type idig88

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • 事务

    >并非分布式事务,这个基本用不到,但是它支持,就提下。

redis 对事务的支持目前还比较简单。redis 只能保证一个 client 发起的事务中的命令可以连续的执行,而中间不会插入其他 client 的命令。 由于 redis 是单线程来处理所有 client 的请求的所以做到这点是很容易的。一般情况下 redis 在接受到一个 client 发来的命令后会立即处理并 返回处理结果,但是当一个 client 在一个连接中发出 multi 命令有,这个连接会进入一个事务上下文,该连接后续的命令并不是立即执行,而是先放到一个队列中。当从此连接受到 exec 命令后,redis 会顺序的执行队列中的所有命令。并将所有命令的运行结果打包到一起返回给 client.然后此连接就 结束事务上下文。

开启事物:exec 取消事物:discard 结束事物:exec

set age 20
set name 'idig8'
get age
get name
#开始
multi
incr age
incr name
#执行
exec
get age
get name

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • 发布与订阅

    >发布订阅(pub/sub)是一种消息通信模式,主要的目的是解耦消息发布者和消息订阅者之间的

    耦合,这点和 设计模式 中的观察者模式比较相似。pub/sub 不仅仅解决发布者和订阅者直接代码级别耦合也解决两者在物理部署上的耦合。在redis实现是SUBSCRIBE (订阅主题)、 UNSUBSCRIBE(取消主题) 和 PUBLISH(推送)

订阅

subscribe idig8

『互联网架构』软件架构-redis特性和集群特性(上)(48)

『互联网架构』软件架构-redis特性和集群特性(上)(48)

生产

publish idig8 aa
publish idig8 bbb

『互联网架构』软件架构-redis特性和集群特性(上)(48)

『互联网架构』软件架构-redis特性和集群特性(上)(48)

  • 持久化

    >持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。Redis 提供了两种持久化方式:RDB(默认) 和AOF 。

RDB:

rdb是Redis DataBase缩写

RDB功能核心函数rdbSave(生成RDB文件)和rdbLoad(从文件加载内存)两个函数

『互联网架构』软件架构-redis特性和集群特性(上)(48)

rdbSave函数: 将内存中的数据库数据以 RDB 格式保存到磁盘(文件)中,文件存在,那么新的 RDB 文件将替换已有的 RDB 文件。

在保存 RDB 文件期间, 主进程会被阻塞, 直到保存完成为止。

SAVE 和 BGSAVE 两个命令是操作 rdbSave函数的区别:

SAVE 直接调用 rdbSave ,阻塞 Redis 主进程,直到保存完成为止。在主进程阻塞期间,服务器不能处理客户端的任何请求。

BGSAVE 则 fork 出一个子进程,子进程负责调用 rdbSave ,并在保存完成之后向主进程发送信号,通知保存已完成。因为 rdbSave 在子进程被调用,所以 Redis 服务器在 BGSAVE 执行期间仍然可以继续处理客户端的请求。

rdbLoad函数:是redis服务重启或者启动的时候回加载保存到磁盘的RDB文件加载到内存中会被阻塞。

https://redisbook.readthedocs.io/en/latest/internal/rdb.html#id4

存储结构:

『互联网架构』软件架构-redis特性和集群特性(上)(48)

保存策略:

save 900 1

save 300 10 #300 秒内容如超过 10 个 key 被修改,则发起快照保存

save 60 10000

AOF:Aof是Append-only file缩写,每当执行服务器(定时)任务或者函数时flushAppendOnlyFile 函数都会被调用, 这个函数执行以下两个工作

aof写入保存:

WRITE:根据条件,将 aof_buf 中的缓存写入到 AOF 文件

SAVE:根据条件,调用 fsync 或 fdatasync 函数,将 AOF 文件保存到磁盘中。

两个步骤都需要根据一定的条件来执行,Redis提供了三种条件。

『互联网架构』软件架构-redis特性和集群特性(上)(48)

保存策略:

模式 WRITE 是否阻塞 SAVE 是否阻塞 停机时丢失的数据量
AOF_FSYNC_NO 不保存 阻塞 阻塞 操作系统最后一次对 AOF 文件触发 SAVE 操作之后的数据。
AOF_FSYNC_EVERYSEC 每一秒钟保存一次 阻塞 不阻塞 一般情况下不超过 2 秒钟的数据。
AOF_FSYNC_ALWAYS 每执行一个命令保存一次 阻塞 阻塞 最多只丢失一个命令的数据。

存储结构:

内容是redis通讯协议(RESP )格式的命令文本存储。

总结:RDB:数据 。AOF:数据+命令。

AOF更新频率RDB高 优先加载aof。

加载的时候没有RDB(数据文件要小)快吧。

  • api太多了

    >直接发布文档吧,在源码里面有,直接看html文档吧

『互联网架构』软件架构-redis特性和集群特性(上)(48)

PS:常用都写了一遍,建议还是练练过一遍有点印象。命令还是很重要的。

百度未收录

>>原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!

>>原文链接地址:上一篇:

下一篇:


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

从Python开始学编程

从Python开始学编程

Vamei / 电子工业出版社 / 2016-11-24 / CNY 49.00

改编自Vamei博客的《Python快速教程》。本书以Python为样本,不仅介绍了编程的基本概念,还着重讲解编程语言的主流范式:面向过程、面向对象、面向函数。读者不仅可以轻松学会Python,以后再学习其他编程语言时也会更加容易。一起来看看 《从Python开始学编程》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具