一、安装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)))