Redis一篇让你快速入门


[========]

关于作者

简介

Redis简介

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。Redis 与其他 key - value 缓存产品有以下三个特点:

  1. Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。Redis 与其他 key - value 缓存产品有以下三个特点:
  2. Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  3. Redis支持数据的备份,即master-slave模式的数据备份。

Redis 优势

  1. 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  2. 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  3. 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
  4. 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

Redis与其他key-value存储有什么不同?

  1. Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
  2. Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

Redis的安装及连接

Ubuntu下安装Redis

安装

sudo apt-get update
sudo apt-get install redis-server

启动/停止/重启

sudo service redis-server start
sudo service redis-server top
sudo service redis-server restart

查看状态

sudo ps aux|grep redis

连接

自动连接
sudo redis-cli
指定连接(按照自己的的情况连接)
sudo redis-cli -h 127.0.0.1 -p 6379

Redis字符串操作及过期时间

设置字符串

set key value

获取值

get key

删除

del key

设置过期时间

通过set设置

set key value EX secends

通过expire设置

expire key secends

查看过期时间

ttl key

查看所有键

keys *

列表的操作

创建一个列表

从左插入

lpush key value

从右插入

rpush key value

查询

切片查询

lrange key start stop
  • 如果想要查询所有那么start0 stop1

索引查询

lindex key index

获取列表长度

llen key

删除

单一左删除

lpop key

单一右删除

rpop key

综合删除

lrem key count value
  • count用于指定删除的个数
  • count=0时 删除所有
  • count>0时 从左删除
  • count<0时 从右删除

集合的操作

集合和列表的区别

  • 集合和列表的表现形式差不多,但是集合是无序的也是不可重复的

创建

sadd key value1 value2

查看

smembers key

删除

srem key value

获取长度

scrad key value1 value2

获取交集

sinter key1 key2

获取并集

sunion key1 key2

获取差集

sdiff key1 key2

hash操作

补充删除所有字段

flushall

增加

hset key field value
hmset key flield1 vaue1 flield2 vaue2

获取

hget key field

删除

hedl key field

获取所有

hgetall key

获取所有field

hkeys key

判断是否存在某个field

hexiests key

获取个数

hlen key

Redis事务操作

什么是事务操作

  • 事务操作就是为了解决代码执行不完全的情况,如:给某人转100元钱,如果中途发生意外刚好又是我转给你你收钱的过程中发生的,那么如果不是事务操作的话,那么钱给扣了但是钱未计入你的账户,那么为了解决这种代码执行不完全发生的事故,于是有了事务操作

事务操作的特点

  • 隔离操作:事务的所有命令都会序列化,按顺序执行,不会被其他命令打扰
  • 原子操作:事务的命令要么全部被执行,要么全部不执行
  • 将代码命令序列化,在提交之前不会执行,提交后会将所有命令统一全部执行,如果代码运行过程中发生意外,那么开始到发生意外的所有执行结果都会被重置

开启一个事务

multi

执行事务

exec

取消事务

discard

监听

  • 被监听的key如果value发生变化那么当我们执行事务的时候就会发生错误,从而保证数据的可靠性,和安全性
watch key

取消监听

unwatch

发布与订阅

发布

publish chatroom "value"

订阅

subscribe chatroom1 chatroom2

RDB和AOF的两种数据持久化机制

RDB与AOF操作与比较

RDBAOF
开启关闭开启:默认开启。关闭:把配置⽂件中所有的save都注释,就是关闭了。开启:在配置⽂件中 appendonly yes 即开启了 aof ,为 no 关闭。
同步机制可以指定某个时间内发⽣多少个命令进⾏同步。⽐如1分钟内发⽣了2次命令,就做⼀次同步。每秒同步或者每次发⽣命令后同步
存储内容存储的是redis⾥⾯的具体的值存储的是执⾏的更新数据的操作命令
存储⽂件的路径根据dir以及dbfilename来指定路径和具体的⽂件名根据dir以及appendfilename来指定具体的路径和⽂件名
优点(1)存储数据到⽂件中会进⾏压缩,⽂件体积⽐aof⼩。(2)因为存储的是redis具体的值,并且会经过压缩,因此在恢复的时候速度⽐AOF快。(3)⾮常适⽤于备份。(1)AOF的策略是每秒钟或者每次发⽣写操作的时候都会同步,因此即使服务器故障,最多只会丢失1秒的数据。 (2)AOF存储的是Redis命令,并且是直接追加到aof⽂件后⾯,因此每次备份的时候只要添加新的数据进去就可以了。(3)如果AOF⽂件⽐较⼤了,那么Redis会进⾏重写,只保留最⼩的命令集合。
缺点(1)RDB在多少时间内发⽣了多少写操作的时候就会出发同步机制,因为采⽤压缩机制,RDB在同步的时候都重新保存整个Redis中的数据,因此你⼀般会设置在最少5分钟才保存⼀次数据。在这种情况下,⼀旦服务器故障,会造成5分钟的数据丢失。(2)在数据保存进RDB的时候,Redisfork出⼀个⼦进程⽤来同步,在数据量⽐较⼤的时候,可能会⾮常耗时。(1)AOF⽂件因为没有压缩,因此体积⽐RDB⼤。 (2)AOF是在每秒或者每次写操作都进⾏备份,因此如果并发量⽐较⼤,效率可能有点慢。(3)AOF⽂件因为存储的是命令,因此在灾难恢复的时候Redis会重新运⾏AOF中的命令,速度不及RDB
更多查看更多

安全机制

加入密码

进入redis.conf找到取消注释 #requirepass password password 填入自己的密码然后通过 service redis-server restart重启服务,后即可连接redis-cli后输入auth password进行授权后才能正常的操作访问redis

快速在conf中查找到关键字

  • 在命令输入状态输入/如果你是输入模式可以按ESC来返回到命令输入模式再/后面输入自己想要查找的关键字即可,回车后输入小写n即可查找下一个,N查找上一个

其他机器如何连接redis

  • 通过/bind查找到关键字,注释默认的bind 127.0.0.1改为bind 0.0.0.0:wq保存后,重启redis服务就可以了

通过python连接redis

安装

pip install redis

基本使用

from redis import Redis
redis_obj = Redis(host='127.0.0.1',port=6379,pssword='password')
#这里的字符串,列表,集合,hash的操作都与liunx上差不多所以就不多写了

使用事务

pip = redis_obj.pipeline()
pip.set('username', 'yxhpy')
pip.execute()

使用python订阅和发布

订阅

ps = redis_obj.pubsub()
ps.subscribe('email')
while True:
    for item in ps.listen():
        print(item)

发布

redis_obj.publish('email', 'xxxx@qq.com')
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值