一、安装Redis
1.获取redis资源
wget http://download.redis.io/releases/redis-4.0.8.tar.gz
2.解压
tar xzvf redis-4.0.8.tar.gz
3.安装
cd redis-4.0.8
make
cd src
make install PREFIX=/usr/local/redis
(如果有执行出错,先安装gcc。安装命令为:yum -y install gcc automake autoconf libtool make 。
若出现【zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录】,则运行命令make MALLOC=libc)
4.移动配置文件到安装目录下
cd ../
mkdir /usr/local/redis/etc
mv redis.conf /usr/local/redis/etc
5.配置redis为后台启动
vi /usr/local/redis/etc/redis.conf //将daemonize no 改成daemonize yes
6.将redis加入到开机启动
vi /etc/rc.local //在里面添加内容:/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf (意思就是开机调用这段开启redis的命令)
7.开启redis
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
8.常用命令
redis-server /usr/local/redis/etc/redis.conf //启动redis
pkill redis //停止redis
卸载redis:
rm -rf /usr/local/redis //删除安装目录
rm -rf /usr/bin/redis-* //删除所有redis相关命令脚本
rm -rf /root/download/redis-4.0.4 //删除redis解压文件夹
9.采用redis desktop manager远程连接的配置
接下里我们在配置文件redis.conf中进行相关的配置
#打开配置文件
vim redis.conf
设置后台启动
在vim编辑模式下,输入行数+gg可以快捷跳行。例如跳到第138行,输入:138gg
将第138行的daemonize no修改为daemonize yes即可
开启远程访问
将第70行的bind注释,第90行将protected-mode改为no
设置密码
取消第502行requirepass的注释,并修改密码
接下来重启redis:
#首先查询到redis的pid后,kill掉,然后重启
[root@localhost bin]# ps -ef|grep redis
root 20940 1 0 12:12 ? 00:00:18 ./redis-server *:6379
[root@localhost bin]# kill 20940
[root@localhost bin]# ./redis-server redis.conf
使用命令ps -ef|grep redis查看已经启动的redis服务
关闭redis服务
使用命令./bin/redis-cli shutdown停止redis服务
使用命令./bin/redis-cli命令进入到redis的客户端
使用密码认证登录,并验证操作权限:
$ ./redis-cli -h 127.0.0.1 -p 6379 -a Password
或 进入后输入密码
$ ./redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> auth Password
简单测试:
set name 30
get name
keys *
exit
二、Python操作Redis
安装redis模块
pip install redis
普通连接
redis-py提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py
import redis
conn = redis.Redis(host='127.0.0.1', port=6379)
# 有密码的连接
#conn = redis.Redis(host='127.0.0.1', port=6379, password='1234', max_connections=1000)
# 可以使用url方式连接到数据库
# conn = Redis.from_url('redis://@localhost:6379/1')
conn.set('name', 'LinWOW')
print(conn.get('name'))
连接池
redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数Redis,这样就可以实现多个Redis实例共享一个连接池
连接池:redis_pool.py
from redis import ConnectionPool
POOL=ConnectionPool(host='127.0.0.1',port=6379,max_connections=100)
使用连接池:test_redis.py
import redis
from redis_pool import POOl
conn = redis.Redis(connection_pool=POOl)
conn.set('name', 'LinWOW')
print(conn.get('name'))
构造url方式连接到数据库,有以下三种模式:
redis://[:password]@host:port/db # TCP连接
rediss://[:password]@host:port/db # Redis TCP+SSL 连接
unix://[:password]@/path/to/socket.sock?db=db # Redis Unix Socket 连接
从文件读取字典数据将数据写入redis
#在python中通过redis hset存储字典时,
#必须主动把字典通过json.dumps()序列化为字符串后再存储,
#不然hget获取后将无法通过json.loads()反序列化为字典
#数据格式 10\t{520:5.0,34:4.5,12:4.0} 多行
from redis import Redis
import json
#连接redis
client = Redis(host='127.0.0.1', port=6379, password='123456', max_connections=1000)
with open("resultData.txt", "r", encoding="utf-8") as f:
court_set = set(f.readlines())
#变量modelName是key名字
modelName = '20191227:model01:gao'
for line in court_set:
item = line.strip('\r\n').split('\t')
userKey = item[0]
#eval将str转dict
userValue = eval(item[1])
#使用hset写入数据
client.hset(modelName, userKey, json.dumps(userValue))
print('-------------------------------------')
for k in client.hkeys('20191227:model01:gao'):
d = client.hget('20191227:model01:gao', k)
print('%s\t%s' %(str(k, encoding="utf8"),json.loads(d)))