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
下一篇: mongoDB基础学习