欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

redis-基础使用

程序员文章站 2022-06-19 15:25:53
概览What is Redis?Redis is an open-source, networked, in-memory, key-value data store with optional durability. It is written in ANSI C. The development of Redis is sponsored by Redis Labs today; before that, it was sponsored by Pivotal and VMware. Accordi...

概览

What is Redis?
Redis is an open-source, networked, in-memory, key-value data store with optional durability. It is written in ANSI C. The development of Redis is sponsored by Redis Labs today; before that, it was sponsored by Pivotal and VMware. According to the monthly ranking by DB-Engines.com, Redis is the most popular key-value store. The name Redis means REmote DIctionary Server.

Redis 是一个开源,基于内存的高性能 key-Value 数据库, 可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs 等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过 Redis Sentinel 提供高可用,通过 Redis Cluster 提供自动分区。Redis是一种键值对的数据存储方式,主要存放在内存中,也可以做持久化,就是把内存中的数据刷新到磁盘上。

Redis常用的三个功能有: 数据库,缓存,消息队列。

http://try.redis.io/ Redis在线测试,直接操作Redis数据库。
https://redis.io/  
http://download.redis.io/releases/
http://download.redis.io/releases/redis-4.0.14.tar.gz
http://redisdoc.com/  
http://download.redis.io/releases/redis-4.0.14.tar.gz

软件功能
      1 高速读写
      2 数据类型丰富
      3 支持持久化
      4 多种内存分配及回收策略
      5 支持事物
      6 消息队列、消息订阅
      7 支持高可用
      8 支持分布式分片集群

消息队列产品
      1 rabbit-MQ (OpenStack)
      2 Zero-MQ   (SaltStack)
      3 Kafka     (Java)
      4 Redis     

安装

mkdir -p /xdata; cd /xdata
yum install tcl gcc -y

wget http://fs.as4k.com:7778/chfs/shared/bare-metal/dp265/redis/redis-4.0.14.tar.gz
tar xf redis-4.0.14.tar.gz
cd /xdata/redis-4.0.14

make
make test

cp redis.conf redis.conf.bak
egrep -v "^$|^#" redis.conf.bak > redis.conf

cp sentinel.conf sentinel.conf.bak
egrep -v "^$|^#" sentinel.conf.bak > sentinel.conf

配置

############# 一份参考的配置文件 #######################################

cat /xdata/redis-4.0.14/redis.conf
daemonize yes
protected-mode no
port 6379
logfile "/xdata/redis-4.0.14/redis.log"
dir /xdata/redis-4.0.14
dbfilename dump.rdb
bind 0.0.0.0
#slaveof 192.168.1.52 6379
#从库追加最后一行

############# 常用配置文件简单解释 #######################################

daemonize yes                          #守护进程模式启动
port 6379                              #端口
logfile /etc/redis/6379/redis.log      #日志文件位置
dir /etc/redis/6379                    #持久化数据文件存储位置
dbfilename dump.rdb                    #RDB持久化数据文件名称
bind 0.0.0.0                           #暴露在全网
requirepass  123456                    #连接需要输入密码
slaveof 192.168.1.52 6379              #主从复制的时候加在从库后面

更详细的解释可以参考: 
cat /xdata/redis-4.0.14/redis.conf.bak
cat /xdata/redis-4.0.14/sentinel.conf.bak

启停

################## 启动 #############################################
/xdata/redis-4.0.14/src/redis-server  /xdata/redis-4.0.14/redis.conf

############### 查看日志和状态 #######################################
tailf /xdata/redis-4.0.14/redis.log
/xdata/redis-4.0.14/src/redis-cli -h localhost -p 6379 keys "*"
/xdata/redis-4.0.14/src/redis-cli -h localhost -p 6379 info

############### 停止 ################################################
/xdata/redis-4.0.14/src/redis-cli -h localhost -p 6379 shutdown 或者直接 kill process-id
pgrep redis  | xargs -n 1 kill; sleep 2; ps aux | grep redis

kill还是比较平滑的,kill -9较为粗暴

############### 清空数据 #############################################
pgrep redis  | xargs -n 1 kill; sleep 2; ps aux | grep redis; rm -f  /xdata/redis-4.0.14/dump.rdb

~~~~~~~ INFO: 如果觉得执行命令用绝对路径不方便,可假如到 /etc/profile 环境变量

基础语句

######################### 进入交互模式 ##################################################
/xdata/redis-4.0.14/src/redis-cli -h localhost -p 6379

localhost:6379> help
redis-cli 4.0.14
To get help about Redis commands type:
      "help @<group>" to get a list of commands in <group>
      "help <command>" for help on <command>
      "help <tab>" to get a list of possible help topics
      "quit" to exit

To set redis-cli preferences:
      ":set hints" enable online hints
      ":set nohints" disable online hints
Set your preferences in ~/.redisclirc

redis-cli是一个客户端,可以连接本机或者远端的redis server

################### 客户端连接帮助 ################################################

[root@mgr002 redis-4.0.14]# /xdata/redis-4.0.14/src/redis-cli --help
redis-cli 4.0.14

Usage: redis-cli [OPTIONS] [cmd [arg [arg ...]]]
  -h <hostname>      Server hostname (default: 127.0.0.1).
  -p <port>          Server port (default: 6379).
  -s <socket>        Server socket (overrides hostname and port).
  -a <password>      Password to use when connecting to the server.
  -u <uri>           Server URI.
  -r <repeat>        Execute specified command N times.
  -i <interval>      When -r is used, waits <interval> seconds per command.
                     It is possible to specify sub-second times like -i 0.1.
  -n <db>            Database number.
  -x                 Read last argument from STDIN.
......
  --help             Output this help and exit.
  --version          Output version and exit.

When no command is given, redis-cli starts in interactive mode.
Type "help" in interactive mode for information on available commands
and settings.

################### 查询和设置key ################################################
[root@mgr001 redis-4.0.14]# /xdata/redis-4.0.14/src/redis-cli -h localhost -p 6379
localhost:6379> set name xiaowang
OK
localhost:6379> keys *
1) "name"
localhost:6379> get name
"xiaowang"

################### 未分类 ################################################

127.0.0.1:26380> ping
PONG
redis-cli --version
redis-server --version
redis-cli ping

构建主从复制

192.168.1.52  master node1
192.168.1.45  slave  node2
192.168.1.54  slave  node3

######################### 更改三台机器的redis.conf配置文件 ####################### 

cat /xdata/redis-4.0.14/redis.conf
daemonize yes
protected-mode no
port 6379
logfile "/xdata/redis-4.0.14/redis.log"
dir /xdata/redis-4.0.14
dbfilename dump.rdb
bind 0.0.0.0

slaveof 192.168.1.52 6379
#从库追加最后一行 (node2,node3,机器有上面一行)

######################### 启停 ##########################################
与单机启停一致,分别在3台机器正常启动即可,参考上文

######################### 验证 ##########################################
/xdata/redis-4.0.14/src/redis-cli -h localhost -p 6379 info replication
输出细节见后文

高可用-sentinel

######################### 构建3台机器之间的主从复制 ################################
这是前提条件,参考上文,使用的机器IP地址也参考上文

######################### 3台机器全都使用下面的配置 ##########################################
cat << 'EOF' > /xdata/redis-4.0.14/sentinel.conf
bind 0.0.0.0
port 26379
dir /xdata/redis-4.0.14
logfile "/xdata/redis-4.0.14/redis-sentinel.log"
daemonize yes
protected-mode no
sentinel monitor mymaster 192.168.1.52 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
EOF

配置的详细解释参考 cat /xdata/redis-4.0.14/sentinel.conf.bak
我这里解释1条 sentinel monitor mymaster 192.168.1.52 6379 2
      mymaster 起的名字
      192.168.1.52  master ip地址,本文即node1地址
      6379          master监听的端口
      2             表示如果有2个sentinel认为某个redis实例挂了,则该redis真正挂了

这份配置文件会被sentinel程序动态修改

######################### 启停 ##########################################
/xdata/redis-4.0.14/src/redis-sentinel /xdata/redis-4.0.14/sentinel.conf
tailf /xdata/redis-4.0.14/redis-sentinel.log

kill `pgrep sentinel`
直接用kill,节省学习成本

######################### 验证 ##########################################
/xdata/redis-4.0.14/src/redis-cli -h localhost -p 26379 info Sentinel

######################### 注意事项 ##########################################
验证命令执行后没有输出信息 ? 
嗯,搭建失败,建议把sentinel和redis都kill掉,同时检查redis和sentinel的配置文件,这2份配置文件都有可能被后台自动修改,然后重来

刚开始状态正常,过一会显示down ?
嗯,搭建失败,参考上一问,检查配置,重新搭建 

动态查看和修改配置信息

/xdata/redis-4.0.14/src/redis-cli -h localhost -p 6379 config get "*"
## 
**查看所有设置参数**
127.0.0.1:6379> CONFIG GET *

**查看指定参数**
127.0.0.1:6379> CONFIG GET BIND

**命令行修改配置参数**
127.0.0.1:6379> CONFIG SET requirepass 123
上面的修改是临时生效,不会改动配置文件,重启`redis-server`之后恢复配置文件里的设置。

登陆密码认证配置

bind 127.0.0.1       #只允许本地连接
bind 10.0.0.51       #只允许51机器连接
requirepass  123456  #连接需要输入密码

127.0.0.1:6379> KEYS *
(error) NOAUTH Authentication required.
127.0.0.1:6379> AUTH zls
OK

在命令行直接输入密码
redis-cli -a 123456

冗余详细信息-输出细节

######################### 文件结构 ################################################################################
[root@mgr001 redis-4.0.14]# ls -lrht  --full-time /xdata/redis-4.0.14
total 25M
drwxrwxr-x  8 root root 4.0K 2019-03-19 00:23:22.000000000 +0800 utils
drwxrwxr-x 10 root root 4.0K 2019-03-19 00:23:22.000000000 +0800 tests
-rwxrwxr-x  1 root root  281 2019-03-19 00:23:22.000000000 +0800 runtest-sentinel
-rwxrwxr-x  1 root root  280 2019-03-19 00:23:22.000000000 +0800 runtest-cluster
-rwxrwxr-x  1 root root  271 2019-03-19 00:23:22.000000000 +0800 runtest
-rw-rw-r--  1 root root  21K 2019-03-19 00:23:22.000000000 +0800 README.md
-rw-rw-r--  1 root root 4.2K 2019-03-19 00:23:22.000000000 +0800 MANIFESTO
-rw-rw-r--  1 root root  151 2019-03-19 00:23:22.000000000 +0800 Makefile
-rw-rw-r--  1 root root   11 2019-03-19 00:23:22.000000000 +0800 INSTALL
-rw-rw-r--  1 root root 1.5K 2019-03-19 00:23:22.000000000 +0800 COPYING
-rw-rw-r--  1 root root 1.8K 2019-03-19 00:23:22.000000000 +0800 CONTRIBUTING
-rw-rw-r--  1 root root   53 2019-03-19 00:23:22.000000000 +0800 BUGS
-rw-rw-r--  1 root root 163K 2019-03-19 00:23:22.000000000 +0800 00-RELEASENOTES
drwxrwxr-x  6 root root 4.0K 2020-05-06 16:01:08.427984300 +0800 deps
drwxrwxr-x  3 root root 4.0K 2020-05-06 16:01:57.189775625 +0800 src
-rw-r--r--  1 root root  58K 2020-05-06 16:04:46.612050588 +0800 redis.conf.bak
-rw-r--r--  1 root root 1.4K 2020-05-06 16:41:44.245574570 +0800 dpredis-conf
-rw-r--r--  1 root root 7.8K 2020-05-06 16:51:35.978050310 +0800 sentinel.conf.bak
-rw-rw-r--  1 root root  140 2020-05-08 14:53:36.505241379 +0800 redis.conf
-rw-r--r--  1 root root  176 2020-05-08 15:14:19.080991573 +0800 dump.rdb
-rw-r--r--  1 root root  22K 2020-05-08 15:14:19.115991424 +0800 redis.log
-rw-rw-r--  1 root root  714 2020-05-08 15:16:37.359407056 +0800 sentinel.conf
-rw-r--r--  1 root root  25M 2020-05-08 15:16:37.359407056 +0800 redis-sentinel.log

######################### 主从复制,输出细节 ########################################################################
[root@node1 redis-4.0.14]# /xdata/redis-4.0.14/src/redis-cli -h localhost -p 6379 info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.1.45,port=6379,state=online,offset=405229,lag=0
slave1:ip=192.168.1.54,port=6379,state=online,offset=405090,lag=0
master_replid:c30b7912ec538ad83f9969fae62eeca926482b9f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:405368
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:405368

[root@node2 redis-4.0.14]# /xdata/redis-4.0.14/src/redis-cli -h localhost -p 6379 info replication
# Replication
role:slave
master_host:192.168.1.52
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:405924
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:c30b7912ec538ad83f9969fae62eeca926482b9f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:405924
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:405924

[root@node3 redis-4.0.14]# /xdata/redis-4.0.14/src/redis-cli -h localhost -p 6379 info replication
# Replication
role:slave
master_host:192.168.1.52
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:406202
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:c30b7912ec538ad83f9969fae62eeca926482b9f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:406202
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:406202

######################### 进程信息 ###########################################################################################

[root@mgr003 redis-4.0.14]# ps aux | grep redis
root     14782  0.1  0.0 147464  9688 ?        Ssl  15:14   0:03 /xdata/redis-4.0.14/src/redis-server 0.0.0.0:6379
root     14789  0.1  0.0 145416  7704 ?        Ssl  15:16   0:04 /xdata/redis-4.0.14/src/redis-sentinel 0.0.0.0:26379 [sentinel]

[root@mgr001 redis-4.0.14]# netstat -lntup | grep redis
tcp        0      0 0.0.0.0:26379           0.0.0.0:*               LISTEN      25984/redis-sentine 
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      25971/redis-server  

######################### sentinel高可用,输出细节 #########################################################################
[root@node1 redis-4.0.14]# /xdata/redis-4.0.14/src/redis-cli -h localhost -p 26379 info Sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.1.52:6379,slaves=2,sentinels=3

[root@node2 redis-4.0.14]# /xdata/redis-4.0.14/src/redis-cli -h localhost -p 26379 info Sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.1.52:6379,slaves=2,sentinels=3

[root@node3 redis-4.0.14]# /xdata/redis-4.0.14/src/redis-cli -h localhost -p 26379 info Sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.1.52:6379,slaves=2,sentinels=3

最后一行稍微解释下:
      name=mymaster                我们在配置文件里定义的master name
      status=ok                    正常工作,如果出现down之类的,说明搭建失败,重来
      address=192.168.1.52:6379    master redis地址和端口
      slaves=2                     有2个slave
      sentinels=3                  有3个sentinels实例

持久化

RDB持久化

https://weread.qq.com/web/reader/d0b326605b2833d0b9c2656kc1632f5021fc16a5320f3dc

RDB记录着数据的快照。
RDB持久化优缺点总结
优点:速度快,适合于用作备份,主从复制也是基于RDB持久化功能实现的。
缺点:会有数据丢失、导致服务停止几秒

#编辑配置文件
cat redis.conf
#持久化数据文件存储位置
dir /etc/redis/6379
#rdb持久化数据文件名
dbfilename dump.rdb
#900秒(15分钟)内有1个更改
save 900 1
#300秒(5分钟)内有10个更改
save 300 10
#60秒(1分钟)内有10000个更改
save 60 10000

save 每分钟 次数

save 900 1
save 300 10
save 60  10000

修改配置文件后,需要先停掉redis,再启动,使其生效

此时停掉redis,数据会自动持久化写磁盘,不用等待相应的时间。

生成了持久化文件dump.rdb,这个时候我们关机再重启,数据也还在。这份数据也可以scp到其它机器使用。

AOF持久化

AOF(append only file)只追加文件
AOF记录的所有写操作的命令,相当于记录着过程,在服务启动时通过重新执行这些命令来恢复数据。
AOF核心配置

#修改配置文件
[root@db01 redis]# vim /etc/redis/6379/redis.conf
#是否打开AOF日志功能
appendonly yes/no

#每一条命令都立即同步到AOF
appendfsync always
#每秒写一次
appendfsync everysec
#写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到AOF
appendfsync no


appendonly yes

appendfsync always
appendfsync everysec
appendfsync no
#这几个配置文件只能选一个

appendonly yes
appendfsync always

[root@db01 ~]# cat  /etc/redis/6379/redis.conf 
daemonize yes
port 6379
logfile /etc/redis/6379/redis.log
dir /etc/redis/6379
dbfilename dump.rdb
bind 127.0.0.1
requirepass zls
appendonly yes
appendfsync always

RDB 和 AOF ,我应该用哪一个?

1)一般来说,如果想达到足以媲美 PostgreSQL 的数据安全性, 你应该同时使用两种持久化功能。
2)如果你非常关心你的数据,但仍然可以承受数分钟以内的数据丢失, 那么你可以只使用 RDB 持久化。
3)有很多用户单独使用AOF,但是我们并不鼓励这样,因为时常进行RDB快照非常方便于数据库备份,启动速度也较之快,还避免了AOF引擎的bug。
4)个人感触:在企业中,通常都使用RDB来做持久化,因为一般redis是在做MySQL的缓存,就算缓存数据丢失,真实的数据还是在MySQL中,之所以用缓存是为了速度,性能而考虑,所以还是建议使用RDB持久化,相对来说会好一些,除非专门用redis来做一个key:value的数据库,而且数据很重要,那么可以考虑使用AOF

注意:基于这些原因,将来我们可能会统一AOF和RDB为一种单一的持久化模型(长远计划)。

数据类型

set设置的是字符串类型
可以使用EXISTS命令检查一个键是否存在

127.0.0.1:6379> set test xudao
OK
127.0.0.1:6379> exists test
(integer) 1

**修改key的名字**
RENAME xudao lidao

**查看key的类型**
type key
127.0.0.1:6379> get str
"hello"
127.0.0.1:6379> type str
string

**设置键值的生成时间**
127.0.0.1:6379> EXPIRE lidao 10
(integer) 1
等待10秒后,key自动过期
127.0.0.1:6379> KEYS *
(empty list or set)

set key value [EX seconds] [PX milliseconds] [NX|XX]
                多少秒过期    多少毫秒过期

还可以取消生存时间

**查看还剩多少时间过期**
127.0.0.1:6379> set lidao 2 EX 60
OK
127.0.0.1:6379> ttl lidao
(integer) 55


**删除一个key**
127.0.0.1:6379> set xudao 2
OK
127.0.0.1:6379> del xudao
(integer) 1
127.0.0.1:6379> get xudao
(nil)

## string字符类型

127.0.0.1:6379> set name zls
OK
127.0.0.1:6379> get name
"zls"
127.0.0.1:6379> type name
string

**设置多个key**
127.0.0.1:6379> mset name zls age 18 sex m

**查看多个key的值**
127.0.0.1:6379> mget name age sex
1) "zls"
2) "18"
3) "m"

**有创建并赋值,没有就创建**
127.0.0.1:6379> GETSET xudao 2
(nil)
127.0.0.1:6379> KEYS *
1) "age"
2) "name"
3) "xudao"
4) "sex"
127.0.0.1:6379> get xudao
"2"
127.0.0.1:6379> getset xudao 3
"2"
127.0.0.1:6379> get xudao
"3"

等于一下执行两个操作。

**设置数量递归增加**
默认加1
127.0.0.1:6379> INCR fans
(integer) 1
127.0.0.1:6379> INCR fans
(integer) 2
127.0.0.1:6379> INCR fans
(integer) 3
127.0.0.1:6379> get fans
"3"
指定增加多少
127.0.0.1:6379> INCRBY fans 2
(integer) 5
127.0.0.1:6379> INCRBY fans 5
10

**递减**
默认减1
127.0.0.1:6379> DECR fans 
9

**浮点数增加**
127.0.0.1:6379> INCRBYFLOAT fans 0.6


**字符串追加**
127.0.0.1:6379> get name
"zls"
127.0.0.1:6379> APPEND name bgx
(integer) 6
127.0.0.1:6379> get name
"zlsbgx"

**修改字符串指定位置的值**
127.0.0.1:6379> get name
"zlsbgx"
把第3个字符b改成m
127.0.0.1:6379> SETRANGE name 3 m
(integer) 6
127.0.0.1:6379> get name
"zlsmgx"


**返回字符串的长度**
127.0.0.1:6379> strlen name
(integer) 6

**获取字符串里范围字符**
127.0.0.1:6379> GET name
"zlsmgx"
127.0.0.1:6379> GETRANGE name 0 4
"zlsmg"
127.0.0.1:6379> 

**查看生存时间**
设置的是秒,也可以毫秒查看生存时间
127.0.0.1:6379> EXPIRE color 10
(integer) 1
127.0.0.1:6379> pttl color
(integer) 3048
127.0.0.1:6379> ttl color
(integer) -2

**字符串应用场景示例,粉丝数量增加**
127.0.0.1:6379> INCR fans
(integer) 6
127.0.0.1:6379> INCR fans
(integer) 7
127.0.0.1:6379> DECR fans
(integer) 6
127.0.0.1:6379> DECR fans
(integer) 5
127.0.0.1:6379> DECR fans
(integer) 4
127.0.0.1:6379> INCRBY fans 400000
(integer) 400004

## hash(字典)类型操作

应用场景: 存储部分变更的数据,如用户信息,商品信息等。
最接近表结构的一种类型。

127.0.0.1:6379> hset student name xudao
(integer) 1
127.0.0.1:6379> hget student name
"xudao"

127.0.0.1:6379> hset student name xudao
(integer) 1
127.0.0.1:6379> hset student age 80
(integer) 1
127.0.0.1:6379> hset student sex f
(integer) 1
127.0.0.1:6379> HGETALL student
1) "name"
2) "xudao"
3) "age"
4) "80"
5) "sex"
6) "f"

![](../../../xmd-img/mdimg/2018-12-10-15-23-19.png)

hmset student_zengdao name zengdao age 18 sex nan

**批量设置多个hash值**
127.0.0.1:6379> hmset student_zengdao name zengdao age 18 sex nan
OK
127.0.0.1:6379> HGETALL student_zengdao
1) "name"
2) "zengdao"
3) "age"
4) "18"
5) "sex"
6) "nan"

**删除hash类型的一个字段**
hdel student_lidao name

del是删除整个key


**hash类型某个字段自增**
127.0.0.1:6379> HINCRBY xudao fans 1
(integer) 1
127.0.0.1:6379> HINCRBY xudao fans 1
(integer) 2
127.0.0.1:6379> HINCRBY xudao fans 1
(integer) 3
127.0.0.1:6379> HINCRBY xudao fans 1
(integer) 4
127.0.0.1:6379> HINCRBY xudao fans 20
(integer) 24
127.0.0.1:6379> HINCRBY xudao fans 2
(integer) 26

127.0.0.1:6379> HGETALL car
1) "name"
2) "BMW"
3) "type"
4) "530"
5) "price"
6) "50w"
一个key相当于mysql里的一行数据

增加 -1 即是递减


List(列表)类型操作

应用场景: 消息队列系统

127.0.0.1:6379> LPUSH list zls
(integer) 1
127.0.0.1:6379> LPUSH list bgx
(integer) 2
127.0.0.1:6379> LPUSH list lidao
(integer) 3
127.0.0.1:6379> lpop list
"lidao"
127.0.0.1:6379> lpop list
"bgx"
127.0.0.1:6379> lpop list
"zls"

127.0.0.1:6379> help lpush

  LPUSH key value [value ...]
  summary: Prepend one or multiple values to a list
  since: 1.0.0
  group: list

127.0.0.1:6379> help lpop

  LPOP key
  summary: Remove and get the first element in a list
  since: 1.0.0
  group: list

127.0.0.1:6379> help rpop

  RPOP key
  summary: Remove and get the last element in a list
  since: 1.0.0
  group: list

**往里面追加内容**

127.0.0.1:6379> lpush teacher zls bgx lidao
(integer) 3
127.0.0.1:6379> lpop teacher
"lidao"
127.0.0.1:6379> rpop teacher
"zls"
127.0.0.1:6379> lpushx teacher girl
(integer) 2


127.0.0.1:6379> type teacher
list

**微信朋友圈模拟实现**
127.0.0.1:6379> LINSERT teacher before bgx niutao

127.0.0.1:6379> lpush wechat 'monday,bgx is a pig'
(integer) 1
127.0.0.1:6379> lpush wechat 'tuesday,zls is a nice boy'
(integer) 2
127.0.0.1:6379> lpush wechat 'wednesday,lidao is a good boy'
(integer) 3

127.0.0.1:6379> LRANGE wechat 0 -1
1) "wednesday,lidao is a good boy"
2) "tuesday,zls is a nice boy"
3) "monday,bgx is a pig"

Set(集合)类型操作

该集合不是有序集合。删除是随机的。

**增**
127.0.0.1:6379> sadd zls_fans bgx lidao xidaomimei

**删**
127.0.0.1:6379> sadd zls_fans bgx lidao xidaomimei
(integer) 3
127.0.0.1:6379> spop zls_fans
"xidaomimei"
srem zls_fans bgx

**改**
127.0.0.1:6379> sadd zls_fans bgx lidao xidaomimei
127.0.0.1:6379> sadd bgx_fans fengjie kjdh
讲小迷妹从zls_fans移动bgx_fans

**查**
127.0.0.1:6379> SISMEMBER zls_fans xiaomimei
127.0.0.1:6379> SISMEMBER bgx_fans xiaomimei
查看集合里的所有内容
127.0.0.1:6379> SMEMBERS bgx_fans
1) "fengjie"
2) "kjdh"
127.0.0.1:6379> SMEMBERS zls_fans
1) "lidao"
2) "bgx"
获取集合中元素的数量
127.0.0.1:6379> SCARD zls_fans
(integer) 2

127.0.0.1:6379> SRANDMEMBER bgx_fans
"kjdh"
127.0.0.1:6379> SRANDMEMBER bgx_fans
"fengjie"

**创建三个集合**
127.0.0.1:6379> sadd zls_fans bgx lidao xiaomimei
(integer) 3
127.0.0.1:6379> sadd bgx_fans zls lidao xiaomimei
(integer) 2
127.0.0.1:6379> sadd lidao_fans 0
(integer) 1

**比较三个集合的不同之处**
127.0.0.1:6379> sdiff zls_fans bgx_fans lidao_fans
1) "bgx"

**看三个集合都有的元素**
127.0.0.1:6379> sinter zls_fans bgx_fans
1) "xiaomimei"
2) "lidao"

**看三个集合的并集**
127.0.0.1:6379> SUNION zls_fans bgx_fans lidao_fans
1) "0"
2) "bgx"
3) "kjdh"
4) "xiaomimei"
5) "lidao"
6) "fengjie"
7) "zls"


有序集合

应用场景:

排行榜应用,取TOP N操作

**创建一个有序集合**
127.0.0.1:6379> zadd myzset 2 "two" 3 "three"

**删除有序集合**
127.0.0.1:6379> zrem myzset one two
里面没有one只能删掉一个two

**改**
127.0.0.1:6379> zincrby myzset 2 one
没有这个成员,就会创建。

**查**

127.0.0.1:6379> zrange myzset 0 -1 WITHSCORES
1) "one"
2) "2"
3) "three"
4) "3"
127.0.0.1:6379> zrange myzset 0 -1
1) "one"
2) "three"

查看这里面成员的索引
127.0.0.1:6379> zrank myzset three
(integer) 1

Redis有0~15个库

**获取集合里所有的成员数量**
127.0.0.1:6379> zcard myzset
(integer) 2

**大于等于2小于等于10的分数有哪些**
127.0.0.1:6379> zcount myzset 2 10
(integer) 2
127.0.0.1:6379> zscore myzset three
"3"

127.0.0.1:6379> zadd english_score 100 "zls" 0 "lidao" 10 "bgx"
(integer) 3
127.0.0.1:6379> zrange english_score 0 -1
1) "lidao"
2) "bgx"
3) "zls"
127.0.0.1:6379> zrange english_score 0 -1 WITHSCORES
1) "lidao"
2) "0"
3) "bgx"
4) "10"
5) "zls"
6) "100"

参考资料

Redis Sentinel机制与用法
https://www.cnblogs.com/duanxz/p/4701831.html

Redis Sentinel集群部署
https://blog.csdn.net/sunbocong/article/details/85252071

https://redis.io/topics/quickstart
https://segmentfault.com/a/1190000002680804

本文地址:https://blog.csdn.net/xys2015/article/details/110520692

相关标签: linux