mac安装redis
brew install redis
centos 7 安装redis(centos7+redis6)
获取最新文档版安装包
wget http://download.redis.io/releases/redis-stable.tar.gz
解压redis
tar -zxvf redis-stable.tar.gz
编译安装
# 编译出错时,清出编译生成的文件make distclean# 编译安装到指定目录下make PREFIX=/usr/local/redis-stable install# 卸载make uninstall
如果出现编译失败,有可能是gcc版本太低可以先升级gcc版本,gcc版本最低要求5.3及以上 ```javascript
查看gcc版本是否在5.3以上,centos7.6默认安装4.8.5
gcc -v
升级gcc到5.3及以上,如下:
升级到gcc 9.3:
yum -y install centos-release-scl yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils scl enable devtoolset-9 bash
需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。
如果要长期使用gcc 9.3的话:
echo “source /opt/rh/devtoolset-9/enable” >>/etc/profile
这样退出shell重新打开就是新版的gcc了
以下其他版本同理,修改devtoolset版本号即可。
<a name="MQemt"></a>### 进入安装目录```javascript# maccd /usr/local/Cellar/redis/6.0.4_1/bin
启动redis服务
# macredis-server# linux指定配置/usr/local/redis-stable/redis.confcd /usr/local/redis-stable/bin/./redis-server /usr/local/redis-stable/redis.conf
使用redis-cli连接redis服务
# mac 本地redisredis-cli -h 127.0.0.1 -p 6379# mac 远程redisredis-cli -h 127.0.0.1 -p 6379 -a "mypass"# linux 远程rediscd /usr/local/redis-stable/src./redis-cli -h 127.0.0.1 -p 6379 -a "mypass"
47服务器的redis密码和mysql密码一致
设置redis以后台进程方式启动:
修改/usr/local/redis-stable/redis.conf中daemonize no 将值改为yes 保存退出
关闭redis服务
# macredis-cli -h 127.0.0.1 -p 6379redis 127.0.0.1:6379> SHUTDOWN# linuxps -ef | grep rediskill -9 进程号
查看redis配置
redis 127.0.0.1:6379> CONFIG GET *
设置 Redis 连接密码
redis 127.0.0.1:6379> CONFIG SET requirepass xxxx
redis可视化客户端
可以使用vscode插件Redis(Redis Client For VSCode)
node中使用redis
const Redis = require('ioredis');/*** 根据配置实例化Redis*/const redis = new Redis({// Redis hosthost: '127.0.0.1',// Redis portport: 6379,// 存储key的前缀可以防止key冲突keyPrefix: 'sand:',// ipv4family: 4,// 哪个库: DB0db: 0,// 密码// password: '',});const run = async () => {// EXPIRE <KEY> <TTL> : 将键的生存时间设为 ttl 秒// EXPIRE <KEY> <TTL> : 将键的生存时间设为 ttl 秒// PEXPIRE <KEY> <TTL> :将键的生存时间设为 ttl 毫秒// EXPIREAT <KEY> <timestamp> :将键的过期时间设为 timestamp 所指定的秒数时间戳// PEXPIREAT <KEY> <timestamp>: 将键的过期时间设为 timestamp 所指定的毫秒数时间戳.// 读取testconst testValue = await redis.get('test');// 设置test的值const test = await redis.set('test', 'test');// 设置test key的超时时间单位msconst test1 = await redis.pexpire('test', '10000');}run();
redis的过期策略
redis使用的过期键值删除策略是:惰性删除加上定期删除,两者配合使用。
- 立即删除
立即删除能保证内存中数据的最大新鲜度,因为它保证过期键值会在过期后马上被删除,其所占用的内存也会随之释放。但是立即删除对cpu是最不友好的。因为删除操作会占用cpu的时间,如果刚好碰上了cpu很忙的时候,比如正在做交集或排序等计算的时候,就会给cpu造成额外的压力。
而且目前redis事件处理器对时间事件的处理方式—无序链表,查找一个key的时间复杂度为O(n),所以并不适合用来处理大量的时间事件。
- 惰性删除
惰性删除是指,某个键值过期后,此键值不会马上被删除,而是等到下次被使用的时候,才会被检查到过期,此时才能得到删除。所以惰性删除的缺点很明显:浪费内存。dict字典和expires字典都要保存这个键值的信息。
举个例子,对于一些按时间点来更新的数据,比如log日志,过期后在很长的一段时间内可能都得不到访问,这样在这段时间内就要拜拜浪费这么多内存来存log。这对于性能非常依赖于内存大小的redis来说,是比较致命的。
- 定时删除
从上面分析来看,立即删除会短时间内占用大量cpu,惰性删除会在一段时间内浪费内存,所以定时删除是一个折中的办法。定时删除是:每隔一段时间执行一次删除操作,并通过限制删除操作执行的时长和频率,来减少删除操作对cpu的影响。另一方面定时删除也有效的减少了因惰性删除带来的内存浪费。
