mac安装redis

  1. brew install redis

centos 7 安装redis(centos7+redis6)

  • 获取最新文档版安装包

    1. wget http://download.redis.io/releases/redis-stable.tar.gz
  • 解压redis

    1. tar -zxvf redis-stable.tar.gz
  • 编译安装

    1. # 编译出错时,清出编译生成的文件
    2. make distclean
    3. # 编译安装到指定目录下
    4. make PREFIX=/usr/local/redis-stable install
    5. # 卸载
    6. 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版本号即可。

  1. <a name="MQemt"></a>
  2. ### 进入安装目录
  3. ```javascript
  4. # mac
  5. cd /usr/local/Cellar/redis/6.0.4_1/bin

启动redis服务

  1. # mac
  2. redis-server
  3. # linux指定配置/usr/local/redis-stable/redis.conf
  4. cd /usr/local/redis-stable/bin/
  5. ./redis-server /usr/local/redis-stable/redis.conf

使用redis-cli连接redis服务

  1. # mac 本地redis
  2. redis-cli -h 127.0.0.1 -p 6379
  3. # mac 远程redis
  4. redis-cli -h 127.0.0.1 -p 6379 -a "mypass"
  5. # linux 远程redis
  6. cd /usr/local/redis-stable/src
  7. ./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服务

  1. # mac
  2. redis-cli -h 127.0.0.1 -p 6379
  3. redis 127.0.0.1:6379> SHUTDOWN
  4. # linux
  5. ps -ef | grep redis
  6. kill -9 进程号

查看redis配置

  1. redis 127.0.0.1:6379> CONFIG GET *

设置 Redis 连接密码

  1. redis 127.0.0.1:6379> CONFIG SET requirepass xxxx

redis可视化客户端

可以使用vscode插件Redis(Redis Client For VSCode)

node中使用redis

  1. const Redis = require('ioredis');
  2. /**
  3. * 根据配置实例化Redis
  4. */
  5. const redis = new Redis({
  6. // Redis host
  7. host: '127.0.0.1',
  8. // Redis port
  9. port: 6379,
  10. // 存储key的前缀可以防止key冲突
  11. keyPrefix: 'sand:',
  12. // ipv4
  13. family: 4,
  14. // 哪个库: DB0
  15. db: 0,
  16. // 密码
  17. // password: '',
  18. });
  19. const run = async () => {
  20. // EXPIRE <KEY> <TTL> : 将键的生存时间设为 ttl 秒
  21. // EXPIRE <KEY> <TTL> : 将键的生存时间设为 ttl 秒
  22. // PEXPIRE <KEY> <TTL> :将键的生存时间设为 ttl 毫秒
  23. // EXPIREAT <KEY> <timestamp> :将键的过期时间设为 timestamp 所指定的秒数时间戳
  24. // PEXPIREAT <KEY> <timestamp>: 将键的过期时间设为 timestamp 所指定的毫秒数时间戳.
  25. // 读取test
  26. const testValue = await redis.get('test');
  27. // 设置test的值
  28. const test = await redis.set('test', 'test');
  29. // 设置test key的超时时间单位ms
  30. const test1 = await redis.pexpire('test', '10000');
  31. }
  32. run();

redis的过期策略

redis使用的过期键值删除策略是:惰性删除加上定期删除,两者配合使用。


  • 立即删除

立即删除能保证内存中数据的最大新鲜度,因为它保证过期键值会在过期后马上被删除,其所占用的内存也会随之释放。但是立即删除对cpu是最不友好的。因为删除操作会占用cpu的时间,如果刚好碰上了cpu很忙的时候,比如正在做交集或排序等计算的时候,就会给cpu造成额外的压力。
而且目前redis事件处理器对时间事件的处理方式—无序链表,查找一个key的时间复杂度为O(n),所以并不适合用来处理大量的时间事件。

  • 惰性删除

惰性删除是指,某个键值过期后,此键值不会马上被删除,而是等到下次被使用的时候,才会被检查到过期,此时才能得到删除。所以惰性删除的缺点很明显:浪费内存。dict字典和expires字典都要保存这个键值的信息。
举个例子,对于一些按时间点来更新的数据,比如log日志,过期后在很长的一段时间内可能都得不到访问,这样在这段时间内就要拜拜浪费这么多内存来存log。这对于性能非常依赖于内存大小的redis来说,是比较致命的

  • 定时删除

从上面分析来看,立即删除会短时间内占用大量cpu,惰性删除会在一段时间内浪费内存,所以定时删除是一个折中的办法。定时删除是:每隔一段时间执行一次删除操作,并通过限制删除操作执行的时长和频率,来减少删除操作对cpu的影响。另一方面定时删除也有效的减少了因惰性删除带来的内存浪费。