存储系统数据缓存一般会使用三个模块: MongoDB,Redis,memcache. 其中 memcache 是轻量级缓存, 只能将数据保存到内存中, Redis 可以配置数据保存在内存还是硬盘.
其主要用途有: 不同应用 (语言) 中共享数据
CentOS 安装 Redis
安装
- yum install epel-release
- yum install Redis
开启服务:
systemctl start Redis
设置密码:
编辑文件:/etc/Redis.conf
- #requirepass foobared 去掉注释, foobared 改为自己的密码
- requirepass newpasswd #这句表示该密码为 newpasswd
保存并重启 Redis 服务
设置密码后的命令行登入方式: Redis-cli -h 127.0.0.1 -p 6379 -a newpasswd
设置远程端可访问:
因为 Redis 服务默认不提供远程操作
编辑文件:/etc/Redis.conf
将 bind 127.0.0.1 改为 bind 0.0.0.0
保存并重启 Redis 服务
设置防火墙开放端口
firewall-cmd --zone=public --add-port=6379/tcp --permanent
重启防火墙
systemctl restart firewalld
命令行基本操作操作
连接
Redis-cli
通过键值对设置值
set key value [EX seconds] [PX milliseconds] [NX|XX]
其中 ex 表示保存的秒数, px 表示毫秒数, nx 表示 key 不存在时才操作, xx 表示 key 存在时才操作
set keyx valuex
设置值且保存 5 秒
set keyx1 valuex1 ex 5
一次性设置多个
mset key1 value1 key2 value2
设置新值并返回原值
getset key1 value1111
字符串切片, 如 "value1" 经过下面结果为:"val"
getrange key1 0 2
退出
exit
通过键值对获取值
get keyx
查看所有的键
keys *
查看带有 e 字符的所有 key
keys *e*
一次性获取多个
mget key1 key2
通过键值对删除值
del key [key ...]
判断键是否存在, 返回 0 或 1
exists key1
重命名
rename key1 key2
跳转到另一个空间(db)
总共有 [0,15] 个, 默认为 0
select 1
移动键值内容
move key db
自增自减
自增:
incr keycunx #执行一次增加一
自减
decr keycunx #执行一次减去一
二进制位操作:
如果把设置值的 offset 匹配成用户 id, 则可以实现高效的用户登入判断, 设置 1 为登入, 0 为非登入
设置值:
setbit key offset value 设置二进制 offset 位的值为 value
- setbit dongbit 2 1
- setbit dongbit 1000 1
取出值为 1 的位个数:
bitcount dongbit #输出 2
获取二进制第几位的值:
- getbit dongbit 10 #输出 0
- getbit dongbit 2 #输出 1
Hash 操作:
设置数据
hset key field value 其中 key 总键, field 为子键, value 为子键的值
- hset user name dongxiaodong
- hset user passwd pdongdongdong
获取到所有数据:
- hgetall user
- hkeys user
- hvals user
获取到指定数据:
hget user passwd
批量设置:
hmset user1 name dong1 passwd pdong111
判断子键是否存在, 存在返回 1, 否则为 0
hexists user1 passwd
列表操作:
设置
- rpush key value [value ...] #一个 key 可以保持多个 value, 先入先出, 如果需要先入后出则使用 rpush
- rpush listdong dong1 dong2 dong3
取值:
lrange key start stop 取 key 的值需要确定起始和结束位置
- lrange listdong 0 -1 #取所有
- lrange listdong 1 1 #确定某个
集合操作(值不可重复):
设置
sadd aggdong dong1 dong2 33 dong1
取值
smembers aggdong
获取个值数
scard aggdong
Python 基本操作
安装模块
pip3 install Redis
简单的连接:
- # 连接方法一:
- #每次操作都是一个连接, 如 get,set 等, 一个就是一个网络连接, 所以不可取
- # conn=Redis.Redis(host="192.168.1.195",port=6379,password="rpdong")
- #连接方法二(连接池)
- poolx=Redis.ConnectionPool(host="192.168.1.195",port=6379,password="rpdong")
- conn=Redis.Redis(connection_pool=poolx)
- #设置数据
- conn.set("keyx","valuexx")
- #取出数据
- print(conn.get("keyx"))
键值对操作补充:
只有键本身存在时才更改数据值和最长保留时间为 10 秒
- # 设置数据,
- conn.set("keyx","valuexx",ex=10,xx=True)
发布和订阅:
发布
命令行发布:
参数为: publish 主题 内容
publish dongtop dongtototo
Python 发布:
- import Redis
- #连接池
- poolx=Redis.ConnectionPool(host="192.168.1.195",port=6379,password="rpdong")
- conn=Redis.Redis(connection_pool=poolx)
- #发布消息, 参数(主题, 内容)
- conn.publish("dongtop","dongxiaodongtext")
- conn.publish("dongtop2","dongxiaodongtext222")
- print("------ 发送完成 --------")
订阅:
- import Redis
- #连接池
- poolx=Redis.ConnectionPool(host="192.168.1.195",port=6379,password="rpdong")
- conn=Redis.Redis(connection_pool=poolx)
- pub=conn.pubsub() #打开接收
- pub.subscribe("dongtop") #设置接收主题
- pub.subscribe("dongtop2")
- print("-------- 等待接收 ---------")
- while True:
- msgx=pub.parse_response() #准备接收, 如果无数据则阻塞
- '''
- 第一次会输出订阅成功消息:
- 收到的数据为: [b'subscribe', b'dongtop', 1]
- 收到的数据为: [b'subscribe', b'dongtop2', 2]
- #输出:
- 收到的数据为: [b'message', b'dongtop', b'dongxiaodongtext']
- 收到的数据为: [b'message', b'dongtop2', b'dongxiaodongtext222'
- ''' print(" 收到的数据为:",msg
基于订阅和发布的小文件传输:
发布端
- # 发布消息, 参数(主题, 文件内容)
- conn.publish("dongtop",open("南沙客运港. mp4","rb").read())
- print("------ 发送完成 --------")
接收端:
- msgx =pub.parse_response() # 去掉第一次订阅成功的消息
- print("-------- 等待接收 ---------",msgx)
- while True:
- msgx =pub.parse_response() # 准备接收, 如果无数据则阻塞
- #得到文件数据并写入文件
- open("客运港. mp4","wb").write(msgx[2])
- print("----* 接收完成 *----")
来源: https://www.cnblogs.com/dongxiaodong/p/10496148.html