一、下载,解压,安装c++
[root@incisor ~]# yum install -y gcc gcc-c++ make cmake
[root@incisor ~]# wget http://download.redis.io/releases/redis-5.0.3.tar.gz
[root@incisor ~]# tar -zxvf redis-5.0.3.tar.gz
[root@incisor ~]# cd redis-5.0.3
[root@incisor redis-5.0.3]# make PREFIX=/usr/local/redis install
复制代码
二、配置Redis启动脚本
1)将源码包的utils/redis_init_script拷贝到/etc/init.d/下,重命名为redisredis
[root@incisor redis-5.0.3]# cp -p utils/redis_init_script /etc/init.d/redis
[root@incisor redis-5.0.3]# vi /etc/init.d/redis
复制代码
修改内容:数据库
REDISPORT=6379 #定义了redis的监听端口
EXEC=/usr/local/redis/bin/redis-server # redis默认的server执行路径
CLIEXEC=/usr/local/redis/bin/redis-cli # redis-cli启动路径
PIDFILE=/var/run/redis_${REDISPORT}.pid
#redis的配置文件, 因此咱们须要在/etc目录下建立redis目录用来保存redis的配置文件,并将配置文件拷贝到该目录下
CONF="/etc/redis/redis.conf" # redis的配置文件
复制代码
2)将源码包下的redis.conf拷贝到/etc/redis/下django
[root@incisor redis-5.0.3]# mkdir /etc/redis
[root@incisor redis-5.0.3]# cp -p redis.conf /etc/redis/
[root@incisor redis-5.0.3]# vi /etc/redis/redis.conf
复制代码
修改内容:缓存
bind 127.0.0.1 # 若是是远程访问,修改成公网IP
daemonize yes # 修改成yes,以守护进程的方式运行
复制代码
基本设置只有这两样,可是我如今只想把Redis作为缓存,不须要持久化功能,因此我还修改一些别的配置,如下的设置按需设置:安全
loglevel notice # 日志等级
logfile "/usr/local/redis/log/redis.log" # 日志保存路径
maxmemory 67108864 # 设置最大占用内存64M,按需设置
databases 1 # 设置最大数据库数
requirepass 12345678 # 设置密码
#save 900 1
#save 300 10
#save 60 10000
save "" # 关闭RDB持久化
appendonly no # 关闭AOF持久化
复制代码
建立日志目录/usr/local/redis/log。bash
三、加入系统服务服务器
[root@incisor redis]# cd /etc/init.d/
[root@incisor init.d]# chkconfig --add redis
[root@incisor init.d]# chkconfig --level 235 redis on
[root@incisor init.d]# chkconfig --list redis #
redis 0:关闭 1:关闭 2:启用 3:启用 4:关闭 5:启用 6:关闭
复制代码
chkconfig删除服务是:chkconfig --del [name],例如chkconfig --del redis。app
四、启动,中止Redis函数
[root@incisor init.d]# service redis start
[root@incisor init.d]# service redis stop
复制代码
若是/etc/redis/redis.conf中的bind设置的是公网IP,使用service redis stop是关闭不了的,这个时候我都是查出进程号,直接kill掉。
由于stop命令执行的是/etc/init.d/redis中的stop函数。
其中
$CLIEXEC -p $REDISPORT shutdown
复制代码
是中止Redis任务,而$CLIEXEC即redis-cli命令,忽略-h参数的话,默认是链接127.0.0.1,因此若是/etc/redis/redis.conf中的bind不是127.0.0.1,那么就须要修改/etc/init.d/redis文件了。 修改以下:
IP=127.0.0.1 # /etc/redis/redis.conf中的bind参数值
REDISPORT=6379
EXEC=/usr/local/redis/bin/redis-server
CLIEXEC=/usr/local/redis/bin/redis-cli
......省略
$CLIEXEC -h $IP -p $REDISPORT shutdown # 加上-h $IP便可
复制代码
可是我通常本身测试用的话,都懒得改,直接kill掉。
五、经过命令行客户端访问
[root@incisor ~]# /usr/local/redis/bin/redis-cli -h host -p port -a password
复制代码
一、安装redis库:pip3 install redis
redis提供两个类Redis和StrictRedis用于实现Redis服务器的命令,Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py。因此经常使用Redis类。
redis链接实例是线程安全的,能够直接将redis链接实例设置为一个全局变量。
二、链接Redis服务器
import redis
r = redis.Redis(host='127.0.0.1', port=6379, decode_responses=True)
r.set('skey', 'svalue')
print(r['skey'])
print(r.get('skey'))
print(type(r.get('skey')))
复制代码
须要加上decode_responses=True, 这样写入的value是str类型,为False的话写入的是字节类型。
三、链接池
import redis
pool = redis.ConnectionPool(max_connections=10, host='127.0.0.1', port=6379, decode_responses=True)
r = redis.Redis(connection_pool=pool)
r.set('skey', 'svalue')
print(r['skey'])
print(id(r))
复制代码
参数max_connections:设置最大链接数
这里有一篇文档,是分析redis.ConnectionPool()链接池源码的,感兴趣的话,能够看看:www.u3v3.com/ar/1346。
四、将链接池设置成单例模式
pool.py文件
import redis
pool = redis.ConnectionPool(max_connections=10, host='127.0.0.1', port=6379, decode_responses=True)
复制代码
而后,其余文件,导入pool变量,这样就能够实现一个单例的链接池了。
test.py文件
import redis
from pool import pool
r = redis.Redis(connection_pool=pool)
r.set('skey', 'svalue')
print(r['skey'])
复制代码
具体的Redis的数据类型,以及相应的方法,自行查看。
一、安装django-redis: pip3 install django-redis
二、设置settings.py文件 添加
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/0",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"CONNECTION_POOL_KWARGS": {"max_connections": 10, "decode_responses": True},
# "PASSWORD": ""
}
}
}
复制代码
其中,"LOCATION"表示链接字符串,有三种方式设置:
redis://[:password]@localhost:6379/0
rediss://[:password]@localhost:6379/0
unix://[:password]@/path/to/spcket.sock?db=0
但也有文档说,某些环境下链接密码放在url是不安全的,这时你能够选择忽略密码或者使用"OPTIONS"设置,因此按需选择吧。
"CONNECTION_POOL_KWARGS": 链接池设置
"max_connections": 最大链接数
"decode_responses": 以字符串的形式写入Redis,为False的话写入字节类型。
django-redis使用redis-py的链接池接口,redis-py默认不会关闭链接,尽量重用链接, redis-py实际就是redis库的Redis中的链接池,上一节中说起,说明链接池原理是同样的。
三、Redis存取
有两种方式:
1)使用django.core.cache.cache类,这个类有巨坑!
from django.core.cache import cache
from django.http import HttpResponse
def hello(request):
key = 'skey'
value = 'svalue'
cache.set(key, value)
if key in cache:
return HttpResponse('<h1>{0}: {1}</h1>'.format(key, cache.get(key)))
else:
return HttpResponse('<h1>没有找到</h1>')
复制代码
这段代码运行前,须要将settings.py文件中CACHES中的decode_responses参数设置为False,具体缘由我没深究。
运行这段代码没任何问题,能写入能读取。可是!!!若是这个key-value值是别的客户端写入的呢?假如我经过redis-cli命令行工具添加了key-value,那经过cache.get(key)是取不到的,固然这段代码添加的skey-svalue在客户端执行get skey也是取不到的。
来,咱们经过命令行工具,查看这段代码添加的key-value,以下:
[root@incisor ~]# /usr/local/redis/bin/redis-cli -h 127.0.0.1 # 127.0.0.1的话,可忽略-h参数
127.0.0.1:6379> keys * # 查看所有的键
1) ":1:skey"
复制代码
...原来经过cache.set(key, value),会在key的前面拼接一个字符串":1:",也不知道为啥。因此我说这个cache是隐形巨坑。
2)经过get_redis_connection()
from django_redis import get_redis_connection
from django.http import HttpResponse
def hello(request):
key = 'skey'
value = 'svalue'
conn = get_redis_connection('default')
conn.set(key, value)
if conn.get(key):
return HttpResponse('<h1>{0}: {1}</h1>'.format(key, conn.get(key)))
else:
return HttpResponse('<h1>没有找到</h1>')
复制代码
执行后,利用redis-cli查看一下key值:
127.0.0.1:6379> keys *
1) "skey"
复制代码
如今key值不会被拼接字符串了,因此我经常使用这个函数。
使用get_redis_connection()最好把settings.py文件中CACHES中的decode_responses参数设置为True, 同时conn = get_redis_connection('default')中 的'default'是settings.py文件中CACHES设置的'default'。