centos服务端
wget http://download.redis.io/releases/redis-4.0.0.tar.gz
sudo mkdir -p /usr/local/redis
sudo tar zxvf redis-4.0.0.tar.gz -C /usr/local/redis
cd /usr/local/redis/redis-4.0.0
sudo make
# 这样安装,方便搭建集群
sudo make install PREFIX='/usr/local/redis/6379'
# 将配置文件redis.conf中的deamonize yes 以守护进程的方式启动。
sudo cp /usr/local/redis/redis-4.0.0/redis.conf /usr/local/redis/6379/bin/
sudo vim /usr/local/redis/6379/bin/redis.conf
----------------------------
# 以服务形式启动
daemonize yes
#bind 127.0.0.1 注释掉这个,要不然其他服务器无法链接
# 可以不用密码
protected-mode no
# 注释掉bind 127.0.0.1可以使所有的ip访问redis
-------------------------------
# 启动服务端
/usr/local/redis/6379/bin/redis-server /usr/local/redis/6379/bin/redis.conf
# 测试启动客户端
/usr/local/redis/6379/bin/redis-cli
# 关闭服务端,在客户端状态下:
shutdown [save|nosave]
# 开机启动
vim /etc/rc.d/init.d/autostart
------------------------------
# redis
/usr/local/redis/6379/bin/redis-server /usr/local/redis/6379/bin/redis.conf
------------------------------
windows服务端
我们一般不在windows上安装redis,但是这里仍然给出教程。github上的windows服务端下载地址
单次启动:
redis-server.exe redis.windows.conf
注册为windows服务
安装服务
redis-server --service-install redis.windows.conf
启动服务
redis-server --service-start
停止服务
redis-server --service-stop
卸载服务
redis-server --service-uninstall
# 安装服务(可安装多个服务)
redis-server --service-install –service-name 指定名称 –port 10001
redis-server --service-start –service-name 指定名称
Docker
docker pull redis:4.0
# redis本地配置目录
/data/redis4.0
# 默认配置文件
wget https://raw.githubusercontent.com/antirez/redis/4.0/redis.conf -O /data/redis4.0/redis.conf
docker run -d \
--restart=always \
--name redis4.0 \
-p 6379:6379 \
-v /data/redis4.0/redis.conf:/etc/redis/redis.conf \
-v /data/redis4.0/data:/data \
redis:4.0 --appendonly yes --requirepass "Abcdef@123456"
修改宿主机的配置文件
vim /root/redis4.0/redis.conf
第69行注释掉并改为
# bind 127.0.0.1
第88行改为
protected-mode no
第136行改为
daemonize yes
第500行取消注释并改为
requirepass Abcdef@123456
客户端
官网 AnotherRedisDesktopManager,支持mac、linux、windows,下载地址
主界面
远程连接界面
常用命令
通用命令
# 判断key是否存在,存在返回1,不存在返回0
127.0.0.1:6379> EXISTS list
(integer) 0
127.0.0.1:6379> rpush list a b c
(integer) 3
127.0.0.1:6379> EXISTS list
(integer) 1
# 删除key
del key
# 判断key类型, none:不存在,string:字符,list:列表,set:元组,zset:有序集合,hash:哈希
127.0.0.1:6379> type mykey
string
# 搜索key
127.0.0.1:6379> keys my*
1) "mykey"
# 随机key
127.0.0.1:6379> randomkey
"list"
# 清除界面
clear
# key重命名
rename oldname newname:更改 key 的名字,新键如果存在将被覆盖。
127.0.0.1:6379> rename key1 key2
OK
renamenx oldname newname:更改 key 的名字,新键如果存在则更新失败。
127.0.0.1:6379> renamenx key1 key2
(integer) 0
# 返回key总数
127.0.0.1:6379> dbsize
(integer) 2
立即同步
save
flushdb:清空当前数据库中的所有键。
flushall:清空所有数据库中的所有键。
先开启redis 再开启aof,如何保证数据不丢失
redis-cli config set appendonly yes
string
set
# 普通设置,如果没有就创建,有的话就替换
set key value
OK
# 参数nx表示,如果key存在,就失败,可以当做分布式锁
set key value nx
(nil)
# 参数xx表示,如果key不存在,就失败
set key newvalue xx
OK
# 加法器
> set counter 100 # 初始化
> incr counter # +1
> incr counter # +1
> incrby counter 50 # +50 自定义计数
# 一次设置多个值
127.0.0.1:6379> mset a 100 b 200 c 300
OK
get
# 读取一个值
get key
"value"
# 一次读取多个值
127.0.0.1:6379> mget a b c
1) "100"
2) "200"
3) "300"
Lists
写入
127.0.0.1:6379> rpush list a
(integer) 1 # a
127.0.0.1:6379> rpush list b
(integer) 2 # a b
127.0.0.1:6379> rpush list c
(integer) 3 # a b c
127.0.0.1:6379> lpush list first
(integer) 4 # first a b c
# 也可以一次写入多个,也可以从左侧写入lpush
lpush list A B
# first a b c A B
读取
lrange 需要两个索引,0 表示 list 开头第一个,-1 表示 list 的倒数第一个,即最后一个。-2 则是 list 的倒数第二个,以此类推
127.0.0.1:6379> lrange list 0 -1
1) "first"
2) "a"
3) "b"
4) "c"
弹出
可以从左边弹出和从右边弹出
127.0.0.1:6379> rpop list
"c"
127.0.0.1:6379> lpop list
"first"
127.0.0.1:6379> lrange list 0 -1
1) "a"
2) "b"
长度
127.0.0.1:6379> llen list
(integer) 2
Hashes
设置、更新
# 设置多个key
127.0.0.1:6379> hmset user:1000 username antirez birthyear 1977 verified 2
OK
# 设置单个key
127.0.0.1:6379> hset user:1000 username antirezqhhh
(integer) 0
# 数值增加
127.0.0.1:6379> hincrby user:1000 birthyear 10
(integer) 1987
127.0.0.1:6379> hincrby user:1000 birthyear 10
(integer) 1997
读取
# 读取多个指定字段
127.0.0.1:6379> hmget user:1000 username birthyear no-such-field
1) "antirez"
2) "1977"
3) (nil)
# 读取所有
127.0.0.1:6379> hgetall user:1000
1) "username"
2) "antirez"
3) "birthyear"
4) "1977"
5) "verified"
6) "2"
# 读取单个字段
127.0.0.1:6379> hget user:1000 username
"antirez"
Set
新加
127.0.0.1:6379> sadd myset 1 2 3
(integer) 3
查看
127.0.0.1:6379> smembers myset
1) "1"
2) "2"
3) "3"
检查是否存在,成功返回1,失败返回0
127.0.0.1:6379> sismember myset 3
(integer) 1
127.0.0.1:6379> sismember myset 30
(integer) 0
ZSet
是一个没有重复元素的字符串集合,每一个成员都关联了一个权值。使用有序集合你可以完成许多对性能有极端要求的任务,而那些任务使用其它类型的数据库真的是很难完成的。
增加
127.0.0.1:6379> zadd hackers 1940 "Alan Kay"
(integer) 1
127.0.0.1:6379> zadd hackers 1957 "Sophie Wilson"
(integer) 1
127.0.0.1:6379> zadd hackers 1953 "Richard Stallman"
(integer) 1
查看
127.0.0.1:6379> zrange hackers 0 -1
1) "Alan Kay"
2) "Richard Stallman"
3) "Sophie Wilson"
# 使用withscores可以返回权重值
127.0.0.1:6379> zrange hackers 0 -1 withscores
1) "Alan Kay"
2) "1940"
3) "Richard Stallman"
4) "1953"
5) "Sophie Wilson"
6) "1957"
限定 key 生存时间
127.0.0.1:6379> set key some-value
OK
127.0.0.1:6379> expire key 10
(integer) 1
127.0.0.1:6379> get key
"some-value"
127.0.0.1:6379> get key 十秒后
(nil)
# 查询剩余时间
127.0.0.1:6379> set key 100 ex 30 # 设置30秒
OK
127.0.0.1:6379> ttl key
(integer) 26
127.0.0.1:6379> ttl key
(integer) 24
查询redis所有信息
info 命令可以查询 Redis 几乎所有的信息,其命令选项有如下:
server: Redis server 的常规信息
clients: Client 的连接选项
memory: 存储占用相关信息
persistence: RDB and AOF 相关信息
stats: 常规统计
replication: Master/Slave 请求信息
cpu: CPU 占用信息统计
cluster: Redis 集群信息
keyspace: 数据库信息统计
all: 返回所有信息
default: 返回常规设置信息
info server示例
127.0.0.1:6379> info server
# Server
redis_version:4.0.0
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:409d1523d3c443e0
redis_mode:standalone
os:Linux 3.10.0-957.21.3.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:4.8.5
process_id:4317
run_id:d8e305bb419f8957c87dbcbd74c8226c6e21f986
tcp_port:6379
uptime_in_seconds:1400
uptime_in_days:0
hz:10
lru_clock:6098442
executable:/usr/local/redis/6379/bin/redis-server
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 主从复制的过程:
- Slave 与 Master 建立连接,发送 psync 同步命令。
- Master 会启动一个后台进程,将数据库快照保存到文件中,同时 Master 主进程会开始收集新的写命令并缓存。
- 后台完成保存后,就将此文件发送给 Slave。
- Slave 将此文件保存到磁盘上。
Redis 主从复制特点:
- 可以拥有多个 Slave。
- 多个 Slave 可以连接同一个 Master 外,还可以连接到其它的 Slave。(当 Master 宕机后,相连的 Slave 转变为 Master)
- 主从复制不会阻塞 Master,在同步数据时, Master 可以继续处理 Client 请求。
- 提高了系统的可伸缩性。
操作非常简单,只需要配置slave配置文件即可。
# 在slave端修改配置文件
slaveof 192.168.33.130 6379
# 如果master有密码
masterauth <password>
事务
redis 对于事务的处理方式比较特殊,它不会在事务过程中出错时恢复到之前的状态,这在实际应用中导致我们不能依赖 redis 的事务来保证数据一致性。
> multi # 开始事务
> set name a
> set name b
> exec # 开始执行上面的命令
> get name
持久化
- (默认)rdb:
可以修改配置文件设置:
save 900 1:900 秒内如果超过 1 个 key 被修改,则发起快照保存。
save 300 10:300 秒内如果超过 10 个 key 被修改,则快照保存。
快照的关闭,执行命令:
config set save ""
- aof
配置文件:
appendonly yes //启用 aof 持久化方式
# appendfsync always //收到写命令就立即写入磁盘,最慢,但是保证了数据的完整持久化
appendfsync everysec //每秒钟写入磁盘一次,在性能和持久化方面做了很好的折中
# appendfsync no //完全依赖 os,性能最好,持久化没有保证
aof的关闭尽量使用命令。
config set appendonly no
在 redis-cli 的命令中,save 命令是将数据写入磁盘中。
压力速度测试
可以测试get、set、incr、lpush等等,有可能需要添加 -a 密码 -c 客户端数 -n 总请求数
redis-benchmark -h 127.0.0.1 -p 6086 -c 50 -n 10000 -t get
C:\Program Files\Redis>redis-benchmark -h 127.0.0.1 -p 6379 -c 50 -n 10000 -t get
====== GET ======
10000 requests completed in 0.16 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.53% <= 1 milliseconds
100.00% <= 1 milliseconds
62893.08 requests per second