目录
一、介绍
二、安装以及连接
三、设置连接密码
四、连接报错
五、redis 操作字符串以及过期时间
六、 redis 列表操作
七、redis 集合操作
八、hash 哈希操作
九、redis 发布和订阅操作
十、RDB和AOF的两种数据持久化机制
十一、 其他机器连接redis
十二、 python 操作redis
1. 安装python-redis 以及连接redis
2. 操作数据
3. 事务操作
4. 发布与订阅
一、介绍
redis 是一种 nosql 数据库,他的数据是保存在内存中,同时 redis 可以定时把内存数据同步到磁盘,即可以将数据持久化,并且他比 memcached 支持更多的数据结构( string,list表[队列和栈],set[集合],sorted set[有序集合],hash(hash表)。
redis 使用场景:
- 登录会话存储,存储在 redis 中,与 memcached 相比,数据不会丢失。
- 排行版/计数器:比如一些秀场类的项目,经常会有一些前多少名的主播排名。还有一些文章阅读量的技术,或者新浪微博的点赞数等。
- 作为消息队列:比如 celery 就是使用 redis 作为中间人。
- 当前在线人数:还是之前的秀场例子,会显示当前系统有多少在线人数。
- 一些常用的数据缓存:比如我们的 BBS 论坛,板块不会经常变化的,但是每次访问首页都要从"ys591 中获取,可以在 redis 中缓存起来,不用每次请求数据库。
- 把前200篇文童缓存或者评论缓存:一般用户浏览网站,只会浏览前面一部分文章或者评论,那么可以把前面200篇文童和对应的评论缓存起来。用户访问超过的,就访问数据库,并且以后文章超过200篇,则把之前的文章删除。
- 好友关系: 微博的好友关系使用 redis 实现。
- 发布和订阅功能:可以用来做聊天软件。
二、安装以及连接
参考文章链接:【Redis】在Mac上安装使用redis的教程_mac安装redis-CSDN博客
- 安装:brew install redis
- 开启服务:brew services start redis
- 关闭服务: brew services stop redis
- 指定端口号:redis-cli -h 127.0.0.1 -p 6379
-h ip地址; -p 端口号 ; -a 密码
三、设置连接密码
- 配置文件设置连接密码:
第一步:cd /opt/homebrew/etc
第二步:open redis.conf
报错了!!No application knows how to open URL file:///opt/homebrew/etc/redis.conf
解决: 换成 open -e redis.conf 命令
第三步:在redis.conf 中修改requirepass 密码,如图所示:
第四步:运行 redis-server /opt/homebrew/etc/redis.conf
第五步:运行 redis-cli -h 127.0.0.1 -p 6379 -a 123456
四、连接报错
报错:Could not connect to Redis at 127.0.0.1:6379: Connection refused
方式一: 查看服务是否启动
方式二: 如果服务已经启动还是报错,通过以下方式解决:
- 检查redis 服务的状态:redis-cli ping,确认redis 服务正在运行,如果返回PONG,则表示Redis服务器正在运行。
- 如果没有返回或者返回其他错误消息,我们需要通过以下命令启动Redis服务器: redis-server。
- 参考链接: 解决Could not connect to Redis at 127.0.0.1:6379: Connection refused的具体操作步骤_mob649e816a3664的技术博客_51CTO博客
五、redis 操作字符串以及过期时间
-
添加字符串 set key value
-
查看字符串. get key
-
设置过期时间
-
set key value EX 过期时间(秒) 比如:set username axuan EX 10
-
expire key 过期时间(秒) 比如:expire age 204. 查看过期时间 ttl key
-
查看所有字符串 keys *
-
删除字符串 del key
其他命令:
- 删除所有的key flushall
-
六、 redis 列表操作
- 在列表左边添加元素
lpush key value 比如:lpush userlist xuan
- 在列表右边添加元素
rpush key value
- 查看列表中的元素
lrange key start stop 比如:lrange userlist 0 -1 返回所有的元素
- 移除并返回列表key的头元素
lpop key
- 移除并返回列表key的尾元素
rpop key
- 移除并返回返回列表key的中间元素,count个值为value的元素
lrem key count value 比如:lrem userlist 1 haha
- 指定返回第几个元素(元素序号是从0开始)
lindex key index
- 获取列表中的元素个数
llen key
- 删除指定的元素
lrem key count value
count > 0:从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。
count < 0:从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。
count = 0: 移除表中所有与 value 相等的值。
七、redis 集合操作
- 添加元素
sadd set value1 value2 比如:sadd school1 qinghua beida
- 查看元素
smembers set 比如:smembers school1
- 移除元素
srem set memeber 比如:srem school1 beida
- 查看集合中的元素个数
scard set 比如:scard school1
- 获取多个集合的交集
sinter set1 set2 比如sinter school1 school2
- 获取多个集合的并集
sunion set1 set2 比如:sunion school1 school2
- 获取多个集合的差集
sdiff set1 set2 比如:sdiff school1 school2
八、hash 哈希操作
- 添加一个新值
hset key field value 比如:hset person name xuan
- 添加多个新值
hmset key field value field value... 比如:hmset person address jueeweee height 155
- 获取哈希中的field对应的值
hset key field 比如:hget person name
- 删除field 中的某个field
hdel key field 比如:hdel person height
- 获取某个哈希中所有的field 和 value
hgetall key 比如:hgetall person
- 获取某个哈希中所有的field
hkeys key 比如:hkeys person
- 获取某个哈希中所有的值
hvals key 比如:hvals person
- 判断哈希是否存在某个filed
hexists key field 比如:hexists person age
- 获取哈希中总共的键值对
hlen key 比如:hlen person key
- redis 事务操作
- 事务特点
Redis 事务可以一次执行多个命令,事务具有以下特征:
- 隔离操作:事务中的所有命令都会序列化、按顺序地执行,不会被其他命令打扰。
- 原子操作: 事务中的命令要么全部被执行,要么全部都不执行。
2. 操作事务
- 开启一个事务
multi
- 执行事务,会将在multi 和exec 中的操作一并提交
exec
如下图所示:
127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> set username axuanya
QUEUED
127.0.0.1:6379(TX)> get username
QUEUED
127.0.0.1:6379(TX)> exec
1) OK
2) "axuanya"
- 取消事务
discard
- 监视一个或者多个key,如果在事务执行之前这个(或这些)key 被其他命令所改动,那么事务将被打断
127.0.0.1:6379> watch username
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> set username hahahaha
QUEUED
127.0.0.1:6379(TX)> exec
1) OK
127.0.0.1:6379> get username
"hahahaha"
127.0.0.1:6379>
- 取消所有key的监视
unwatch
九、redis 发布和订阅操作
- 给某个频道发布消息
publish channel message
2. 订阅某个频道发布消息
subscribe channel
十、RDB和AOF的两种数据持久化机制
RDB | AOF | |
开启关闭 | 开启: 默认开启。关闭: 把配置文件中所有的save都注释,就是关闭了。 | 开启:在配置文件中appendonly ,yes 即开启了 aof ,为 no 关闭。 |
同步机制 | 可以指定某个时间内发生多少个命令进行同步。比如1分钟内发生了2次命令,就做一次同步。 *save 900 1:如果在900s以内发生了1次数据更新操作,那么就会做一次同步操作。 *save 300 10: 如果在300s以内发生了10数据更新操作,那么就会做一次同步操作。 *save 60 10000:如果在60s以内发生了10000数据更新操作,那么就会做一次同步操作。 | 每秒同步或者每次发生命令后同步。 *appendfsync always:每次有数据更新操作,都会同步到文件中。 * appendfsync everysec:每秒进行一次更新。 * appendfsync no:使用操作系统的方式进行更新。普遍是30s更新一次。 |
存储内容 | 存储的是redis里面的具体的值 | 存储的是执行的更新数据的操作命令 |
存储路径 | 根据redis.conf下的dir以及rdbfilename来指定的。默认是/var/lib/redis/dump.rdb | 根据redis.conf下的dir以及appendfilename来指定的。默认是/var/lib/redis/dump.rdb |
优点 |
(3)非常适用于备份。 | (1) AOF的策略是每秒钟或者每次发生写操作的时候都会同步,因此即使服务器故障,最多只会丢失1秒的数据。(2) AOF存储的是Redis命令,并且是直接追加到aof文件后面,因此每次备份的时候只要添加新的数据进去就可以了。(3) 如果AOF文件比较大了,那么Redis会进行重写,只保留最小的命令集合。 |
缺点 |
|
|
十一、 其他机器连接redis
如果想要让其他机器连接本机的redis 服务器, 那么应该在redis.conf配置文件中,指定“bind 本机的ip地址”,
这样别的机器就能连接成功。不像是网上说的,要指定对方的ip地址.
十二、 python 操作redis
1. 安装python-redis 以及连接redis
import redis
from flask import Flask
cache = redis.StrictRedis(host='127.0.0.1', port=6379, db=0)
app = Flask(__name__)
if __name__ == '__main__':app.run(debug=True)
2. 操作数据
# 1. 操作字符串
cache.set('username', 'axuan')
print(cache.get('username'))
# 2. 操作列表
cache.lpush('languages', 'java')
cache.lpush('languages', 'python')
print(cache.lrange('languages', 0, -1))
# 3. 集合的操作
cache.sadd('team', 'yuyu')
cache.sadd('team', 'xuan')
print(cache.smembers('team'))
# 4. 哈希的操作
cache.hset('person','name','xuanya')
cache.hset('person','age','25')
print(cache.hgetall('person'))
3. 事务操作
pip=cache.pipeline()
pip.set('username','lalala')
pip.set('password','1u3u33')
# 执行事务
pip.execute()
4. 发布与订阅
# 订阅
ps = cache.pubsub()
ps.subscribe('email')
while True:for item in ps.listen():if item['type'] == 'message':print(item['data'])
# 发布
import redis
from faker import Faker
cache = redis.StrictRedis(host='127.0.0.1', port=6379, db=0)
fake = Faker(language='zh-CN')
for x in range(3):cache.publish('email', fake.email())