文章目录
关于作者简介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')
使用事务
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')