centos服务端
wget http://download.redis.io/releases/redis-4.0.0.tar.gzsudo mkdir -p /usr/local/redissudo tar zxvf redis-4.0.0.tar.gz -C /usr/local/rediscd /usr/local/redis/redis-4.0.0sudo 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 10001redis-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.confdocker 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,不存在返回0127.0.0.1:6379> EXISTS list(integer) 0127.0.0.1:6379> rpush list a b c(integer) 3127.0.0.1:6379> EXISTS list(integer) 1# 删除keydel key# 判断key类型, none:不存在,string:字符,list:列表,set:元组,zset:有序集合,hash:哈希127.0.0.1:6379> type mykeystring# 搜索key127.0.0.1:6379> keys my*1) "mykey"# 随机key127.0.0.1:6379> randomkey"list"# 清除界面clear# key重命名rename oldname newname:更改 key 的名字,新键如果存在将被覆盖。127.0.0.1:6379> rename key1 key2OKrenamenx oldname newname:更改 key 的名字,新键如果存在则更新失败。127.0.0.1:6379> renamenx key1 key2(integer) 0# 返回key总数127.0.0.1:6379> dbsize(integer) 2立即同步saveflushdb:清空当前数据库中的所有键。flushall:清空所有数据库中的所有键。先开启redis 再开启aof,如何保证数据不丢失redis-cli config set appendonly yes
string
set
# 普通设置,如果没有就创建,有的话就替换set key valueOK# 参数nx表示,如果key存在,就失败,可以当做分布式锁set key value nx(nil)# 参数xx表示,如果key不存在,就失败set key newvalue xxOK# 加法器> set counter 100 # 初始化> incr counter # +1> incr counter # +1> incrby counter 50 # +50 自定义计数# 一次设置多个值127.0.0.1:6379> mset a 100 b 200 c 300OK
get
# 读取一个值get key"value"# 一次读取多个值127.0.0.1:6379> mget a b c1) "100"2) "200"3) "300"
Lists
写入
127.0.0.1:6379> rpush list a(integer) 1 # a127.0.0.1:6379> rpush list b(integer) 2 # a b127.0.0.1:6379> rpush list c(integer) 3 # a b c127.0.0.1:6379> lpush list first(integer) 4 # first a b c# 也可以一次写入多个,也可以从左侧写入lpushlpush list A B# first a b c A B
读取
lrange 需要两个索引,0 表示 list 开头第一个,-1 表示 list 的倒数第一个,即最后一个。-2 则是 list 的倒数第二个,以此类推
127.0.0.1:6379> lrange list 0 -11) "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 -11) "a"2) "b"
长度
127.0.0.1:6379> llen list(integer) 2
Hashes
设置、更新
# 设置多个key127.0.0.1:6379> hmset user:1000 username antirez birthyear 1977 verified 2OK# 设置单个key127.0.0.1:6379> hset user:1000 username antirezqhhh(integer) 0# 数值增加127.0.0.1:6379> hincrby user:1000 birthyear 10(integer) 1987127.0.0.1:6379> hincrby user:1000 birthyear 10(integer) 1997
读取
# 读取多个指定字段127.0.0.1:6379> hmget user:1000 username birthyear no-such-field1) "antirez"2) "1977"3) (nil)# 读取所有127.0.0.1:6379> hgetall user:10001) "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 myset1) "1"2) "2"3) "3"
检查是否存在,成功返回1,失败返回0
127.0.0.1:6379> sismember myset 3(integer) 1127.0.0.1:6379> sismember myset 30(integer) 0
ZSet
是一个没有重复元素的字符串集合,每一个成员都关联了一个权值。使用有序集合你可以完成许多对性能有极端要求的任务,而那些任务使用其它类型的数据库真的是很难完成的。
增加
127.0.0.1:6379> zadd hackers 1940 "Alan Kay"(integer) 1127.0.0.1:6379> zadd hackers 1957 "Sophie Wilson"(integer) 1127.0.0.1:6379> zadd hackers 1953 "Richard Stallman"(integer) 1
查看
127.0.0.1:6379> zrange hackers 0 -11) "Alan Kay"2) "Richard Stallman"3) "Sophie Wilson"# 使用withscores可以返回权重值127.0.0.1:6379> zrange hackers 0 -1 withscores1) "Alan Kay"2) "1940"3) "Richard Stallman"4) "1953"5) "Sophie Wilson"6) "1957"
限定 key 生存时间
127.0.0.1:6379> set key some-valueOK127.0.0.1:6379> expire key 10(integer) 1127.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秒OK127.0.0.1:6379> ttl key(integer) 26127.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# Serverredis_version:4.0.0redis_git_sha1:00000000redis_git_dirty:0redis_build_id:409d1523d3c443e0redis_mode:standaloneos:Linux 3.10.0-957.21.3.el7.x86_64 x86_64arch_bits:64multiplexing_api:epollatomicvar_api:atomic-builtingcc_version:4.8.5process_id:4317run_id:d8e305bb419f8957c87dbcbd74c8226c6e21f986tcp_port:6379uptime_in_seconds:1400uptime_in_days:0hz:10lru_clock:6098442executable:/usr/local/redis/6379/bin/redis-serverconfig_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 getC:\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 seconds50 parallel clients3 bytes payloadkeep alive: 199.53% <= 1 milliseconds100.00% <= 1 milliseconds62893.08 requests per second
