Redis一篇让你快速入门

tech2024-11-21  17

文章目录

关于作者简介Redis简介Redis 优势Redis与其他key-value存储有什么不同? Redis的安装及连接Ubuntu下安装Redis安装启动/停止/重启查看状态连接自动连接指定连接(按照自己的的情况连接) Redis字符串操作及过期时间设置字符串获取值删除设置过期时间通过set设置通过expire设置查看过期时间 查看所有键 列表的操作创建一个列表从左插入从右插入 查询切片查询索引查询 获取列表长度删除单一左删除单一右删除综合删除 集合的操作集合和列表的区别创建查看删除获取长度获取交集获取并集获取差集 hash操作补充删除所有字段增加获取删除获取所有获取所有field判断是否存在某个field获取个数 Redis事务操作什么是事务操作事务操作的特点开启一个事务执行事务取消事务监听取消监听 发布与订阅发布订阅 RDB和AOF的两种数据持久化机制RDB与AOF操作与比较 安全机制加入密码快速在conf中查找到关键字 其他机器如何连接redis通过python连接redis安装基本使用使用事务 使用python订阅和发布订阅发布 [========]

关于作者

简介

Redis简介

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

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

Redis 优势

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

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

Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。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 如果想要查询所有那么start填 0 stop填 1

索引查询

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的时候,Redis会fork出⼀个⼦进程⽤来同步,在数据量⽐较⼤的时候,可能会⾮常耗时。(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')
最新回复(0)