redis

背景
  • 应用程序基本是访问数据库来进行数据的存储读写,由于高并发,仅仅使用数据库来保存数据,系统会因为磁盘读/写速度比较慢的问题而存在严重的性能问题,大量的并发需要系统在极短的时间内完成成千上万次的读/写操作,容易造成数据库系统无法提供请求服务,也可能导致服务宕机等问题。
解决方法
  • 使用NoSQL数据库redis,这是一种基于内存的数据库,并且提供一定的持久化功能。它可以支持每秒十几万此的读/写操作,其性能远超关系型数据库,并且还支持集群、分布式、主从同步等配置。Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储,Redis还支持 publish/subscribe, key 过期等特性
Redis作用
  1. 存储 缓存数据;
  2. 提供高速读/写
redis配置安装
安装环境介绍:
操作系统:CentOS release 6.8
redis软件版本:4.0.8
部署方式:单机

1、到官网下载版本redis-4.0.8.tar.gz
2、规划安装目录及数据目录(本次安装在/usr/local/redis/)
3、解压redis-4.0.8.tar.gz到/usr/local/ 重命名redis-4.0.8为redis,并执行make编译安装,
tar  -zxvf redis-4.0.8.tar.gz
mv  redis-4.0.8  redis
cd /usr/local/redis/
make 

注:执行make之前用过yum安装依赖的包(yum install tcl  gcc)
4、编译成功后,编辑redis配置文件
vi  /usr/local/redis/redis.conf 添加如下参数:

protected-mode no
#关闭protected-mode模式,此时外部网络可以直接访问
#开启protected-mode保护模式,需配置bind ip或者设置访问密码

tcp-backlog 511 #在高并发环境下你需要一个高backlog值来避免慢客户端连接问题。注意Linux内核默默地将这个值减小到/proc/sys/net/core/somaxconn的值,所以需要确认增大somaxconn和tcp_max_syn_backlog两个值来达到想要的效果。


timeout 300  #设置客户端连接时的超时时间,单位为秒
tcp-keepalive 60 #在Linux上,这个指定的值(单位:秒)就是发送ACK的时间间隔,这个选项的一个合理值是60秒。



daemonize yes #后台运行
loglevel notice #指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
logfile /usr/local/redis/log/redis.log  #配置 log 文件地址,默认使用标准输出,即打印在命令行终端的窗口上


pidfile /usr/local/redis/pid/redis.pid  #当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件

databases 16 # 设置数据库的数量,默认数据库为0,可以使用SELECT <dbid>命令在连接上指定数据库id
dir /usr/local/redis/data  #指定本地数据库存放目录

maxclients 10000 #连接数
maxmemory 28gb    #设置 redis 能够使用的最大内存
maxmemory-policy noeviction #最大内存策略:如果达到内存限制了,Redis如何选择删除key。你可以在下面五个行为里选:volatile-lru -> 根据LRU算法生成的过期时间来删除。allkeys-lru -> 根据LRU算法删除任何key。volatile-random -> 根据过期设置来随机删除key。 allkeys->random -> 无差别随机删。 volatile-ttl -> 根据最近过期时间来删除(辅以TTL) noeviction -> 谁也不删,直接在写操作时返回错误。



appendonly no #默认情况下,Redis是异步的把数据导出到磁盘上。这种模式在很多应用里已经足够好,但Redis进程出问题或断电时可能造成一段时间的写操作丢失(这取决于配置的save指令)。
appendfilename appendonly.aof #纯累加文件名字
appendfsync everysec #系统调用告诉操作系统把数据写到磁盘上,而不是等更多的数据进入输出缓冲区。everysec每秒写一次。折中方案。

no-appendfsync-on-rewrite no #如果把这个设置成"yes"带来了延迟问题,就保持"no",这是保存持久数据的最安全的方式。
auto-aof-rewrite-percentage 100 #如果AOF日志文件增大到指定百分比,Redis能够通过 BGREWRITEAOF 自动重写AOF日志文件。


auto-aof-rewrite-min-size 64mb #重写日志的最小尺寸,这样避免了达到指定百分比但尺寸仍然很小的情况还要重写。


aof-load-truncated yes  #指redis在恢复时,会忽略最后一条可能存在问题的指令。默认值yes。即在aof写入时,可能存在指令写错的问题(突然断电,写了一半),这种情况下,yes会log并继续,而no会直接恢复失败

hz 10 #Redis调用内部函数来执行许多后台任务,如关闭客户端超时的连接,清除未被请求过的过期Key等等。


lazyfree-lazy-eviction no #是否异步驱逐key,当内存达到上限,分配失败后
lazyfree-lazy-expire no #是否异步进行key过期事件的处理
lazyfree-lazy-server-del yes #del命令是否异步执行删除操作
slave-lazy-flush yes #replica client做全同步的时候,是否异步flush本地db



5、启动redis
cd  /usr/local/redis/
src/redis-server /usr/local/redis/redis.conf &
6、查看redis进程并登陆安装验证是否成功
[root@redis05 ~]# ps -ef|grep redis
root      2836     1  0 Mar21 ?        00:01:15 ./redis-server *:6379  

/usr/local/redis/src/redis-cli 
127.0.0.1:6379> 

6、关闭重启验证redis可以正常启动
正常关闭redis
/usr/local/redis/src/redis-cli  shutdown

启动redis
 /usr/local/redis/src/redis-server /usr/local/redis/redis.conf &

至此redis安装完成

python操作redis数据库

import redis

REDIS_CONFIG={"host":"127.0.0.1","port":6379}
pool=redis.ConnectionPool(**REDIS_CONFIG)
r=redis.StrictRedis(connection_pool=pool)
uid=999
key='你好'.encode('utf-8')
value='完美'.encode('utf-8')
r.hset(uid,key,value)

result=r.hget(uid,key)
print(result.decode('utf-8'))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值