我的编程空间,编程开发者的网络收藏夹
学习永远不晚

redis部署及各种数据类型使用命令详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

redis部署及各种数据类型使用命令详解

编译安装redis

开始部署

[root@mcw01 ~]$ ls
anaconda-ks.cfg  mongodb-linux-x86_64-3.2.8.tgz
[root@mcw01 ~]$ wget http://download.redis.io/releases/redis-4.0.10.tar.gz
--2022-03-05 18:27:02--  http://download.redis.io/releases/redis-4.0.10.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: 1738465 (1.7M) [application/octet-stream]

Saving to: ‘redis-4.0.10.tar.gz'

100%[====================>] 1,738,465   63.4KB/s   in 25s    

2022-03-05 18:27:27 (68.2 KB/s) - ‘redis-4.0.10.tar.gz' saved [1738465/1738465]

anaconda-ks.cfg  mongodb-linux-x86_64-3.2.8.tgz  redis-4.0.10.tar.gz
[root@mcw01 ~]$ tar xf redis-4.0.10.tar.gz 
anaconda-ks.cfg  mongodb-linux-x86_64-3.2.8.tgz  redis-4.0.10  redis-4.0.10.tar.gz
[root@mcw01 ~]$ cd redis-4.0.10/
[root@mcw01 ~/redis-4.0.10]$ ls  #有makefile文件,就不需要./configure配置
00-RELEASENOTES  COPYING  Makefile   redis.conf       runtest-sentinel  tests
BUGS             deps     MANIFESTO  runtest          sentinel.conf     utils
CONTRIBUTING     INSTALL  README.md  runtest-cluster  class="lazy" data-src
[root@mcw01 ~/redis-4.0.10]$ make

报错 gcc命令没有找到:

cd hiredis && make static
make[3]: Entering directory `/root/redis-4.0.10/deps/hiredis'
gcc -std=c99 -pedantic -c -O3 -fPIC  -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb  net.c
make[3]: gcc: Command not found
make[3]: *** [net.o] Error 127
make[3]: Leaving directory `/root/redis-4.0.10/deps/hiredis'
make[2]: *** [hiredis] Error 2
make[2]: Leaving directory `/root/redis-4.0.10/deps'
make[1]: [persist-settings] Error 2 (ignored)
    CC adlist.o
/bin/sh: cc: command not found
make[1]: *** [adlist.o] Error 127
make[1]: Leaving directory `/root/redis-4.0.10/class="lazy" data-src'
make: *** [all] Error 2

#解决编译安装所需的依赖环境继续部署

um install gcc patch libffi-devel python-devel  zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y
然后重新执行:
[root@mcw01 ~/redis-4.0.10]$ make  #发现报错没有某个目录或文件。在这之前编译失败了,目录被改变了部分,所以直接删除重新解压,然后make编译
......
Hint: It's a good idea to run 'make test' ;)
make[1]: Leaving directory `/root/redis-4.0.10/class="lazy" data-src'
[root@mcw01 ~/redis-4.0.10]$ ls
00-RELEASENOTES  COPYING  Makefile   redis.conf       runtest-sentinel  tests
BUGS             deps     MANIFESTO  runtest          sentinel.conf     utils
CONTRIBUTING     INSTALL  README.md  runtest-cluster  class="lazy" data-src
[root@mcw01 ~/redis-4.0.10]$ make install 
cd class="lazy" data-src && make install
make[1]: Entering directory `/root/redis-4.0.10/class="lazy" data-src'
    CC Makefile.dep
    INSTALL install
[root@mcw01 ~/redis-4.0.10]$ 
[root@mcw01 ~/redis-4.0.10]$ redis-c   #当编译好之后,就可以命令补全,也就是已经配置好环境变量了
redis-check-aof  redis-check-rdb  redis-cli        
[root@mcw01 ~/redis-4.0.10]$ which redis-server  #默认编译安装到/usr/local下去了
/usr/local/bin/redis-server
[root@mcw01 ~/redis-4.0.10]$

redis服务端运行和客户端连接

[root@mcw01 ~]$ redis-server  #安装好之后,直接运行这个命令
24270:C 05 Mar 18:43:08.857 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
24270:C 05 Mar 18:43:08.857 # Redis version=4.0.10, bits=64, commit=00000000, modified=0, pid=24270, just started
24270:C 05 Mar 18:43:08.857 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 4.0.10 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 24270
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |    `-._`-._        _.-'_.-'    |                                  
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               
24270:M 05 Mar 18:43:08.880 # Server initialized
24270:M 05 Mar 18:43:08.880 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
24270:M 05 Mar 18:43:08.880 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
24270:M 05 Mar 18:43:08.880 * Ready to accept connections
客户端连接:
[root@mcw01 ~]$ redis-cli 127.0.0.1 6379  ^C #我再开一个窗口,默认连接的ip 端口
[root@mcw01 ~]$ redis-cli  #连上之后,ping命令,返回pong,说明连接成功的
127.0.0.1:6379> ping
PONG
127.0.0.1:6379>

redis配置

[root@mcw01 ~]$ ln -s redis-4.0.10  redis 
[root@mcw01 ~]$ ls
anaconda-ks.cfg  dump.rdb  mongodb-linux-x86_64-3.2.8.tgz  redis  redis-4.0.10  redis-4.0.10.tar.gz
[root@mcw01 ~]$ ls redis
00-RELEASENOTES  COPYING  Makefile   redis.conf       runtest-sentinel  tests
BUGS             deps     MANIFESTO  runtest          sentinel.conf     utils
CONTRIBUTING     INSTALL  README.md  runtest-cluster  class="lazy" data-src
[root@mcw01 ~]$ cd redis
[root@mcw01 ~/redis]$ egrep -v "^#|^$" redis.conf >mcwRedis.conf
[root@mcw01 ~/redis]$ cat mcwRedis.conf 
bind 127.0.0.1   
protected-mode yes  #保护模式开启,并且绑定ip是本机,应该是不支持远程访问,只支持本机访问。
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 16
always-show-logo yes
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
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
slave-lazy-flush no
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
aof-use-rdb-preamble no
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@mcw01 ~/redis]$

redis简单配置并启动


[root@mcw01 ~/redis]$ cat mcwRedis.conf 
bind 10.0.0.11
protected-mode yes
port 6379
requirepass mcw123 #配置认证密码
daemonize yes #后台守护进程的方式开启
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
[root@mcw01 ~/redis]$ 
[root@mcw01 ~/redis]$ ls  
00-RELEASENOTES  COPYING  Makefile       README.md   runtest-cluster   class="lazy" data-src
BUGS             deps     MANIFESTO      redis.conf  runtest-sentinel  tests
CONTRIBUTING     INSTALL  mcwRedis.conf  runtest     sentinel.conf     utils
[root@mcw01 ~/redis]$ redis-server mcwRedis.conf  #指定配置文件启动。这应该是后面有注释导致的吧,去掉注释
*** FATAL CONFIG FILE ERROR ***
Reading the configuration file, at line 4
>>> 'requirepass mcw123 #配置认证密码'
Bad directive or wrong number of arguments
去掉注释,然后成功启动,这里不能在配置后面加注释,容易出错
[root@mcw01 ~/redis]$ vim mcwRedis.conf 
requirepass mcw123
daemonize yes
[root@mcw01 ~/redis]$ redis-server mcwRedis.conf 
24391:C 05 Mar 19:10:38.749 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
24391:C 05 Mar 19:10:38.749 # Redis version=4.0.10, bits=64, commit=00000000, modified=0, pid=24391, just started
24391:C 05 Mar 19:10:38.749 # Configuration loaded
[root@mcw01 ~/redis]$ netstat -lntup|grep redis #成功启动了
tcp        0      0 10.0.0.11:6379          0.0.0.0:*               LISTEN      24392/redis-server  
[root@mcw01 ~/redis]$ redis-cli  #现在直接这么连接就不行了
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected> 
[root@mcw01 ~/redis]$ redis-cli  -h 10.0.0.11 -p 6379   #指定ip端口连接
10.0.0.11:6379> ping
(error) NOAUTH Authentication required.
10.0.0.11:6379> auth mcw123
OK
10.0.0.11:6379> ping  #认证之后就可以正常执行命令了
PONG
10.0.0.11:6379>

set、get命令

10.0.0.11:6379> set name mcw
OK
10.0.0.11:6379> get name
"mcw"
10.0.0.11:6379> set age  18  
OK
10.0.0.11:6379> get age  #它将值改为字符串类型的了
"18"
10.0.0.11:6379>

简单配置文件介绍

bind 192.168.182.130  #绑定服务端地址 
protected-mode yes    #安全模式 
port 6800        #端口 
requirepass  haohaio                #密码                                                                       
daemonize yes    #后台运行 
pidfile /var/run/redis_6379.pid    #进程id文件
loglevel notice        #日志等级
logfile ""

redis基础数据类型

redis是一种高级的key:value存储系统,其中value支持五种数据类型
    字符串(strings)
    散列(hashes)
    列表(lists)
    集合(sets)
    有序集合(sorted sets)  

redis命令

redis简单命令

keys * 查看所有key
type key 查看key类型
expire key seconds 过期时间
ttl key 查看key过期剩余时间 -2表示key已经不存在了
persist 取消key的过期时间 -1表示key存在,没有过期时间

exists key 判断key存在 存在返回1 否则0
del keys 删除key 可以删除多个
dbsize 计算key的数量
flushdb #清除redis所有key,慎用
flushdb #清除redis所有key,慎用
flushdb #清除redis所有key,慎用

keys * 
10.0.0.11:6379> keys *
1) "age"
2) "name"
10.0.0.11:6379> set gender man
OK
1) "gender"
2) "age"
3) "name"
10.0.0.11:6379> 
keys *         查看所有key
type key      查看key类型
添加一个列表,查看key类型,是列表类型
10.0.0.11:6379> type name
string
10.0.0.11:6379> LPUSH paidui1 xiaoma mcw
(integer) 2
10.0.0.11:6379> keys * 
1) "paidui1"
2) "gender"
3) "age"
4) "name"
10.0.0.11:6379> type paidui1
list
expire key seconds    过期时间
ttl key     查看key过期剩余时间        -2表示key已经不存在了
给已有的paidui1设置一个过期时间多少秒,然后ttl  key可以查看过期时间,当-2时就已经过期了,过期了就已经被移除了
10.0.0.11:6379> EXPIRE paidui1 10
(integer) 1
10.0.0.11:6379> ttl paidui1
(integer) -2
persist     取消key的过期时间   -1表示key存在,没有过期时间
比如下面,将name设置50秒过期,当要取消name的过期时间,执行命令后,ttl值变成-1,就不会出现过期删除的情况了
10.0.0.11:6379> EXPIRE name 50
10.0.0.11:6379> ttl name
(integer) 22
(integer) 19
10.0.0.11:6379> PERSIST name
(integer) -1
exists key     判断key存在    存在返回1    否则0
10.0.0.11:6379> exists name
10.0.0.11:6379> exists mcw
(integer) 0
del keys     删除key    可以删除多个
4) "myname"
10.0.0.11:6379> del myname
dbsize         计算key的数量
10.0.0.11:6379> dbsize
(integer) 3
flushdb  #清除redis所有key,慎用
10.0.0.11:6379> flushdb
(empty list or set)
10.0.0.11:6379>

字符串类型命令

redis数据类型1,字符串类型,通过set命令,设置字符串类型的key
    strings类型
    set   设置key
    get   获取key
    append  追加string
    mset   设置多个键值对
    mget   获取多个键值对
    del  删除key
    incr  递增+1
    decr  递减-1
set   设置key
get   获取key
append  追加string
10.0.0.11:6379> set "name" "mcw"
OK
10.0.0.11:6379> get name
"mcw"
10.0.0.11:6379> append "name" "Haoren"
(integer) 9
10.0.0.11:6379> get name
"mcwHaoren"
10.0.0.11:6379> 
mset   设置多个键值对
mget   获取多个键值对
10.0.0.11:6379> mset name2 "xiaoma" "name3" xiaohong
OK
10.0.0.11:6379> keys *
1) "name2"
2) "name"
3) "name3"
10.0.0.11:6379> get name2
"xiaoma"
10.0.0.11:6379> get name3
"xiaohong"
10.0.0.11:6379> 
10.0.0.11:6379> mget name name2 name3
1) "mcwHaoren"
2) "xiaoma"
3) "xiaohong"
10.0.0.11:6379> 
del  删除key
10.0.0.11:6379> keys *
1) "name2"
2) "name"
3) "name3"
10.0.0.11:6379> del name
(integer) 1
10.0.0.11:6379> del name2 name3
(integer) 2
10.0.0.11:6379> keys *
(empty list or set)
10.0.0.11:6379> 
incr  递增+1
decr  递减-1
相当于把字符串转换为数字,计算后结果再改成字符串。
还可以减为负值
10.0.0.11:6379> keys *
(empty list or set)
10.0.0.11:6379> set "dian zan" 0
OK
10.0.0.11:6379> get "dian zan"
"0"
10.0.0.11:6379> incr "dian zan"
(integer) 1
10.0.0.11:6379> incr "dian zan"
(integer) 2
10.0.0.11:6379> get "dian zan"
"2"
10.0.0.11:6379> incr "dian zan"
(integer) 3
10.0.0.11:6379> get "dian zan"
"3"
10.0.0.11:6379> decr "dian zan"
(integer) 2
10.0.0.11:6379> get "dian zan"
"2"
10.0.0.11:6379> 
10.0.0.11:6379> keys *
1) "dian zan"
10.0.0.11:6379> 
10.0.0.11:6379> get "dian zan"
"2"
10.0.0.11:6379> decr "dian zan"
(integer) 1
10.0.0.11:6379> decr "dian zan"
(integer) 0
10.0.0.11:6379> decr "dian zan"
(integer) -1
10.0.0.11:6379> decr "dian zan"
(integer) -2
10.0.0.11:6379> decr "dian zan"
(integer) -3

list类型,双向队列

lpush 从列表左边插
rpush 从列表右边插
lrange 获取一定长度的元素 lrange key start stop
ltrim 截取一定长度列表
lpop 删除最左边一个元素
rpop 删除最右边一个元素
lpushx/rpushx key存在则添加值,不存在不处理

lpush         从列表左边插
从左边插入,再从左边获取,先插入的在里面后取出,后插入的在左边先取出
10.0.0.11:6379> keys *
(empty list or set)
10.0.0.11:6379> lpush paidui mcw1 mcw2 mcw3 mcw4
(integer) 4
10.0.0.11:6379> lrange paidui 0 -1
1) "mcw4"
2) "mcw3"
3) "mcw2"
4) "mcw1"
10.0.0.11:6379> lpush paidui mcw5
(integer) 5
10.0.0.11:6379> lrange paidui 0 -1
1) "mcw5"
2) "mcw4"
3) "mcw3"
4) "mcw2"
5) "mcw1"
10.0.0.11:6379> 
rpush         从列表右边插
从列表左边取,第一个取出来的是最后推入的,最后一个取出的是第一个推入的。
可以想象成如下排队顺序, mcw5 mcw4 mcw3 mcw2 mcw1   
当从右边推入mcw6的时候就是 :mcw5 mcw4 mcw3 mcw2 mcw1 mcw6
当从左边取数据的时候就是:
第一次取:mcw5
第二次取: mcw4
....
第六次取:mcw6
10.0.0.11:6379> lrange paidui 0 -1
1) "mcw5"
2) "mcw4"
3) "mcw3"
4) "mcw2"
5) "mcw1"
10.0.0.11:6379> rpush paidui mcw6
(integer) 6
10.0.0.11:6379> lrange paidui 0 -1
1) "mcw5"
2) "mcw4"
3) "mcw3"
4) "mcw2"
5) "mcw1"
6) "mcw6"
lrange          获取一定长度的元素  lrange key  start stop
取列表类型的数据,指定开始数据和结束数据,比如开始0,结束-1,这是取列表所有的值
10.0.0.11:6379> lrange paidui 0 -1
1) "mcw5"
2) "mcw4"
3) "mcw3"
4) "mcw2"
5) "mcw1"
10.0.0.11:6379> 
10.0.0.11:6379> keys * 
1) "paidui"
10.0.0.11:6379> type paidui
list
10.0.0.11:6379> get paidui   #列表类型不能用get取值
(error) WRONGTYPE Operation against a key holding the wrong kind of value
10.0.0.11:6379> lrange paid 0 -1  #不存在的键
(empty list or set)
10.0.0.11:6379> 
10.0.0.11:6379> lrange paidui 0 -1
1) "mcw5"
2) "mcw4"
3) "mcw3"
4) "mcw2"
5) "mcw1"
10.0.0.11:6379> 
ltrim               截取一定长度列表
根据查询可知列表数据顺序如下:mcw5 mcw4 mcw3 mcw2 mcw1
索引分别是:                   0    1    2     3    4  
这里是从paidui左边截取,从索引1开始,从索引2结束,其中包含索引2的数据,截取之后,这个key的值就变成截取的值了mcw4 mcw3
然后从左边查询,第一个查出来的数据就是mcw4,第二个就是mcw3
10.0.0.11:6379> lrange paidui 0 -1
1) "mcw5"
2) "mcw4"
3) "mcw3"
4) "mcw2"
5) "mcw1"
10.0.0.11:6379> ltrim paidui 1 2
OK
10.0.0.11:6379> lrange paidui 0 -1
1) "mcw4"
2) "mcw3"
10.0.0.11:6379> 
lpop                 删除最左边一个元素
rpop                     删除最右边一个元素
根据lrange可以列表数据的顺序是:mcw5 mcw4 mcw3 mcw2 mcw1 mcw6
所以从左边删除,删的是mcw5,从右边删除,删的是mcw6
10.0.0.11:6379> lrange paidui 0 -1
1) "mcw5"
2) "mcw4"
3) "mcw3"
4) "mcw2"
5) "mcw1"
6) "mcw6"
10.0.0.11:6379> lpop paidui
"mcw5"
10.0.0.11:6379> rpop paidui
"mcw6"
10.0.0.11:6379> lrange paidui 0 -1
1) "mcw4"
2) "mcw3"
3) "mcw2"
4) "mcw1"
10.0.0.11:6379> 
lpushx/rpushx                key存在则添加值,不存在不处理
不存在返回个0。默认key不存在会创建key的
10.0.0.11:6379> keys * 
1) "paidui"
10.0.0.11:6379> lpushx paid mcw0
(integer) 0
10.0.0.11:6379> keys * 
1) "paidui"
10.0.0.11:6379> lpushx paidui mcw0
(integer) 5
10.0.0.11:6379> keys * 
1) "paidui"
10.0.0.11:6379> lrange paidui 0 -1
1) "mcw0"
2) "mcw4"
3) "mcw3"
4) "mcw2"
5) "mcw1"
10.0.0.11:6379>

redis的集合,是一种无序的集合,集合中的元素没有先后顺序。

集合相关的操作也很丰富,如添加新元素、删除已有元素、取交集、取并集、取差集等。我们来看例子:

sadd/srem 添加/删除 元素
sismember 判断是否为set的一个元素
smembers 返回集合所有的成员
sdiff 返回一个集合和其他集合的差异
sinter 返回几个集合的交集
sunion 返回几个集合的并集

sadd/srem   添加/删除 元素
smembers    返回集合所有的成员
10.0.0.11:6379> keys *
(empty list or set)
10.0.0.11:6379> sadd zoo gou mao zhu  #添加
(integer) 3
1) "zoo"
10.0.0.11:6379> type zoo
set
10.0.0.11:6379> smembers zoo  #查询
1) "mao"
2) "zhu"
3) "gou"
10.0.0.11:6379> 
10.0.0.11:6379> srem zoo zhu  #删除
(integer) 1
10.0.0.11:6379> smembers zoo
2) "gou"
新增成员
10.0.0.11:6379> sadd zoo zhu #新增
sismember   判断是否为set的一个元素
mao是集合zoo里的成员吗,是,返回的是1;
zhu是集合zoo里的成员吗,不是,返回的是0
10.0.0.11:6379> sismember zoo mao
10.0.0.11:6379> sismember zoo zhu
(integer) 0
sdiff             返回一个集合和其他集合的差异
如下,sdiff 集合1 集合2 
返回集合1中有的,而集合2中没有的。就是取差集
1) "zoo2"
2) "zoo"
10.0.0.11:6379> smembers zoo2
1) "she"
3) "shu"
10.0.0.11:6379> sdiff zoo zoo2
10.0.0.11:6379> sdiff zoo2 zoo
2) "shu"
sinter           返回几个集合的交集
如下,几个集合应该不只是包含两个集合
10.0.0.11:6379> sinter zoo zoo2
1) "zhu"
10.0.0.11:6379> sinter zoo2 zoo
sunion          返回几个集合的并集
集合取并集,几个集合应该不只是能用两个集合
10.0.0.11:6379> sunion zoo zoo2
4) "mao"
5) "shu"
10.0.0.11:6379>

哈希数据结构

hashes即哈希。哈希是从redis-2.0.0版本之后才有的数据结构。

hashes存的是字符串和字符串值之间的映射,比如一个用户要存储其全名、姓氏、年龄等等,就很适合使用哈希。

hset 设置散列值
hget 获取散列值
hmset 设置多对散列值
hmget 获取多对散列值
hsetnx 如果散列已经存在,则不设置(防止覆盖key)
hkeys 返回所有fileds
hvals 返回所有values
hlen 返回散列包含域(field)的数量
hdel 删除散列指定的域(field)
hexists 判断是否存在

hset 设置散列值
hget  获取散列值
10.0.0.11:6379> hset stu1 name "mcw" age 18 height "170"
(integer) 3
10.0.0.11:6379> keys * 
1) "stu1"
10.0.0.11:6379> type stu1
hash
10.0.0.11:6379> hget stu1 name
"mcw"
10.0.0.11:6379> hget stu1 age
"18"
10.0.0.11:6379> hget stu1 height
"170"
10.0.0.11:6379> 
10.0.0.11:6379> hset new1 title "happy new year" content "ni hao"
(integer) 2
10.0.0.11:6379> 
hmset  设置多对散列值
hmget  获取多对散列值
10.0.0.11:6379> 
10.0.0.11:6379> keys * 
1) "stu1"
2) "new1"
10.0.0.11:6379> hmget stu1 name age height
1) "mcw"
2) "18"
3) "170"
10.0.0.11:6379> 
hsetnx   如果散列已经存在,则不设置(防止覆盖key)
10.0.0.11:6379> hsetnx stu2 name "mcw2" age 18 height "168"
(error) ERR wrong number of arguments for 'hsetnx' command
10.0.0.11:6379> 
10.0.0.11:6379> hsetnx stu2 name "mcw2" 
(integer) 1
10.0.0.11:6379> hsetnx stu2 name "mcw2" 
(integer) 0
10.0.0.11:6379> keys *
1) "stu2"
2) "stu1"
3) "new1"
10.0.0.11:6379> hsetnx stu2 name "mcw1"  
(integer) 0
10.0.0.11:6379> hget stu2 name  #存在stu2,使用hsetnx没被修改
"mcw2"
10.0.0.11:6379> hset stu2 name "mcw1" 
(integer) 0
10.0.0.11:6379> hget stu2 name  #存在stu2,使用hset被修改了
"mcw1"
10.0.0.11:6379> 
hkeys     返回所有fileds
10.0.0.11:6379> keys *
1) "stu2"
2) "stu1"
3) "new1"
10.0.0.11:6379> hkeys stu1
1) "name"
2) "age"
3) "height"
10.0.0.11:6379> 
hvals     返回所有values
10.0.0.11:6379> keys *
1) "stu2"
2) "stu1"
3) "new1"
10.0.0.11:6379> hvals stu1
1) "mcw"
2) "18"
3) "170"
10.0.0.11:6379> 
hlen      返回散列包含域(field)的数量
10.0.0.11:6379> keys *
1) "stu2"
2) "stu1"
3) "new1"
10.0.0.11:6379> hkeys stu1
1) "name"
2) "age"
3) "height"
10.0.0.11:6379> hlen stu1
(integer) 3
10.0.0.11:6379> hkeys new1
1) "title"
2) "content"
10.0.0.11:6379> hlen new1
(integer) 2
10.0.0.11:6379> 
hdel     删除散列指定的域(field)
10.0.0.11:6379> keys *
1) "stu2"
2) "stu1"
3) "new1"
10.0.0.11:6379> type stu1
hash
10.0.0.11:6379> 
10.0.0.11:6379> hkeys stu1
1) "name"
2) "age"
3) "height"
10.0.0.11:6379> hdel stu1 height  #删除指定字段
(integer) 1
10.0.0.11:6379> hkeys stu1
1) "name"
2) "age"
10.0.0.11:6379> 
hexists    判断是否存在
10.0.0.11:6379> keys *
1) "stu2"
2) "stu1"
3) "new1"
10.0.0.11:6379> type stu1
hash
10.0.0.11:6379> hkeys stu1
1) "name"
2) "age"
10.0.0.11:6379> hexists stu1 name   #存在字段返回1
(integer) 1
10.0.0.11:6379> hexists stu1 height #不存在字段返回0
(integer) 0
10.0.0.11:6379>

发布订阅

主要应用:通知,公告
可以作为消息队列或者消息管道

一个发布,多个订阅
发布:广播电台频道能发送给所有接收这个频道的人声音信息
订阅:很多人都能接收到这个广播电台的消息

比如qq群公告:一个发布,多个订阅(接收到)

如下,一个发布者,两个订阅者,订阅者1订阅跟python和linux频道有关的消息;订阅者2订阅和golang和Linux有感的消息

当发布者发布消息的时候,订阅者1接收到了订阅频道python发来的消息

当发布者发布给linux频道的时候,两个订阅人都接收到了消息。发布者这里还返回了几个订阅人接收到了消息。上面那条写错了发布到一个没有人订阅的频道上,返回0个订阅者

发布人发布的频道和接收的频道,这样写是需要精准判断,不能模糊匹配接收消息的

当订阅者这里使用psubscribe的时候,后面变成了模式

当订阅者使用psubscribe命令,且订阅的频道使用通配符的时候,那么发布者发布的能跟订阅者模糊匹配到的频道,就被订阅者接收到了

参考:https://www.cnblogs.com/pyyu/p/9843950.html redis 博客地址

到此这篇关于redis部署以及各种数据类型使用命令等详解的文章就介绍到这了,更多相关redis数据类型使用命令内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

redis部署及各种数据类型使用命令详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

redis部署及各种数据类型使用命令的示例分析

这篇文章给大家分享的是有关redis部署及各种数据类型使用命令的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。编译安装redis开始部署[root@mcw01 ~]$ lsanaconda-ks.cfg
2023-06-29

java如何使用redis各种数据类型

本文详细介绍了Java中使用Redis各种数据类型的方法,包括字符串、列表、哈希、集合、有序集合、位图和地理空间索引。通过GET、SET、LPUSH、RPUSH、HSET、HGET等命令,开发者可以轻松读写Redis中的数据。掌握这些数据类型的使用,有助于Java开发人员构建高效、灵活的分布式应用程序。
java如何使用redis各种数据类型
2024-04-02

Redis的五大数据类型及常用命令

一、与数据库相关的命令Redis启动后默认16个数据库,类似数组下表从零开始,初始默认使用零号库切换数据库命令 select 数据库下标查看当前数据库的key的数量 Dbsize清空当前库 flushdb清空所有库 flushall二、与键相关的常用命令查看所
Redis的五大数据类型及常用命令
2015-10-09

Redis 中ZSET数据类型命令使用及对应场景总结(案例详解)

这篇文章主要介绍了Redis 中ZSET数据类型命令使用及对应场景总结,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-01-03

Redis 中ZSET数据类型命令使用及对应场景总结(案例详解)

目录1.zadd添加元素2.zrem 从有序集合key中删除元素3.zscore 返回有序集合key中元素member的分值4.zincrby 为有序集合key中元素增加分值5.zcard获取有序集合key中元素总个数6.zrange 正序
2023-01-03

Redis多种数据类型以及使用场景

SDS简单动态字符串struct sdshdr {// 记录buf数组中已使用字节的数量// 等于SDS所保存字符串的长度int len;// 记录buf数组中未使用字节的数量int free;// 字节数组,用于保存字符串char buf[];}free表示
Redis多种数据类型以及使用场景
2014-11-22

redis的list数据类型相关命令分析及如何使用

今天给大家介绍一下redis的list数据类型相关命令分析及如何使用。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。list列表简介list是简单的字符串列表(
2023-06-26

redis的五种数据类型及使用场景有哪些

redis 支持五种数据类型:字符串、列表、哈希表、有序集合和无序集合。这些类型分别适合存储各种数据场景,例如文本数据、有序元素列表、映射键值数据、按分数排序的元素集合以及独特的元素集合。Redis 五种数据类型及使用场景Redis 是一
redis的五种数据类型及使用场景有哪些
2024-04-08

redis的五种数据类型及使用场景是什么

redis 提供了五种数据类型,分别为:字符串:存储文本、json 数据、缓存、计数器;哈希:存储用户数据、会话信息、对象属性;列表:存储队列、时间线、排名、购物车;集合:存储标签、分类、关注列表、黑名单;有序集合:存储排行榜、投票、优先级
redis的五种数据类型及使用场景是什么
2024-04-08

使用Redis命令操作数据库的常见错误及解决方法

使用Redis命令操作数据库时常见错误:错误使用INCR命令计数:导致竞争条件和不准确的结果。使用HINCRBY命令或Lua脚本实现分布式计数器。将字符串类型用于复杂数据:导致数据不一致和处理效率低下。使用哈希或列表等更合适的数据类型。将键名存储在变量中:容易出错并增加维护成本。直接使用字符串作为键名。设置无效的生存时间:导致数据丢失。始终设置有效且合理的生存时间。错误使用Lua脚本:可能导致性能问题或错误。了解Lua脚本并充分测试。频繁执行慢查询:影响性能。使用慢查询日志识别和优化慢查询。没有设置最大内
使用Redis命令操作数据库的常见错误及解决方法
2024-04-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录