centos服务端

  1. wget http://download.redis.io/releases/redis-4.0.0.tar.gz
  2. sudo mkdir -p /usr/local/redis
  3. sudo tar zxvf redis-4.0.0.tar.gz -C /usr/local/redis
  4. cd /usr/local/redis/redis-4.0.0
  5. sudo make
  6. # 这样安装,方便搭建集群
  7. sudo make install PREFIX='/usr/local/redis/6379'
  8. # 将配置文件redis.conf中的deamonize yes 以守护进程的方式启动。
  9. sudo cp /usr/local/redis/redis-4.0.0/redis.conf /usr/local/redis/6379/bin/
  10. sudo vim /usr/local/redis/6379/bin/redis.conf
  11. ----------------------------
  12. # 以服务形式启动
  13. daemonize yes
  14. #bind 127.0.0.1 注释掉这个,要不然其他服务器无法链接
  15. # 可以不用密码
  16. protected-mode no
  17. # 注释掉bind 127.0.0.1可以使所有的ip访问redis
  18. -------------------------------
  19. # 启动服务端
  20. /usr/local/redis/6379/bin/redis-server /usr/local/redis/6379/bin/redis.conf
  21. # 测试启动客户端
  22. /usr/local/redis/6379/bin/redis-cli
  23. # 关闭服务端,在客户端状态下:
  24. shutdown [save|nosave]
  25. # 开机启动
  26. vim /etc/rc.d/init.d/autostart
  27. ------------------------------
  28. # redis
  29. /usr/local/redis/6379/bin/redis-server /usr/local/redis/6379/bin/redis.conf
  30. ------------------------------

windows服务端

我们一般不在windows上安装redis,但是这里仍然给出教程。github上的windows服务端下载地址

单次启动:

  1. redis-server.exe redis.windows.conf

注册为windows服务

  1. 安装服务
  2. redis-server --service-install redis.windows.conf
  3. 启动服务
  4. redis-server --service-start
  5. 停止服务
  6. redis-server --service-stop
  7. 卸载服务
  8. redis-server --service-uninstall
  9. # 安装服务(可安装多个服务)
  10. redis-server --service-install service-name 指定名称 port 10001
  11. redis-server --service-start service-name 指定名称

Docker

  1. docker pull redis:4.0
  2. # redis本地配置目录
  3. /data/redis4.0
  4. # 默认配置文件
  5. wget https://raw.githubusercontent.com/antirez/redis/4.0/redis.conf -O /data/redis4.0/redis.conf
  6. docker run -d \
  7. --restart=always \
  8. --name redis4.0 \
  9. -p 6379:6379 \
  10. -v /data/redis4.0/redis.conf:/etc/redis/redis.conf \
  11. -v /data/redis4.0/data:/data \
  12. redis:4.0 --appendonly yes --requirepass "Abcdef@123456"
  13. 修改宿主机的配置文件
  14. vim /root/redis4.0/redis.conf
  15. 69行注释掉并改为
  16. # bind 127.0.0.1
  17. 88行改为
  18. protected-mode no
  19. 136行改为
  20. daemonize yes
  21. 500行取消注释并改为
  22. requirepass Abcdef@123456

客户端

官网 AnotherRedisDesktopManager,支持mac、linux、windows,下载地址

主界面

image.png

远程连接界面

image.png

常用命令

参考redis官网教程

通用命令

  1. # 判断key是否存在,存在返回1,不存在返回0
  2. 127.0.0.1:6379> EXISTS list
  3. (integer) 0
  4. 127.0.0.1:6379> rpush list a b c
  5. (integer) 3
  6. 127.0.0.1:6379> EXISTS list
  7. (integer) 1
  8. # 删除key
  9. del key
  10. # 判断key类型, none:不存在,string:字符,list:列表,set:元组,zset:有序集合,hash:哈希
  11. 127.0.0.1:6379> type mykey
  12. string
  13. # 搜索key
  14. 127.0.0.1:6379> keys my*
  15. 1) "mykey"
  16. # 随机key
  17. 127.0.0.1:6379> randomkey
  18. "list"
  19. # 清除界面
  20. clear
  21. # key重命名
  22. rename oldname newname:更改 key 的名字,新键如果存在将被覆盖。
  23. 127.0.0.1:6379> rename key1 key2
  24. OK
  25. renamenx oldname newname:更改 key 的名字,新键如果存在则更新失败。
  26. 127.0.0.1:6379> renamenx key1 key2
  27. (integer) 0
  28. # 返回key总数
  29. 127.0.0.1:6379> dbsize
  30. (integer) 2
  31. 立即同步
  32. save
  33. flushdb:清空当前数据库中的所有键。
  34. flushall:清空所有数据库中的所有键。
  35. 先开启redis 再开启aof,如何保证数据不丢失
  36. redis-cli config set appendonly yes

string

set

  1. # 普通设置,如果没有就创建,有的话就替换
  2. set key value
  3. OK
  4. # 参数nx表示,如果key存在,就失败,可以当做分布式锁
  5. set key value nx
  6. (nil)
  7. # 参数xx表示,如果key不存在,就失败
  8. set key newvalue xx
  9. OK
  10. # 加法器
  11. > set counter 100 # 初始化
  12. > incr counter # +1
  13. > incr counter # +1
  14. > incrby counter 50 # +50 自定义计数
  15. # 一次设置多个值
  16. 127.0.0.1:6379> mset a 100 b 200 c 300
  17. OK

get

  1. # 读取一个值
  2. get key
  3. "value"
  4. # 一次读取多个值
  5. 127.0.0.1:6379> mget a b c
  6. 1) "100"
  7. 2) "200"
  8. 3) "300"

Lists

写入

  1. 127.0.0.1:6379> rpush list a
  2. (integer) 1 # a
  3. 127.0.0.1:6379> rpush list b
  4. (integer) 2 # a b
  5. 127.0.0.1:6379> rpush list c
  6. (integer) 3 # a b c
  7. 127.0.0.1:6379> lpush list first
  8. (integer) 4 # first a b c
  9. # 也可以一次写入多个,也可以从左侧写入lpush
  10. lpush list A B
  11. # first a b c A B

读取

lrange 需要两个索引,0 表示 list 开头第一个,-1 表示 list 的倒数第一个,即最后一个。-2 则是 list 的倒数第二个,以此类推

  1. 127.0.0.1:6379> lrange list 0 -1
  2. 1) "first"
  3. 2) "a"
  4. 3) "b"
  5. 4) "c"

弹出

可以从左边弹出和从右边弹出

  1. 127.0.0.1:6379> rpop list
  2. "c"
  3. 127.0.0.1:6379> lpop list
  4. "first"
  5. 127.0.0.1:6379> lrange list 0 -1
  6. 1) "a"
  7. 2) "b"

长度

  1. 127.0.0.1:6379> llen list
  2. (integer) 2

Hashes

设置、更新

  1. # 设置多个key
  2. 127.0.0.1:6379> hmset user:1000 username antirez birthyear 1977 verified 2
  3. OK
  4. # 设置单个key
  5. 127.0.0.1:6379> hset user:1000 username antirezqhhh
  6. (integer) 0
  7. # 数值增加
  8. 127.0.0.1:6379> hincrby user:1000 birthyear 10
  9. (integer) 1987
  10. 127.0.0.1:6379> hincrby user:1000 birthyear 10
  11. (integer) 1997

读取

  1. # 读取多个指定字段
  2. 127.0.0.1:6379> hmget user:1000 username birthyear no-such-field
  3. 1) "antirez"
  4. 2) "1977"
  5. 3) (nil)
  6. # 读取所有
  7. 127.0.0.1:6379> hgetall user:1000
  8. 1) "username"
  9. 2) "antirez"
  10. 3) "birthyear"
  11. 4) "1977"
  12. 5) "verified"
  13. 6) "2"
  14. # 读取单个字段
  15. 127.0.0.1:6379> hget user:1000 username
  16. "antirez"

Set

新加

  1. 127.0.0.1:6379> sadd myset 1 2 3
  2. (integer) 3

查看

  1. 127.0.0.1:6379> smembers myset
  2. 1) "1"
  3. 2) "2"
  4. 3) "3"

检查是否存在,成功返回1,失败返回0

  1. 127.0.0.1:6379> sismember myset 3
  2. (integer) 1
  3. 127.0.0.1:6379> sismember myset 30
  4. (integer) 0

ZSet

是一个没有重复元素的字符串集合,每一个成员都关联了一个权值。使用有序集合你可以完成许多对性能有极端要求的任务,而那些任务使用其它类型的数据库真的是很难完成的。

增加

  1. 127.0.0.1:6379> zadd hackers 1940 "Alan Kay"
  2. (integer) 1
  3. 127.0.0.1:6379> zadd hackers 1957 "Sophie Wilson"
  4. (integer) 1
  5. 127.0.0.1:6379> zadd hackers 1953 "Richard Stallman"
  6. (integer) 1

查看

  1. 127.0.0.1:6379> zrange hackers 0 -1
  2. 1) "Alan Kay"
  3. 2) "Richard Stallman"
  4. 3) "Sophie Wilson"
  5. # 使用withscores可以返回权重值
  6. 127.0.0.1:6379> zrange hackers 0 -1 withscores
  7. 1) "Alan Kay"
  8. 2) "1940"
  9. 3) "Richard Stallman"
  10. 4) "1953"
  11. 5) "Sophie Wilson"
  12. 6) "1957"

限定 key 生存时间

  1. 127.0.0.1:6379> set key some-value
  2. OK
  3. 127.0.0.1:6379> expire key 10
  4. (integer) 1
  5. 127.0.0.1:6379> get key
  6. "some-value"
  7. 127.0.0.1:6379> get key 十秒后
  8. (nil)
  9. # 查询剩余时间
  10. 127.0.0.1:6379> set key 100 ex 30 # 设置30秒
  11. OK
  12. 127.0.0.1:6379> ttl key
  13. (integer) 26
  14. 127.0.0.1:6379> ttl key
  15. (integer) 24

查询redis所有信息

  1. info 命令可以查询 Redis 几乎所有的信息,其命令选项有如下:
  2. server: Redis server 的常规信息
  3. clients: Client 的连接选项
  4. memory: 存储占用相关信息
  5. persistence: RDB and AOF 相关信息
  6. stats: 常规统计
  7. replication: Master/Slave 请求信息
  8. cpu: CPU 占用信息统计
  9. cluster: Redis 集群信息
  10. keyspace: 数据库信息统计
  11. all: 返回所有信息
  12. default: 返回常规设置信息

info server示例

  1. 127.0.0.1:6379> info server
  2. # Server
  3. redis_version:4.0.0
  4. redis_git_sha1:00000000
  5. redis_git_dirty:0
  6. redis_build_id:409d1523d3c443e0
  7. redis_mode:standalone
  8. os:Linux 3.10.0-957.21.3.el7.x86_64 x86_64
  9. arch_bits:64
  10. multiplexing_api:epoll
  11. atomicvar_api:atomic-builtin
  12. gcc_version:4.8.5
  13. process_id:4317
  14. run_id:d8e305bb419f8957c87dbcbd74c8226c6e21f986
  15. tcp_port:6379
  16. uptime_in_seconds:1400
  17. uptime_in_days:0
  18. hz:10
  19. lru_clock:6098442
  20. executable:/usr/local/redis/6379/bin/redis-server
  21. config_file:/usr/local/redis/6379/bin/redis.conf

高级设置

安全

设置密码的方式有两种:

  • 使用 config set 命令的 requirepass 参数,具体格式为 config set requirepass “password”
  • 在 redis.conf 文件中设置 requirepass 属性,后面为密码。这种方式启动时必须带上conf文件,否则无效。

输入认证的方式也有两种:

  • 登录时可以使用 redis-cli -a password
  • 登录后可以使用 auth password

主从复制

主数据库主要进行写操作,而从数据库负责读操作。读写分离,提高性能。

Redis 主从复制的过程:

  1. Slave 与 Master 建立连接,发送 psync 同步命令。
  2. Master 会启动一个后台进程,将数据库快照保存到文件中,同时 Master 主进程会开始收集新的写命令并缓存。
  3. 后台完成保存后,就将此文件发送给 Slave。
  4. Slave 将此文件保存到磁盘上。

Redis 主从复制特点:

  1. 可以拥有多个 Slave。
  2. 多个 Slave 可以连接同一个 Master 外,还可以连接到其它的 Slave。(当 Master 宕机后,相连的 Slave 转变为 Master)
  3. 主从复制不会阻塞 Master,在同步数据时, Master 可以继续处理 Client 请求。
  4. 提高了系统的可伸缩性。

操作非常简单,只需要配置slave配置文件即可。

  1. # 在slave端修改配置文件
  2. slaveof 192.168.33.130 6379
  3. # 如果master有密码
  4. masterauth <password>

事务

redis 对于事务的处理方式比较特殊,它不会在事务过程中出错时恢复到之前的状态,这在实际应用中导致我们不能依赖 redis 的事务来保证数据一致性。


  1. > multi # 开始事务
  2. > set name a
  3. > set name b
  4. > exec # 开始执行上面的命令
  5. > get name

持久化

  • (默认)rdb:

可以修改配置文件设置:

  1. save 900 1900 秒内如果超过 1 key 被修改,则发起快照保存。
  2. save 300 10300 秒内如果超过 10 key 被修改,则快照保存。

快照的关闭,执行命令:

  1. config set save ""
  • aof

配置文件:

  1. appendonly yes //启用 aof 持久化方式
  2. # appendfsync always //收到写命令就立即写入磁盘,最慢,但是保证了数据的完整持久化
  3. appendfsync everysec //每秒钟写入磁盘一次,在性能和持久化方面做了很好的折中
  4. # appendfsync no //完全依赖 os,性能最好,持久化没有保证

aof的关闭尽量使用命令。

  1. config set appendonly no

在 redis-cli 的命令中,save 命令是将数据写入磁盘中。

压力速度测试

可以测试get、set、incr、lpush等等,有可能需要添加 -a 密码 -c 客户端数 -n 总请求数

  1. redis-benchmark -h 127.0.0.1 -p 6086 -c 50 -n 10000 -t get
  2. C:\Program Files\Redis>redis-benchmark -h 127.0.0.1 -p 6379 -c 50 -n 10000 -t get
  3. ====== GET ======
  4. 10000 requests completed in 0.16 seconds
  5. 50 parallel clients
  6. 3 bytes payload
  7. keep alive: 1
  8. 99.53% <= 1 milliseconds
  9. 100.00% <= 1 milliseconds
  10. 62893.08 requests per second