|
Ubuntu18.04 安装Redis服务端和客户端
Redis 使用
Redis=Remote DIctionary Server,是一个由 Salvatore Sanfilippo 写的高性能的key-value存储系统。
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的
日执行、key-value 数据库,并提供多种语言的 API。
Redis支持存储的类型有string, list, set, zset和hash,在处理大规模数据读写的场景下运用比较多
REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。
Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
Redis是常用基于内存的Key-Value数据库,比Memcache更先进,支持多种数据结构,高效,快速。用Redis可以很轻松解决高并发的数据访问问题
sudo apt-get update
sudo apt-get install redis-server
设置密码
sudo vim /etc/redis/redis.conf
找到# requirepass foobared这一行(大概在500行),将注释符号#去掉,将后面修改成自己的密码,例如,设置密码为123456
requirepass 123456
看到 默认端口port=6379
开启远程访问
默认情况下,Redis服务器不允许远程访问,只允许本机访问,所以我们需要设置打开远程访问的功能
sudo vim /etc/redis/redis.conf
使用注释符号#注释bind 127.0.0.1这行(在第69行)
Redis服务控制
sudo systemctl start redis #启动
sudo systemctl stop redis #关闭
sudo systemctl restart redis #重启
sudo systemctl status redis # 服务的状态
连接测试
直接输入redis-cli通过默认客户端来测试连接,正常情况下返回ping的对应值PONG
NOAUTH Authentication required的解决:
输入密码即可解决 auth 123456 (123456是redis的密码)
python客户端代码:
- # -*- coding: utf-8 -*-
- __author__ = u'东方耀 微信:dfy_88888'
- __date__ = '2020/5/18 下午5:26'
- __product__ = 'PyCharm'
- __filename__ = 'redis_demo'
- # python需要安装redis的客户端
- # pip3 install redis
- # Successfully installed redis-3.5.2
- # 1. 导入redis
- from redis import StrictRedis
- # 2. 连接数据库,指定host,端口号,数据库
- r = StrictRedis(host="localhost", port=6379, db=2, password="123456")
- # 3. 存储到redis中
- r.set('test1', 'value1') # 单个数据存储
- r.set('test2', 'value2')
- # 4. 从redis中获取值
- print(r.get('test1'))
- # 5. 批量操作
- dict0 = {'k1': 'v1', 'k2': 'v2'}
- r.mset(dict0)
- print(r.mget('k1', 'k2'))
- # 虽然有set和get操作,但是一个一个的操作终究还是麻烦,所以,我们还有mset和mget命令
- #
- # python在进行mset操作时,只需要传入一个dict即可,进行mget操作,则传入一个list
- keydict = {}
- keydict['key1'] = 324
- keydict['key2'] = 'ag'
- print(r.mset(keydict))
- list = ['key1', 'key2']
- print(r.mget(list))
复制代码
# Redis 存储数组
# Redis 是不可以直接存储数组的,如果直接存储数组类型的数值,则报错
# 如下,存入 numpy 数组类型,会报错:
# redis.exceptions.DataError: Invalid input of type: 'ndarray'. Convert to a bytes, string, int or float first
# 在存储数组之前将其序列化,获取数组的时候将其反序列化即可。
# 借助于 python 的pickle模块进行序列化操作
- import numpy as np
- from redis import StrictRedis
- import pickle
- r = StrictRedis(host="localhost", port = 6379, db = 2, password=123456)
- x1 = np.array(([0.2, 0.1, 0.6], [10.2, 4.2, 0.9]))
- # print(r.set('test1', x1)) 直接这样会报错
- print(r.set("test1", pickle.dumps(x1)))
- print(pickle.loads(r.get('test1')))
- print(type(r.get('test1')))
- # 获取后的数据类型
- print(type(pickle.loads(r.get("test1"))))
- # 这样,就可以保持数据存入前和取出后的类型一致
复制代码
|
|