Redis 应用

Posted woaiyunwei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis 应用相关的知识,希望对你有一定的参考价值。

Redis 应用

一、Redis 应用

1.1.1 Redis 介绍

  1. Redis 介绍
Redis 是一种基于键值对(key value)的 NoSQL(非关系型) 数据库,与很多键值对数据库不同,
redis 中的值可以有    string,hash,list,set,zset,geo 等多种数据结构和算法组成. 因为 Redis
会将所有的数据都放在内存中,所以他的读写性能非常惊人. 不仅如此,Redis  
还可以将内存中的数据利用快照和日志的形式保存到硬盘上 Redis 还提供了键过期,发布订阅,事务,流水线等附加功能. 
  1. Redis 特点
1.速度快  Redis 所有的数据都存放在内存中  Redis 使用 C 语言实现  Redis 使用单线程架构 
2.基于键值对的数据结构服务器  支持5种数据结构:字符串,哈希,列表,集合,有序集合 
3.丰富的功能  提供了键过期功能,可以实现缓存  提供了发布订阅功能,可以实现消息系统  提供了 pipeline 功能,客户端可以将一批命令一次性传到 Redis,减少了网络开销
4.简单稳定  源码很少,3.0 版本以后 5 万行左右.  使用单线程模型法,是的 Redis 服务端处理模型变得简单.  不依赖操作系统的中的类库 
5.客户端语言多   java,php,python,C,C++,Nodejs 等 
6.持久化  RDB 和 AOF 
7.主从复制 
8.高可用和分布式  哨兵  集群 
  1. 应用场景
1.缓存-键过期时间
缓存 session 会话  缓存用户信息,找不到再去 mysql 查,查到然后回写到 redis 
2.排行榜-列表&有序集合  热度排名排行榜  发布时间排行榜 
3.计数器应用-天然支持计数器  帖子浏览数  视频播放次数  商品浏览数 
4.社交网络-集合  踩/赞,粉丝,共同好友/喜好,推送,打标签
5.消息队列系统-发布订阅  配合 elk 实现日志收集 

1.1.2 Redis环境部署

  1. Redis环境部署
#db01 db02 db03 都要操作
[root@db01 ~]# cat >/etc/hosts<<EOF
> 10.4.7.51 db01
> 10.4.7.52 db02
> 10.4.7.53 db03
> EOF
[root@db01 ~]# tail -3 /etc/hosts
10.4.7.51 db01
10.4.7.52 db02
10.4.7.53 db03

创建存放Redis配置的目录
[root@db03 ~]# mkdir -p /data/soft 
[root@db03 ~]# mkdir -p /data/redis_cluster/redis_6379 
[root@db03 ~]# mkdir -p /opt/redis_cluster/redis_6379/{conf,pid,logs} 

下载Redis:
http://download.redis.io/releases/
[root@db03 /data/soft]# wget http://download.redis.io/releases/redis-3.2.9.tar.gz 
--2020-07-08 15:18:51--  http://download.redis.io/releases/redis-3.2.9.tar.gz
Resolving download.redis.io (download.redis.io)... 45.60.125.1
Connecting to download.redis.io (download.redis.io)|45.60.125.1|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1547695 (1.5M) [application/octet-stream]
Saving to: ‘redis-3.2.9.tar.gz’

100%[===========================================================================================>] 1,547,695   7.23KB/s   in 6m 50s 

2020-07-08 15:25:53 (3.69 KB/s) - ‘redis-3.2.9.tar.gz’ saved [1547695/1547695]

[root@db03 /data/soft]# ll
total 1512
-rw-r--r-- 1 root root 1547695 Jun 27 23:51 redis-3.2.9.tar.gz

解压Redis
[root@db03 /data/soft]# tar zxf redis-3.2.9.tar.gz -C /opt/redis_cluster/ 
[root@db03 /data/soft]# ll /opt/redis_cluster/
total 0
drwxrwxr-x 6 root root 309 May 17  2017 redis-3.2.9
drwxr-xr-x 5 root root  41 Jul  8 15:17 redis_6379

make安装Redis
[root@db03 /data/soft]# cd /opt/redis_cluster/redis-3.2.9/
[root@db03 /opt/redis_cluster/redis-3.2.9]#  make && make install #make install 可以在这里执行,也可以cd ./src 下面去执行 make install

做软连接
[root@db03 /opt/redis_cluster/redis-3.2.9]# ln -s /opt/redis_cluster/redis-3.2.9/ /opt/redis_cluster/redis
[root@db03 /opt/redis_cluster/redis-3.2.9]# ll -ld /opt/redis_cluster/redis
lrwxrwxrwx 1 root root 31 Jul  8 15:59 /opt/redis_cluster/redis -> /opt/redis_cluster/redis-3.2.9/

安装完成后的可执行文件
redis-benchmark  
redis-check-aof  
redis-check-rdb  
redis-cli  			#客户端连接工具
redis-sentinel  	#哨兵服务端
redis-server		#服务端
  1. Redis的配置文件
[root@db03 /opt/redis_cluster/redis]# grep "^[a-Z]" /opt/redis_cluster/redis/redis.conf 
bind 127.0.0.1
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

按自己需求配置文件
[root@db03 /opt/redis_cluster/redis]# cp redis.conf{,.bak}
[root@db03 /opt/redis_cluster/redis]# cat > /opt/redis_cluster/redis_6379/conf/redis_6379.conf <<EOF 
### 以守护进程模式启动 
daemonize yes 
### 绑定的主机地址 
bind 10.4.7.51 127.0.0.1 
### 监听端口 
port 6379 
### pid 文件和 log 文件的保存地址 
pidfile /opt/redis_cluster/redis_6379/pid/redis_6379.pid 
logfile /opt/redis_cluster/redis_6379/logs/redis_6379.log 
### 设置数据库的数量,默认数据库为 0 
databases 16 
### 指定本地持久化文件的文件名,默认是 dump.rdb 
dbfilename redis_6379.rdb 
### 本地数据库的目录 
dir /data/redis_cluster/redis_6379 
EOF
  1. 启动和关闭Redis服务
启动:
[root@db03 ~]# redis-server /opt/redis_cluster/redis_6379/conf/redis_6379.conf 
[root@db03 ~]# ss -luntp|grep 63
tcp    LISTEN     0      511    127.0.0.1:6379                  *:*                   users:(("redis-server",pid=7998,fd=5))
tcp    LISTEN     0      511    10.4.7.53:6379                  *:*                   users:(("redis-server",pid=7998,fd=4))

关闭
[root@db03 ~]# redis-cli -h db03 shutdown
[root@db03 ~]# redis-cli -h 10.4.7.53  shutdown

1.1.3 Redis 基本操作命令

Redis 有 5 种数据结构,他们是键值对中的值,对于键来说有一些通用的命令.

  1. 字符串操作
    Redis 并不是简单地 key-value 存储,实际上他是一个数据结构服务器,支持不同类型的值
    Redis Strings 这是最简单的 Redis 类型,如果你只用这种类型,Redis 就像一个持久化的 memcache 服务器 (注:memcache 的数据仅保存在内存中,服务器重启后,数据将丢失.)
    通常用 SET command 和 GET command 来设置和获取字符串值
[root@db03 ~]# redis-cli -h 10.4.7.53 
10.4.7.53:6379> keys *             #查看所有的key
(empty list or set) 
10.4.7.53:6379> set name git       #设置key
OK
10.4.7.53:6379> get name           #检查key
"git"

也可以非交互式的操作
[root@db03 ~]# redis-cli -h 10.4.7.53 set name hub
OK
[root@db03 ~]# redis-cli -h 10.4.7.53 get name 
"hub"

[root@db03 ~]# echo "你努力获得的,都是自己的,不容易忘掉。 星辰和大海都需要门票,诗和远方的路费都很贵。来人间一次,努力成为最好的自 己。人间值得,未来可期." >test.txt
[root@db03 ~]# cat test.txt 
你努力获得的,都是自己的,不容易忘掉。 星辰和大海都需要门票,诗和远方的路费都很贵。来人间一次,努力成为最好的自己。人间值得,未来可期.

[root@db03 ~]# redis-cli -h 10.4.7.53 set txt "$(cat test.txt)"
OK
[root@db03 ~]# redis-cli -h 10.4.7.53 get txt
"xe4xbdxa0xe5x8axaaxe5x8ax9bxe8x8exb7xe5xbex97xe7x9ax84xefxbcx8cxe9x83xbdxe6x98xafxe8x87xaaxe5xb7xb1xe7x9ax84xefxbcx8cxe4xb8x8dxe5xaexb9xe6x98x93xe5xbfx98xe6x8ex89xe3x80x82 xe6x98x9fxe8xbexb0xe5x92x8cxe5xa4xa7xe6xb5xb7xe9x83xbdxe9x9cx80xe8xa6x81xe9x97xa8xe7xa5xa8xefxbcx8cxe8xafx97xe5x92x8cxe8xbfx9cxe6x96xb9xe7x9ax84xe8xb7xafxe8xb4xb9xe9x83xbdxe5xbex88xe8xb4xb5xe3x80x82xe6x9dxa5xe4xbaxbaxe9x97xb4xe4xb8x80xe6xacxa1xefxbcx8cxe5x8axaaxe5x8ax9bxe6x88x90xe4xb8xbaxe6x9cx80xe5xa5xbdxe7x9ax84xe8x87xaaxe5xb7xb1xe3x80x82xe4xbaxbaxe9x97xb4xe5x80xbcxe5xbex97xefxbcx8cxe6x9cxaaxe6x9dxa5xe5x8fxafxe6x9cx9f."
[root@db03 ~]# redis-cli  get txt >rad.log
[root@db03 ~]# cat rad.log 
你努力获得的,都是自己的,不容易忘掉。 星辰和大海都需要门票,诗和远方的路费都很贵。来人间一次,努力成为最好的自己。人间值得,未来可期.

查找所有key (生产中不能使用)
[root@db03 ~]# redis-cli  -h 10.4.7.53 keys "*"
1) "txt"
2) "read"
3) "name"
查找某一个key
[root@db03 ~]# redis-cli  -h 10.4.7.53 keys name
1) "name"

统计可以的数量
[root@db03 ~]# redis-cli  -h 10.4.7.53 dbsize
(integer) 3

查看某一个的类型
[root@db03 ~]# redis-cli  -h 10.4.7.53 type name
string

INCR(加1)命令将字符串值解析成整型.将其加 1,最后结果保存为新的字符串,类似命令: INCRBY(加 n), DECR(减1),DECRBY(减 n)

[root@db03 ~]# redis-cli  -h 10.4.7.53 
10.4.7.53:6379> set num 100
OK
10.4.7.53:6379> get num
"100"
10.4.7.53:6379> type num
string
10.4.7.53:6379> incr num
(integer) 101
10.4.7.53:6379> incrby num 10
(integer) 111
10.4.7.53:6379> get num
"111"

10.4.7.53:6379> get num
"111"
10.4.7.53:6379> decr num
(integer) 110
10.4.7.53:6379> decrby num 10
(integer) 100

MSET 和 MGET 可以一次存储或获取多个 key 对应的值. 

10.4.7.53:6379> mset k2 v2 k3 v3 k4 v4
OK
10.4.7.53:6379> mget k1 name  k2  k3  k4 
1) (nil)
2) "hub"
3) "v2"
4) "v3"
5) "v4"

EXISTS 命令返回 1(存在) 或 0(不存在) 标识给定 key 的值是否存在. 
使用 DEL 命令可以删除 key 对应的值, 
DEL 命令返回 1(存在且被删除) 或 0(不存在没被删除) 标识是被删除(值存在)或者没被删除(key 对应的值不存在). 

查看某一个key存不存在

10.4.7.53:6379> exists k9
(integer) 0
10.4.7.53:6379> exists k2
(integer) 1

删除key
10.4.7.53:6379> del k9
(integer) 0
10.4.7.53:6379> del k2
(integer) 1

可以对 key 设置一个超时时间,当这个时间到达后被删除

查看某个key的过期时间 ttl
10.4.7.53:6379> ttl name
(integer) -1    #- 表示永不过期

给某一个key添加过期时间 expire
10.4.7.53:6379> expire k3 10
(integer) 1             
10.4.7.53:6379> ttl k3
(integer) 4
10.4.7.53:6379> ttl k3
(integer) 3
10.4.7.53:6379> ttl k3
(integer) 2
10.4.7.53:6379> ttl k3
(integer) 2
10.4.7.53:6379> ttl k3
(integer) -2    #表示已经过期并已删除key

10.4.7.53:6379> get k3
(nil)                    #已经不存在key值了,说明k3不存在

PERSIST 命令去除超时时间

10.4.7.53:6379> EXPIRE txt 100
(integer) 1
10.4.7.53:6379> ttl txt
(integer) 94
10.4.7.53:6379> ttl txt
(integer) 92
10.4.7.53:6379> ttl txt
(integer) 91
10.4.7.53:6379> ttl txt
(integer) 89

10.4.7.53:6379> PERSIST txt  #取消txt的超时时间
(integer) 1
10.4.7.53:6379> ttl txt 
(integer) -1                 #-1 txt 永不过期
  1. 列表操作
    LPUSH 命令可向 list 的左边(头部)添加一个新元素
    LPOP 命令可向 list 的右边(尾部)删除一个新元素.
    RPUSH 命令可向 list 的右边(尾部)添加一个新元素.
    RPOP 命令可向 list 的右边(尾部)删除一个新元素.
    最后 LRANGE 可以从 list 中取出一定范围的元素
10.4.7.53:6379> RPUSH list1  A
(integer) 1
10.4.7.53:6379> RPUSH list1  B
(integer) 2
10.4.7.53:6379> RPUSH list1  C
(integer) 3

0.4.7.53:6379> LPUSH list1 top1
(integer) 4
10.4.7.53:6379> LPUSH list1 top2
(integer) 5

10.4.7.53:6379> LRANGE list1 0 -1
1) "top2"
2) "top1"
3) "A"
4) "B"
5) "C"

10.4.7.53:6379> LRANGE list1 0 5
1) "top2"
2) "top1"
3) "A"
4) "B"
5) "C"

10.4.7.53:6379> RPOP list1
"C"
10.4.7.53:6379> LRANGE list1 0 -1
1) "top2"
2) "top1"
3) "A"
4) "B"

10.4.7.53:6379> LPOP list1
"top2"
10.4.7.53:6379> LRANGE list1 0 -1
1) "top1"
2) "A"
3) "B"
  1. 哈希操作
    Hash 看起来就像一个’hash’的样子.由键值对组成
    HMSET 指令设置 hash 中的多个域
    HGET 取回单个域.
    HMGET 取回一系列的值
10.4.7.53:6379> HMSET user:100 username zhansan age 27 job it
OK

10.4.7.53:6379> HMGET user:100 username 
1) "zhansan"
10.4.7.53:6379> HMGET user:100 username age
1) "zhansan"
2) "27"
10.4.7.53:6379> HMGET user:100 username age job
1) "zhansan"
2) "27"
3) "it"

10.4.7.53:6379> HGETALL user:100
1) "username"
2) "zhansan"
3) "age"
4) "27"
5) "job"
6) "it"

10.4.7.53:6379> HMSET user:100 email 446424543@qq.com
OK
10.4.7.53:6379> HGETALL user:100
1) "username"
2) "zhansan"
3) "age"
4) "27"
5) "job"
6) "it"
7) "email"
8) "446424543@qq.com"
  1. 集合操作
    集合是字符串的无序排列,
    SADD 指令把新的元素添加到 set 中
10.4.7.53:6379> SADD set1 1 2 3 5 7
(integer) 5
10.4.7.53:6379> SADD set1 11
(integer) 1
10.4.7.53:6379> SMEMBERS set1
1) "1"
2) "2"
3) "3"
4) "5"
5) "7"
6) "11"

10.4.7.53:6379> SADD set2 3 6 8 5 7
(integer) 5
10.4.7.53:6379> SMEMBERS set2
1) "3"
2) "5"
3) "6"
4) "7"
5) "8"

Sdiff 计算集合的差异成员 
10.4.7.53:6379> SDIFF set1 set2  
1) "1"
2) "2"
3) "11"

10.4.7.53:6379> SADD set3 1 5 12 9
(integer) 4
10.4.7.53:6379> SMEMBERS set3
1) "1"
2) "5"
3) "9"
4) "12"

10.4.7.53:6379> SDIFF set1 set2 set3
1) "2"
2) "11"

Sinter 计算集合的交集 
10.4.7.53:6379> SINTER set1 set2 set3
1) "5"

10.4.7.53:6379> SINTER set1 set2 
1) "3"
2) "5"
3) "7"

10.4.7.53:6379> SINTER set2 set3 
1) "5"

10.4.7.53:6379> SINTER set1 set3 
1) "1"
2) "5"

Srem 用来删除指定的值 
10.4.7.53:6379> SREM set1 1
(integer) 1
10.4.7.53:6379> SMEMBERS set1
1) "2"
2) "3"
3) "5"
4) "7"
5) "11"
10.4.7.53:6379> SREM set1 11
(integer) 1
10.4.7.53:6379> SMEMBERS set1
1) "2"
2) "3"
3) "5"
4) "7"

Sunion 计算集合并集 
10.4.7.53:6379> SUNION set1 set2 set3
1) "1"
2) "2"
3) "3"
4) "5"
5) "6"
6) "7"
7) "8"
8) "9"
9) "12"

1.1.4 Redis 持久化配置

  1. Redis 持久化介绍

可以在指定的时间间隔内生成数据集的 时间点快照(point-in-time snapshot)。
优点:速度快,适合于用做备份,主从复制也是基于 RDB 持久化功能实现的。
缺点:会有数据丢失

  1. 配置Redis持久化
rdb持久化参数配置
dbfilename redis_6379.rdb    #持久化文件名
dir /data/redis_cluster/redis_6379  #本地数据库的目录 
save 900 1                #900 秒(15 分钟)内有 1 个更改 
save 300 10               #300 秒(5 分钟)内有 10 个更改 
save 60 10000             #60 秒内有 10000 个更改   

[root@db03 ~]# redis-server /opt/redis_cluster/redis_6379/conf/redis_6379.conf 
[root@db03 ~]# ss -luntp|grep 63
tcp    LISTEN     0      511    127.0.0.1:6379                  *:*                   users:(("redis-server",pid=1804,fd=5))
tcp    LISTEN     0      511    10.4.7.53:6379                  *:*                   users:(("redis-server",pid=1804,fd=4))

10.4.7.53:6379> BGSAVE
Background saving started

测试:
[root@db03 ~]# for i in {1..10000};do redis-cli -h 10.4.7.53 set k_${i} v_${i}; echo "k_${i} is ok";done
OK
k_1 is ok
OK
k_2 is ok
OK
k_3 is ok
OK
....
。
在配置文件里定义数据目录下就会出现数据文件
[root@db03 ~]# ll /data/redis_cluster/redis_6379/
total 148
-rw-r--r-- 1 root root 147877 Jul  9 13:54 redis_6379.rdb


查看总共插入的数据
[root@db03 ~]# redis-cli -h 10.4.7.53 
10.4.7.53:6379> DBSIZE
(integer) 10001

查看信息
10.4.7.53:6379> info
# Server
redis_version:3.2.9
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:7310ac1fcaf4a5a2
redis_mode:standalone
os:Linux 3.10.0-1062.18.1.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.8.5
process_id:1804
run_id:14be9cdc06d6867fd5ede7b533b0ab86bf5e9438
tcp_port:6379
uptime_in_seconds:785
uptime_in_days:0
hz:10
lru_clock:436233
executable:/root/redis-server
config_file:/opt/redis_cluster/redis_6379/conf/redis_6379.conf

# Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0

# Memory
used_memory:1591944
used_memory_human:1.52M
used_memory_rss:7823360
used_memory_rss_human:7.46M
used_memory_peak:1591944
used_memory_peak_human:1.52M
total_system_memory:2076594176
total_system_memory_human:1.93G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:4.91
mem_allocator:jemalloc-4.0.3

# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1594271376
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok

# Stats
total_connections_received:11616
total_commands_processed:11087
instantaneous_ops_per_sec:0
total_net_input_bytes:420076
total_net_output_bytes:6157330
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:306
migrate_cached_sockets:0

# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

# CPU
used_cpu_sys:1.88
used_cpu_user:1.30
used_cpu_sys_children:0.06
used_cpu_user_children:0.00

# Cluster
cluster_enabled:0

# Keyspace
db0:keys=10001,expires=0,avg_ttl=0


AOF 持久化配置 
记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。  
AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。 
优点:可以最大程度保证数据不丢 
缺点:日志记录量级比较大 
 
appendfilename "appendonly.aof"  #文件名
appendonly yes      #是否打开 aof 日志功能 
appendfsync always   #每 1 个命令,都立即同步到 aof 
appendfsync everysec #每秒写 1 次 
appendfsync no       #写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到 aof.

重启redis:
[root@db03 ~]# !redis-server
redis-server /opt/redis_cluster/redis_6379/conf/redis_6379.conf 

[root@db03 ~]# !ll
ll /data/redis_cluster/redis_6379/
total 1272
-rw-r--r-- 1 root root 757811 Jul  9 14:37 appendonly.aof
-rw-r--r-- 1 root root 317880 Jul  9 14:30 redis_6379.rdb

[root@db03 ~]# redis-cli -h 10.4.7.53
10.4.7.53:6379> keys *
    1) "k_3163"
    2) "k_4212"
    3) "k_19250"
    4) "k_8028"
    5) "k_18115"
....
。
#两种持久方式可以同时开启(并存)
总结:
持久化
rdb 
优点:恢复速度快,空间小
缺点:可能会丢失

aof 
优点:数据安全,不容易丢失
缺点:恢复速度慢,空间大

Redis有个功能可以在线(热更新)某些配置参数(重启失效)
使用CONFIG GET * 可以查看配置参数(包括手动和默认的)
10.4.7.53:6379> CONFIG GET *
  1) "dbfilename"
  2) "redis_6379.rdb"
  3) "requirepass"
  4) ""
  5) "masterauth"
  6) ""
  7) "unixsocket"
  8) ""
  9) "logfile"
 10) "/opt/redis_cluster/redis_6379/logs/redis_6379.log"
 11) "pidfile"
 12) "/opt/redis_cluster/redis_6379/pid/redis_6379.pid"
 13) "slave-announce-ip"
 14) ""
 15) "maxmemory"
 16) "0"
 17) "maxmemory-samples"
 18) "5"
 19) "timeout"
 20) "0"
 21) "auto-aof-rewrite-percentage"
 22) "100"
 23) "auto-aof-rewrite-min-size"
 24) "67108864"
 25) "hash-max-ziplist-entries"
 26) "512"
 27) "hash-max-ziplist-value"
 28) "64"
 29) "list-max-ziplist-size"
 30) "-2"
 31) "list-compress-depth"
 32) "0"
 33) "set-max-intset-entries"
 34) "512"
 35) "zset-max-ziplist-entries"
 36) "128"
 37) "zset-max-ziplist-value"
 38) "64"
 39) "hll-sparse-max-bytes"
 40) "3000"
 41) "lua-time-limit"
 42) "5000"
 43) "slowlog-log-slower-than"
 44) "10000"
 45) "latency-monitor-threshold"
 46) "0"
 47) "slowlog-max-len"
 48) "128"
 49) "port"
 50) "6379"
 51) "tcp-backlog"
 52) "511"
 53) "databases"
 54) "16"
 55) "repl-ping-slave-period"
 56) "10"
 57) "repl-timeout"
 58) "60"
 59) "repl-backlog-size"
 60) "1048576"
 61) "repl-backlog-ttl"
 62) "3600"
 63) "maxclients"
 64) "10000"
 65) "watchdog-period"
 66) "0"
 67) "slave-priority"
 68) "100"
 69) "slave-announce-port"
 70) "0"
 71) "min-slaves-to-write"
 72) "0"
 73) "min-slaves-max-lag"
 74) "10"
 75) "hz"
 76) "10"
 77) "cluster-node-timeout"
 78) "15000"
 79) "cluster-migration-barrier"
 80) "1"
 81) "cluster-slave-validity-factor"
 82) "10"
 83) "repl-diskless-sync-delay"
 84) "5"
 85) "tcp-keepalive"
 86) "300"
 87) "cluster-require-full-coverage"
 88) "yes"
 89) "no-appendfsync-on-rewrite"
 90) "no"
 91) "slave-serve-stale-data"
 92) "yes"
 93) "slave-read-only"
 94) "yes"
 95) "stop-writes-on-bgsave-error"
 96) "yes"
 97) "daemonize"
 98) "yes"
 99) "rdbcompression"
100) "yes"
101) "rdbchecksum"
102) "yes"
103) "activerehashing"
104) "yes"
105) "protected-mode"
106) "yes"
107) "repl-disable-tcp-nodelay"
108) "no"
109) "repl-diskless-sync"
110) "no"
111) "aof-rewrite-incremental-fsync"
112) "yes"
113) "aof-load-truncated"
114) "yes"
115) "maxmemory-policy"
116) "noeviction"
117) "loglevel"
118) "notice"
119) "supervised"
120) "no"
121) "appendfsync"
122) "no"
123) "syslog-facility"
124) "local0"
125) "appendonly"
126) "yes"
127) "dir"
128) "/data/redis_cluster/redis_6379"
129) "save"
130) ""
131) "client-output-buffer-limit"
132) "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60"
133) "unixsocketperm"
134) "0"
135) "slaveof"
136) ""
137) "notify-keyspace-events"
138) ""
139) "bind"
140) "10.4.7.53 127.0.0.1"

10.4.7.53:6379> CONFIG GET save
1) "save"
2) ""
10.4.7.53:6379> CONFIG SET save "60 100 300 10 600 1"
OK
10.4.7.53:6379> CONFIG GET save
1) "save"
2) "60 100 300 10 600 1"

1.1.5 Redis安全认证

  1. Redis安全认证
    redis 默认开启了保护模式,只允许本地回环地址登录并访问数据库。
禁止 protected-mode 
protected-mode yes/no (保护模式,是否只允许本地访问) 

Bind :指定 IP 进行监听 
[root@db03 ~]# vim /opt/redis_cluster/redis_6379/conf/redis_6379.conf 
bind 10.4.7.53  127.0.0.1 

增加 requirepass  {password}  认证
[root@db03 ~]# vim /opt/redis_cluster/redis_6379/conf/redis_6379.conf 
requirepass 123456

第一种验证方法:
[root@db03 ~]# redis-server /opt/redis_cluster/redis_6379/conf/redis_6379.conf 
[root@db03 ~]# redis-cli -h 10.4.7.53
10.4.7.53:6379> keys *
(error) NOAUTH Authentication required. #需要进行身份验证
10.4.7.53:6379> AUTH 123456
OK
10.4.7.53:6379> set name zhangsan
OK
10.4.7.53:6379> get name
"zhangsan"

第二种验证方法:
[root@db03 ~]# redis-cli -h 10.4.7.53 -a 123456
10.4.7.53:6379> hmset user:100 username zhangsan age 27 job it
OK
10.4.7.53:6379> hmget user:100 username
1) "zhangsan"

















以上是关于Redis 应用的主要内容,如果未能解决你的问题,请参考以下文章

如何利用redis来进行分布式集群系统的限流设计

jedis连接redis

jQuery应用 代码片段

如何使用 Swift 使用此代码片段为 iOS 应用程序初始化 SDK?

redis存储session配制方法

Android获取各个应用程序的缓存文件代码小片段(使用AIDL)