redis服务器

安装redis服务器

[ root@redis1~ ] # yum - y install gcc gcc- c++ make
[ root@redis1~ ] # tar - zxf redis- 4.0.8.tar.gz
[ root@redis1~ ] # cd redis- 4.0.8/
[ root@redis1redis- 4.0.8] # ls
 00- RELEASENOTES CONTRIBUTING deps Makefile README.md runtest runtest- sentinel src utils
 BUGS COPYING INSTALL MANIFESTO redis.conf runtest- cluster sentinel.conf tests
 [ root@redis1redis- 4.0.8] # make
 [ root@redis1redis- 4.0.8] # make install
 [ root@redis1redis- 4.0.8] # cd utils/
 [ root@redis1utils] # ./install_server.sh
 Welcome to the redis serv ice installer
 This script will help y ou easily set up a running redis server
 Please select the redis port for this instance: [ 6379]
 Selecting default: 6379
 Please select the redis config file name [ /etc/redis/6379.conf]
 Selected default - /etc/redis/6379.conf
 Please select the redis log file name [ /var/log/redis_6379.log]
 Selected default - /var/log/redis_6379.log
 Please select the data directory for this instance [ /var/lib/redis/6379]
 Selected default - /var/lib/redis/6379
 Please select the redis executable path [ /usr/local/bin/redis- server]
Selected config:
Port : 6379															#端口号
Config file : /etc/redis/6379.conf									#配置文件目录
Log file : /var/log/redis_6379.log									#日志目录
 Data dir : /var/lib/redis/6379										#数据库目录
 Executable : /usr/local/bin/redis- server							#启动程序的目录
 Cli Executable : /usr/local/bin/redis- cli							#命令行的连接工具
 Is this ok? Then press ENTER to go on or Ctrl- C to abort.			#回车完成配置
 Copied /tmp/6379.conf => /etc/init.d/redis_6379					#服务启动脚本
 Installing serv ice...
 Successfully added to chkconfig!
 Successfully added to runlevels 345!
 Starting Redis server...
 Installation successful!											#安装成功

查看状态

[ root@redis1utils] # /etc/init.d/redis_6379 status
Redis is running ( 15203)

查看监听的端口

[ root@redis1utils] # netstat - antupl | grep :6379
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 15203/redis- server
[ root@redis1utils] # ps - C redis- server
PID TTY TIME CMD
 15203 ? 00:00:00 redis- server

停止服务

[ root@redis1utils] # /etc/init.d/redis_6379 stop
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
[ root@redis1utils] # /etc/init.d/redis_6379 status
# 再次查看,显示 没有那个文件或目录
cat: /var/run/redis_6379.pid: No such file or directory
Redis is running ( )

连接redis

[ root@redis1utils] # /etc/init.d/redis_6379 start
Starting Redis server...
[ root@redis1utils] # redis- cli
127.0.0.1:6379> ping
PONG											#PONG说明服务正常

设置变量test,值为123,查看变量test的值

常用指令操作:
set keyname keyvalue 存储
get keyname 获取

127.0.0.1:6379> set test 123
OK
127.0.0.1:6379> get test
"123"

del keyname 删除变量

127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> del k1
( integer) 1

keys * 打印所有变量

127.0.0.1:6379> keys *
1) "test"

EXISTS keyname 测试是否存在

127.0.0.1:6379> exists k1
( integer) 0

type keyname 查看类型

127.0.0.1:6379> set k2 v1
OK
127.0.0.1:6379> type k2
string

move keyname dbname 移动变量

127.0.0.1:6379> move k2 1								#移动k2到1库
( integer) 1

select 数据库编号0-15 切换库

127.0.0.1:6379> select 1								#切换到1库
OK
127.0.0.1:6379[ 1] > keys *							#查看有k2
1) "k2"

expire keyname 10 设置有效时间

127.0.0.1:6379[ 1] > expire k2 10
( integer) 1

ttl keyname 查看生存时间

127.0.0.1:6379[ 1] > ttl k2
(integer) -2

flushall 删除所有变量

127.0.0.1:6379[ 1] > flushall
OK

save 保存所有变量

127.0.0.1:6379[ 1] > save
OK

shutdown 关闭redis服务

shutdown 关闭redis服务

修改Redis服务运行参数

修改redis运行参数
 [ root@redis1utils] # cp /etc/redis/6379.conf /root/6379.conf
 # 可以先备份一份,防止修改错误没法还原
 [ root@redis1utils] # /etc/init.d/redis_6379 stop
 [ root@redis1utils] # vim /etc/redis/6379.conf
 .......
 bind 192.168.4.51												#设置服务使用的ip
 port 6351														#更改端口号
 requirepass 123456												#设置密码
 [ root@redis1utils] # /etc/init.d/redis_6379 start
 Starting Redis server...
 [ root@redis1utils] # ss - antul | grep 6351					#查看有端口6351
 tcp LISTEN 0 128 192.168.4.51:6351 *:*

由于修改了配置文件所以在连接的时候需要加上ip和端口

[ root@redis1utils] # redis-cli -h 192.168.4.51 -p 6351
192.168.4.51:6351> ping
( error) NOAUTH Authentication required.
192.168.4.51:6351> auth 123456									#输入密码才能操作(因为之前设置过密码)
OK
192.168.4.51:6351> ping
PONG

还可以直接在命令行输入密码连接

[ root@redis1utils] # redis- cli - h 192.168.4.51- p 6351 - a 123456
192.168.4.51:6351> ping
PONG

停止服务

由于修改Redis服务运行参数,所以在停止服务的时候也不能用默认的方法停止

[ root@redis1utils] # /etc/init.d/redis_6379 stop				#停止失败
 Stopping ...
 Could not connect to Redis at 127.0.0.1:6379: Connection refused
 Waiting for Redis to shutdown ...
 Waiting for Redis to shutdown ...
 Waiting for Redis to shutdown ...
 Waiting for Redis to shutdown ...
 .......
 [ root@redis1utils] # redis- cli - h 192.168.4.51- p 6351 - a 123456 shutdown
 																#停止成功
[ root@redis1utils] # ss - antul | grep 6351					#查看没有端口

部署LNMP+Redis

部署LNMP+Redis
(1)安装redis,(不会搭建的请参考案例1)
(2)安装php支持的功能模块(52上面操作)
[ root@nginx utils] # which php
/usr/bin/which: no php in ( /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
[ root@nginx utils] # php - m
bash: php: command not found...
[ root@nginx utils] # yum - y install php-cli
 [ root@nginx utils] # which php
 /usr/bin/php
 [ root@nginx utils] # php - m
  [ PHP Modules]
  bz2
  calendar
  Core
  cty pe
  curl
  date
  ereg
  exif
  fileinfo
  filter
  ftp
  gettext
  gmp
  hash
  iconv
  json
  libxml
  mhash
  openssl
  pcntl
  pcre
  Phar
  readline
  Reflection
  session
  shmop
  SimpleXML
  sockets
  SPL
  standard
  tokenizer
  xml
  zip
  zlib
  [ Zend Modules]

安装连接redis的功能模块

[ root@nginx utils] # php - m | grep - i redis					#没有redis模块
[ root@nginx redis] # cd lnmp/
[ root@nginx lnmp] # ls
 nginx- 1.12.2.tar.gz
 php- devel- 5.4.16- 42.el7.x86_64.rpm
 php- fpm- 5.4.16- 42.el7.x86_64.rpm
 php- redis- 2.2.4.tar.gz
 [ root@nginx lnmp] # tar - zxf php- redis- 2.2.4.tar.gz
 [ root@nginx lnmp] # cd phpredis- 2.2.4/
 [ root@nginx phpredis- 2.2.4] # which phpize
 /usr/bin/phpize
 [ root@nginx phpredis- 2.2.4] # phpize
 Can't find PHP headers in /usr/include/php
 The php- devel package is required for use of this command.
 [ root@nginx phpredis- 2.2.4] # yum - y install autoconf automake pcre- devel
 [ root@nginx phpredis- 2.2.4] # cd ..
 [ root@nginx lnmp] # rpm -ivh php- devel- 5.4.16- 42.el7.x86_64.rpm
 [ root@nginx lnmp] # cd phpredis- 2.2.4/
 [ root@nginx phpredis- 2.2.4] # phpize							#生成一个php的文件
 Configuring for:
 PHP Api Version: 20100412
 Zend Module Api No: 20100525
 Zend Extension Api No: 220100525
 [ root@nginx phpredis- 2.2.4] # find / - name "php- config"
  /usr/bin/php- config
 [ root@nginx phpredis- 2.2.4] # ./configure - - with- php- config=/usr/bin/php- config
  																#指定模块编译的路径
 [ root@nginx phpredis- 2.2.4] # make && make install
 .........
 Installing shared extensions: /usr/lib64/php/modules/			#模块文件存放的路径
 [ root@nginx phpredis- 2.2.4] # ls /usr/lib64/php/modules/
 curl.so fileinfo.so json.so phar.so redis.so zip.so
 [ root@nginx phpredis- 2.2.4] # vim /etc/php.ini
 728 extension_dir = "/usr/lib64/php/modules/"
 729 ; On windows:
 730 extension = "redis.so"
 [ root@nginx phpredis- 2.2.4] # php - m | grep - i redis
 redis															#出现redis

安装nginx

[ root@nginx ~] # cd redis/lnmp/
[ root@nginx lnmp] # ls
nginx- 1.12.2.tar.gz
[ root@nginx lnmp] # tar - xf nginx- 1.12.2.tar.gz
[ root@nginx lnmp] # cd nginx- 1.12.2/
[ root@nginx nginx- 1.12.2] # yum - y install gcc pcre- devel openssl- devel
[ root@nginx nginx- 1.12.2] # useradd - s /sbin/nologin nginx
[ root@nginx nginx- 1.12.2] # ./configure - - user=nginx - - group=nginx - - with- http_ssl_module
[ root@nginx nginx- 1.12.2] # make && make install
[ root@nginx nginx- 1.12.2] # ln - s /usr/local/nginx/sbin/nginx /sbin/
[ root@nginx nginx- 1.12.2] # cd /usr/local/nginx/html/
[ root@nginx html] # echo "aa" > text.html
[ root@nginx html] # yum - y install mariadb mariadb- server mariadb- devel php php- mysql
[ root@nginx html] # cd /root/redis/lnmp/
[ root@nginx lnmp] # rpm - ivh php- fpm- 5.4.16- 42.el7.x86_64.rpm				#安装php
[ root@nginx lnmp] # cd /usr/local/nginx/html/
[ root@nginx html] # vim test.php
<?php
$i=33;
$j=44;
if( $i<$j) {
echo "oK";
}
else{
echo "error";
 }
 #echo $i;
 ?>
 [ root@nginx html] # php test.php												#在命令行测试
 oK
 [ root@nginx html] # sy stemctl restart mariadb
 [ root@nginx html] # systemctl restart php-fpm
 [ root@nginx html] # v im /usr/local/nginx/conf/nginx.conf
 ....
 		location ~ \.php$ {
 		root html;
 		fastcgi_pass 127.0.0.1:9000;
 		fastcgi_index index.php;
 		#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
 		include fastcgi.conf;
 	}
 ....
 [ root@nginx html] # nginx														#启动nginx

客户端用火狐浏览器访问:

[ root@room9pc01~] # firefox 192.168.4.56/text.html								#成功
[ root@room9pc01~] # firefox 192.168.4.56/test.php								#成功

连接redis测试

[ root@nginx html] # vim lkredis.php
<?php
$redis = new redis( ) ;
$redis- >connect( '192.168.4.51',6351) ;
$redis - >auth( "123456") ;
$redis- >set( "redistest","666666") ;
echo $redis- >get( "redistest") ;
?>
[ root@nginx html] # php lkredis.php											#命令行测试
666666
[ root@nginx html] # firefox lkredis.php										#命令行测试
666666

有数据存入

[ root@redis1lnmp] # redis- cli - h 192.168.4.51- p 6351- a 123456
192.168.4.51:6351> ping
PONG
192.168.4.51:6351> keys *
1) "redistest"
192.168.4.51:6351> get redistest
"666666"
192.168.4.51:6351>

A

[ root@redisA ~] # y um - y install gcc gcc- c++ make
 [ root@redisA ~] # cd redis
 redis/			redis-cluster/
 [ root@redisA ~] # cd redis/
 [ root@redisA redis] # ls
 lnmp redis- 4.0.8.tar.gz
 [ root@redisA redis] # tar - xf redis- 4.0.8.tar.gz
 [ root@redisA redis] # cd redis- 4.0.8/
 [ root@redisA redis- 4.0.8] # make && make install
 [ root@redisA redis- 4.0.8] # ./utils/install_server.sh
 Welcome to the redis serv ice installer
 This script will help y ou easily set up a running redis server
 Please select the redis port for this instance: [ 6379]
 Selecting default: 6379
 Please select the redis config file name [ /etc/redis/6379.conf]
 Selected default - /etc/redis/6379.conf
 Please select the redis log file name [ /var/log/redis_6379.log]
 Selected default - /var/log/redis_6379.log
 Please select the data directory for this instance [ /var/lib/redis/6379]
 Selected default - /var/lib/redis/6379
 Please select the redis executable path [ /usr/local/bin/redis- server]
 Selected config:
 Port : 6379
 Config file : /etc/redis/6379.conf
 Log file : /var/log/redis_6379.log
 Data dir : /var/lib/redis/6379
 Executable : /usr/local/bin/redis- server
 Cli Executable : /usr/local/bin/redis- cli
 Is this ok? Then press ENTER to go on or Ctrl- C to abort.
 Copied /tmp/6379.conf => /etc/init.d/redis_6379
 Installing serv ice...
 Successfully added to chkconfig!
 Successfully added to runlevels 345!
  Starting Redis server...
  Installation successful! //安装成功
  [ root@redisA redis- 4.0.8] # ss - antlp | grep 6379 //查看时有端口
  LISTEN 0 128 127.0.0.1:6379 *:* users:( ( "redis- server",pid=10788,fd=6) )

修改配置文件,6台redis服务器都要修改

[ root@redisA redis- 4.0.8] # /etc/init.d/redis_6379 stop
//停止已经开启的redis服务
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
[ root@redisA redis- 4.0.8] # v im /etc/redis/6379.conf
.........
bind 192.168.4.51 //修改ip
port 6351 //不允许相同,只指定物理接口的ip
daemonize y es //以守护进程方式运行
pidfile /var/run/redis_6351.pid
cluster- enabled y es //是否启用集群,前提是以守护进程方式运行
cluster- config- file nodes- 6351.conf
//存储集群信息的配置文件,自动生成,不允许相同
cluster- node- timeout 5000 //集群节点通信超时时间
..........
[ root@redisA redis- 4.0.8] # /etc/init.d/redis_6379 start //启动服务
Starting Redis server...
[ root@redisA redis- 4.0.8] # ss - antlp | grep 6351 //查看有端口
LISTEN 0 128 192.168.4.51:6351 *:* users:( ( "redis- server",pid=11092,fd=6) )
LISTEN 0 128 192.168.4.51:16351 *:* users:( ( "redis- server",pid=11092,fd=8) ) //16051:集群中的主机通信时用
[ root@redisA redis- 4.0.8] # ps - C redis
PID TTY TIME CMD

关闭防火墙

[ root@redisA redis- 4.0.8] # getenforce
Permissive
[ root@redisA redis- 4.0.8] # sy stemctl disable firewalld
//关闭防火墙不自启

查看集群信息

[ root@redisA redis- 4.0.8] # redis- cli - h 192.168.4.51- p 6351
192.168.4.51:6351> ping
PONG
192.168.4.51:6351> cluster info
cluster_state:fail
cluster_slots_assigned:0
cluster_slots_ok:0
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:1
cluster_size:0
..........
192.168.4.51:6351> cluster nodes
f81f997d5ed988ec1587558e78d5f7dbc96abcbf :6351@16351my self,master - 0 0 0 connected

部署ruby脚本运行环境

[ root@redisA redis- 4.0.8] # cd /root/redis- cluster/
[ root@redisA redis- cluster] # ls
redis- 3.2.1.gem ruby - devel- 2.0.0.648- 30.el7.x86_64.rpm
[ root@redisA redis- cluster] # y um - y install ruby ruby gems
[ root@redisA redis- cluster] # rpm - ivh – nodeps ruby - devel- 2.0.0.648- 30.el7.x86_64.rpm
warning: ruby - devel- 2.0.0.648- 30.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing... ################################# [ 100%]
Updating / installing...
1:ruby - devel- 2.0.0.648- 30.el7 ################################# [ 100%]
[ root@redisA redis- cluster] # which gem
/usr/bin/gem
[ root@redisA redis- cluster] # gem install redis
Successfully installed redis- 3.2.1
Parsing documentation for redis- 3.2.1
Installing ri documentation for redis- 3.2.1
1gem installed

生成创建集群的脚本

[ root@redisA redis- cluster] # cd /root/redis/redis- 4.0.8/src/
[ root@redisA src] # cp redis- trib.rb /usr/local/bin/
[ root@redisA src] # ll /usr/local/bin/redis- trib.rb
- rwxr- xr- x. 1root root 65991Sep 27 16:12 /usr/local/bin/redis- trib.rb

创建集群

   [ root@redisA src] # redis- trib.rb create - - replicas 1\
   192.168.4.51:6351 192.168.4.52:6352 \
   192.168.4.53:6353 192.168.4.54:6354 \
   192.168.4.55:6355 192.168.4.56:6356
   //- - replicas 1给每一个主配置一个从库
   [ root@redisA log] # redis- trib.rb create - - replicas 1192.168.4.51:6351 192.168.4.52:6352 192.168.4.53:6353 192.168.4.54:6354 192.168.4.55:6355
   >>> Creating cluster
   >>> Performing hash slots allocation on 6 nodes...
   Using 3 masters:
   192.168.4.51:6351
   192.168.4.52:6352
   192.168.4.53:6353
   Adding replica 192.168.4.55:6355 to 192.168.4.51:6351
   Adding replica 192.168.4.56:6356 to 192.168.4.52:6352
    Adding replica 192.168.4.54:6354 to 192.168.4.53:6353
    ..........
    ..........
    ..........
    [ OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [ OK] All 16384 slots covered.

查看集群信息,任意一台主机访问本机的redis服务查看即可

cluster info 查看集群信息
cluster nodes 查看集群节点信息

[ root@redisA log] # redis- cli - h 192.168.4.52 - p 6352
192.168.4.52:6352> CLUSTER INFO
cluster_state:ok //状态
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my _epoch:2
cluster_stats_messages_ping_sent:367
cluster_stats_messages_pong_sent:327
cluster_stats_messages_meet_sent:5
cluster_stats_messages_sent:699
cluster_stats_messages_ping_received:327
cluster_stats_messages_pong_received:372
cluster_stats_messages_received:699
192.168.4.52:6352> CLUSTER NODES //查看集群节点信息
63afbb5e7d63b1f142358634578a3488e3c9e634 192.168.4.54:6354@16354 slave bc5c4e082a5a3391b634cf433a6486c867cf c44b 0 15380392788714 connected bc5c4e082a5a3391b634cf433a6486c867cf c44b 192.168.4.53:6353@16353 master - 0 15380392785713 connected 10923- 16383 28e06c5f24a2b6c6412f81369e09bc9653cc51ff 192.168.4.56:6356@16356 slave 8568fbd73cb296cad6915d524e34761b2114af47 0 1538039278069 6 conne
7e8d9121f44d8331ff55b45c218b87df9bda1b70 192.168.4.55:6355@16355 slave a3083123bc5c87a76aab2655171634d4ee84f418 0 1538039278000 5 conn
8568fbd73cb296cad6915d524e34761b2114af47 192.168.4.52:6352@16352 my self,master - 0 1538039277000 2 connected 5461- 10922
a3083123bc5c87a76aab2655171634d4ee84f418 192.168.4.51:6351@16351master - 0 1538039277869 1connected 0- 5460
192.168.4.52:6352>

测试集群

命令:redis-cli -c -h ip地址 -p 端口

 [ root@redisA log] # redis-cli -c -h 192.168.4.51 -p 6351
 192.168.4.51:6351> set name jim
 - > Redirected to slot [ 5798] located at 192.168.4.52:6352
 OK
 192.168.4.52:6352> get name
 "jim"
 192.168.4.52:6352> set class linux
 OK
 192.168.4.52:6352> get class
 "linux"
 192.168.4.52:6352> set pay 26800
  - > Redirected to slot [ 4013] located at 192.168.4.51:6351
  OK
  192.168.4.51:6351> get pay
  "26800"

集群不能用的情况:

有半数或者半数以上的主库机器挂掉,集群就不能用了
把一个从库升级成主,没有从库,集群不能用(前提是:有半数或者半数以上的主库机器挂掉)
一个主库挂掉,它的从库自动顶替为主库,正常使用(前提是:有半数或者半数以上的主库机器能用),挂掉的主库修复好后,会成为从库,不会
抢占为主

集群节点选举策略(三主,三从)

停止某个主库的redis服务,对应的从库会自动升级为主库
先查看节点信息的主从情况

[ root@redisA log] # redis- cli - c - h 192.168.4.51- p 6351
192.168.4.51:6351> CLUSTER nodes
8568fbd73cb296cad6915d524e34761b2114af47 192.168.4.52:6352@16352 master - 0 1538040400840 2 connected 5461- 10922
28e06c5f24a2b6c6412f81369e09bc9653cc51ff 192.168.4.56:6356@16356 slave 8568fbd73cb296cad6915d524e34761b2114af47 0 1538040400000 6 connec
..............
192.168.4.51:6351>

看谁是谁的从库,如:

看节点前后的编号id是否有相同的
如:8568fbd73cb296cad6915d524e34761b2114af47
发现52的从库为56
停止主库52

[ root@redisA log] # redis- cli - h 192.168.4.52 - p 6352 shutdown
[ root@redisA log] # redis- cli - c - h 192.168.4.51- p 6351
192.168.4.51:6351> CLUSTER NODES
...............................
8568fbd73cb296cad6915d524e34761b2114af47 192.168.4.52:6352@16352 master,fail - 1538041052349 1538041051000 2 disconnected //52的主库坏掉
28e06c5f24a2b6c6412f81369e09bc9653cc51ff 192.168.4.56:6356@16356 master - 0 1538041066000 7 connected 5461- 10922 //56成为主库
...............................

开启52,发现52成为从库

[ root@redisB redis- 4.0.8] # /etc/init.d/redis_6352 start
Starting Redis server...
[ root@redisA log] # redis- cli - c - h 192.168.4.51- p 6351
192.168.4.51:6351> CLUSTER NODES
 8568fbd73cb296cad6915d524e34761b2114af47 192.168.4.52:6352@16352 slave 28e06c5f24a2b6c6412f81369e09bc9653cc51ff 0 1538041254000 7 connected

管理redis集群

 部署一台新redis服务器,ip为192.168.4.58,装包,初始化,启用集群配置,重启服务(这里之前已经操作过)
 添加集群4.58(添加master节点)
 格式:redis-trib.rb 选项 参数
 选项: add-nade 添加主机(不指定角色为主)
 由于之前是在51上面创建ruby脚本,所以只有51上面有redis-trib.rb命令,在51上面执行
[ root@redisA ~] # redis-trib.rb add- node 192.168.4.58:6358 192.168.4.51:6351
>>> Adding node 192.168.4.58:6358 to cluster 192.168.4.51:6351
>>> Performing Cluster Check ( using node 192.168.4.51:6351)
S: a3083123bc5c87a76aab2655171634d4ee84f418 192.168.4.51:6351
slots: ( 0 slots) slave
replicates 7e8d9121f44d8331ff55b45c218b87df9bda1b70
M: 7e8d9121f44d8331ff55b45c218b87df9bda1b70 192.168.4.55:6355
slots:0- 5460 ( 5461slots) master
1additional replica( s)
S: 8568fbd73cb296cad6915d524e34761b2114af47 192.168.4.52:6352
slots: ( 0 slots) slave
replicates 28e06c5f24a2b6c6412f81369e09bc9653cc51ff
M: bc5c4e082a5a3391b634cf433a6486c867cf c44b 192.168.4.53:6353
slots:10923- 16383 ( 5461slots) master
1additional replica( s)
S: 63afbb5e7d63b1f142358634578a3488e3c9e634 192.168.4.54:6354
slots: ( 0 slots) slave
replicates bc5c4e082a5a3391b634cf433a6486c867cf c44b
M: 28e06c5f24a2b6c6412f81369e09bc9653cc51ff 192.168.4.56:6356
slots:5461- 10922 ( 5462 slots) master
1additional replica( s)
[ OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[ OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 192.168.4.58:6358 to make it join the cluster.
 [ OK] New node added correctly .

检查集群主机的状态信息

选项:check 检查权限
[ root@redisA ~] # redis- trib.rb check 192.168.4.58:6358 //查看状态
>>> Performing Cluster Check ( using node 192.168.4.58:6358)
M: c5e0da48f335c46a2ec199faa99b830f537dd8a0 192.168.4.58:6358
slots: ( 0 slots) master //发现没有hash槽
0 additional replica( s)
M: 7e8d9121f44d8331ff55b45c218b87df9bda1b70 192.168.4.55:6355
slots:0- 5460 ( 5461slots) master
1additional replica( s)
................
S: a3083123bc5c87a76aab2655171634d4ee84f418 192.168.4.51:6351
slots: ( 0 slots) slave
replicates 7e8d9121f44d8331ff55b45c218b87df9bda1b70
[ OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[ OK] All 16384 slots covered.

手动对集群进行分片迁移

选项:reshard 重新分配hash槽
[ root@redisA ~] # redis- trib.rb reshard 192.168.4.58:6358
How many slots do y ou want to move ( from 1to 16384) ?4096
//拿出多少个hash 槽给主机192.168.4.58
 What is the receiv ing node ID? c5e0da48f335c46a2ec199faa99b830f537dd8a0
 //主机192.168.4.58的id值
 Source node #1:all //从当前所有的主里面获取hash槽
 Doyou want to proceed with the proposed reshard plan ( y es/no) ?yes
 ....................
 Mov ing slot 12283 from 192.168.4.53:6353 to 192.168.4.58:6358:
 Mov ing slot 12284 from 192.168.4.53:6353 to 192.168.4.58:6358:
 Mov ing slot 12285 from 192.168.4.53:6353 to 192.168.4.58:6358:
 Mov ing slot 12286 from 192.168.4.53:6353 to 192.168.4.58:6358:
 Mov ing slot 12287 from 192.168.4.53:6353 to 192.168.4.58:6358:

再次查看发现4.58有4096个hash slot

[ root@redisA ~] # redis- trib.rb check 192.168.4.58:6358
>>> Performing Cluster Check ( using node 192.168.4.58:6358)
M: c5e0da48f335c46a2ec199faa99b830f537dd8a0 192.168.4.58:6358
slots:0- 1364,5461- 6826,10923- 12287 ( 4096 slots) master
0 additional replica( s)

删除master角色的主机

先删除主机占用的hash槽

[ root@redisA ~] # redis- trib.rb reshard 192.168.4.58:6358
How many slots do y ou want to move ( from 1to 16384) ?4096
//移除hash 槽的个数
What is the receiv ing node ID? bc5c4e082a5a3391b634cf433a6486c867cf c44b
//要移动给谁的id即目标主机(这里可以随机写一个master的ID)
Source node #1: c5e0da48f335c46a2ec199faa99b830f537dd8a0
//从谁那移动即源主机(这里写4.58的ID)
Source node #2:done //设置完毕
...............
Mov ing slot 12282 from c5e0da48f335c46a2ec199faa99b830f537dd8a0
Mov ing slot 12283 from c5e0da48f335c46a2ec199faa99b830f537dd8a0
Mov ing slot 12284 from c5e0da48f335c46a2ec199faa99b830f537dd8a0
Mov ing slot 12285 from c5e0da48f335c46a2ec199faa99b830f537dd8a0
Mov ing slot 12286 from c5e0da48f335c46a2ec199faa99b830f537dd8a0
Mov ing slot 12287 from c5e0da48f335c46a2ec199faa99b830f537dd8a0
 Do y ou want to proceed with the proposed reshard plan ( y es/no) ?y es //提交
 ....................................
 Mov ing slot 12282 from 192.168.4.58:6358 to 192.168.4.53:6353:
 Mov ing slot 12283 from 192.168.4.58:6358 to 192.168.4.53:6353:
 Mov ing slot 12284 from 192.168.4.58:6358 to 192.168.4.53:6353:
 Mov ing slot 12285 from 192.168.4.58:6358 to 192.168.4.53:6353:
 Mov ing slot 12286 from 192.168.4.58:6358 to 192.168.4.53:6353:
 Mov ing slot 12287 from 192.168.4.58:6358 to 192.168.4.53:6353:   

删除集群主机4.58(删除之后redis服务自动关闭)

[ root@redisA ~] # redis- trib.rb del- node 192.168.4.58:6358 \
c5e0da48f335c46a2ec199faa99b830f537dd8a0 //删除谁+删除的id
>>> Remov ing node c5e0da48f335c46a2ec199faa99b830f537dd8a0 from cluster 192.168.4.58:6358
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.

添加从节点主机,随机添加

[ root@redisA ~] # redis- trib.rb add- node - - slave \
192.168.4.57:6357 192.168.4.51:6351
 >>> Adding node 192.168.4.57:6357 to cluster 192.168.4.51:6351
 >>> Performing Cluster Check ( using node 192.168.4.51:6351)
 ...............
 ...............
 [ OK] All 16384 slots covered.
 Automatically selected master 192.168.4.51:6351
 >>> Send CLUSTER MEET to node 192.168.4.57:6357 to make it join the cluster.
 Waiting for the cluster to join.
 >>> Configure node as replica of 192.168.4.51:6351.
 [ OK] New node added correctly .

移除从节点,从节点主机没有槽位范围,直接移除即可

命令格式:
redis-trib.rb del-node 192.168.4.57:6357 主机id值

[ root@redisA ~] # redis- trib.rb del- node 192.168.4.57:6357 \
f6649ea99b2f01faca26217691222c17a3854381
>>> Remov ing node f6649ea99b2f01faca26217691222c17a3854381
from cluster 192.168.4.57:6351
 >>> Sending CLUSTER FORGET messages to the cluster...
 >>> SHUTDOWN the node.

配置redis主从复制

配置主从,4.51为主,4.52为从
若主机做过redis集群,需要在配置文件里面把开启集群,存储集群信息的配置文件都关闭,新主机则不用,这里用之前的redis集群做主从,需要还
原redis服务器

 [ root@redisA ~] # redis- cli - c - h 192.168.4.51- p 6351shutdown
 //先关闭redis集群
 [ root@redisA ~] # v im /etc/redis/6379.conf
 bind 192.168.4.51
 port 6379
 # cluster- enabled yes
 # cluster- config- file nodes- 6351.conf
 [ root@redisA ~] # /etc/init.d/redis_6379 start
 Starting Redis server...
 [ root@redisA ~] # ss - antlp | grep 6379
 LISTEN 0 511 192.168.4.51:6379 *:* users:( ( "redis- server",pid=22274,fd=6) )
 [ root@redisA ~] # redis- cli - h 192.168.4.51
 192.168.4.51:6379> info replication //查看主从配置信息
 # Replication
 role:master //默认是master 服务器
 connected_slaves:0
master_replid:eaa14478158a71c41f947eaea036658c2087e8f2
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:- 1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_by te_offset:0
repl_backlog_histlen:0
192.168.4.51:6379>

配置从库192.168.4.52/24

192.168.4.52:6379> SLAVEOF 192.168.4.51 6379 //把52配置为51的从库
OK

从库查看

192.168.4.52:6379> INFO replication
# Replication
role:slave
master_host:192.168.4.51 //主库为4.51
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sy nc_in_progress:0

主库查看

[ root@redisA ~] # redis- cli - h 192.168.4.51
192.168.4.51:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.4.52,port=6379,state=online,offset=14,lag=1 //从库为4.52
master_replid:db7932eb0ea4302bddbebd395efa174fb079319f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:14
second_repl_offset:- 1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_by te_offset:1
repl_backlog_histlen:14
192.168.4.51:6379>

反客为主,主库宕机后,手动将从库设置为主库

[ root@redisA ~] # redis- cli - h 192.168.4.51shutdown //关闭主库
192.168.4.52:6379> SLAVEOF no one //手动设为主库
OK
192.168.4.52:6379> INFO replication
# Replication
role:master
connected_slaves:0
master_replid:00e35c62d2b673ec48d3c8c7d9c7ea3366eac33a
master_replid2:db7932eb0ea4302bddbebd395efa174fb079319f
master_repl_offset:420
second_repl_offset:421
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_by te_offset:1
repl_backlog_histlen:420
192.168.4.52:6379>

哨兵模式

主库宕机后,从库自动升级为主库
在slave主机编辑sentinel.conf文件
在slave主机运行哨兵程序

[ root@redisB ~] # redis- cli - h 192.168.4.52
192.168.4.52:6379> SLAVEOF 192.168.4.51 6379
OK
192.168.4.52:6379> INFO replication
# Replication
role:slave
master_host:192.168.4.51
master_port:6379
...................
[ root@redisA ~] # /etc/init.d/redis_6379 start
Starting Redis server...
[ root@redisA ~] # redis- cli - h 192.168.4.51
192.168.4.51:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.4.52,port=6379,state=online,offset=451,lag=1
master_replid:4dfa0877c740507ac7844f8dd996445d368d6d0f
master_replid2:0000000000000000000000000000000000000000
..........................
[ root@redisB ~] # v im /etc/sentinel.conf
sentinel monitor redisA 192.168.4.51 6379 1
关键字 关键字 主机名自定义 ip 端口 票数
sentinel auth- pass redis51密码 //连接主库密码,若主库有密码加上这一行
[ root@redisB ~] # redis- sentinel /etc/sentinel.conf //执行,之后把主库宕机
..........................
25371:X 28 Sep 11:16:54.993 # +sdown master redis51192.168.4.516379
25371:X 28 Sep 11:16:54.993 # +odown master redis51192.168.4.516379 #quorum 1/1
25371:X 28 Sep 11:16:54.993 # +new- epoch 325371:X 28 Sep 11:16:54.993 # +try - failover master redis51192.168.4.516379
25371:X 28 Sep 11:16:54.994 # +vote- for- leader be035801d4d48eb63d8420a72796f52f c5cec047 3
.....................
25371:X 28 Sep 11:16:55.287 * +slave slave 192.168.4.51:6379 192.168.4.516379 @ redis51192.168.4.52 6379
25371:X 28 Sep 11:17:25.316 # +sdown slave 192.168.4.51:6379 192.168.4.516379 @ redis51192.168.4.52 6379

配置带验证的主从复制

关闭4.51和4.52,启动之后用info replication查看,各自为主
主库设置密码,在51上面操作

[ root@redisA ~] # redis- cli - h 192.168.4.51shutdown
[ root@redisA ~] # vim /etc/redis/6379.conf
requirepass 123456
[ root@redisA ~] # /etc/init.d/redis_6379 start
Starting Redis server...
[ root@redisA ~] # redis- cli - h 192.168.4.51- a 123456
192.168.4.51:6379> ping
PONG
192.168.4.51:6379>

配置从库主机

[ root@redisB ~] # redis- cli - h 192.168.4.52 shutdown
slaveof 192.168.4.516379
masterauth 123456
[ root@redisB ~] # /etc/init.d/redis_6352 start
Starting Redis server...

52上面查看 52从主库变为从库

[ root@redisB ~] # redis- cli - h 192.168.4.52 - a 123456
192.168.4.52:6379> info replication
# Replication
role:slave
master_host:192.168.4.51
master_port:6379
master_link_status:up

51上面查看 51的从库为52

[ root@redisA ~] # redis- cli - h 192.168.4.51- a 123456
192.168.4.51:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.4.52,port=6379,state=online,offset=98,lag=0

使用RDB文件恢复数据

RDB介绍:
Redis数据库文件,全称Reids DataBase
数据持久化方式之一
在指定时间间隔内,将内存中的数据集快照写入硬盘
术语叫Snapshot快照
恢复时,将快照文件直接读到内存里
相关配置参数
文件名
dbfilename “dump.rdb” 文件名
save “” 禁用RDB
数据从内存保存到硬盘的频率
save 900 1 900秒内且有1次修改
save 300 10 300秒内且有10次修改
save 60 10000 60秒内且有10000修改

[ root@redisA ~] # redis- cli - h 192.168.4.51- a 123456 shutdown
[ root@redisA ~] # v im /etc/redis/6379.conf
dbfilename dump.rdb
#save "" //启用RDB,去掉#号为禁用RDB
save 120 10 //120秒内且有1次修改(满足三个条件中的任意一个都会保存)
 save 300 10
 save 60 10000
[ root@redisA ~] # /etc/init.d/redis_6379 start
 Starting Redis server...
[ root@redisA ~] # redis- cli - h 192.168.4.51- a 123456
 192.168.4.51:6379>
[ root@redisA ~] # redis- cli - h 192.168.4.51- a 123456
 192.168.4.51:6379>
 192.168.4.51:6379> set v1k1
 OK
 192.168.4.51:6379> set v2 k1
 OK
 192.168.4.51:6379> set v3 k1
 OK
 192.168.4.51:6379> set v4 k1
 OK
 192.168.4.51:6379> set v45 k1
 OK
 192.168.4.51:6379> set v46 k1
 OK
 192.168.4.51:6379> set v7 k1
 OK
 192.168.4.51:6379> set v8 k1
 OK
 192.168.4.51:6379> set v9 k1
 OK
 192.168.4.51:6379> set v10 k1
 OK
 192.168.4.51:6379> keys *
1) "v2"
2) "v9"
3) "v10"
4) "v45"
5) "v4"
6) "v1"
7) "v46"
8) "v8"
9) "v7"
10) "v3"
192.168.4.51:6379>exit

备份数据

[ root@redisA 6379] # redis- cli - h 192.168.4.51- a 123456 shutdown //停止服务
[ root@redisA ~] # cd /var/lib/redis/6379/
[ root@redisA 6379] # ls
dump.rdb nodes- 6351.conf
[ root@redisA 6379] # cp dump.rdb dump.rdb.bak //备份dump.rdb,之后删除

删除数据

[ root@redisA 6379] # rm - rf dump.rdb
[ root@redisA 6379] # /etc/init.d/redis_6379 start
 Starting Redis server...
[ root@redisA 6379] # ls
dump.rdb dump.rdb.bak nodes- 6351.conf
[ root@redisA 6379] # redis- cli - h 192.168.4.51- a 123456
192.168.4.51:6379> key s * //已经没有数据
( empty list or set)
192.168.4.51:6379>

恢复数据

[ root@redisA 6379] # redis- cli - h 192.168.4.51- a 123456 shutdown
[ root@redisA 6379] # mv dump.rdb.bak dump.rdb
mv : overwrite ‘ dump.rdb’ ? y
[ root@redisA 6379] # /etc/init.d/redis_6379 start
Starting Redis server...
[ root@redisA 6379] # redis- cli - h 192.168.4.51- a 123456
192.168.4.51:6379> keys *
 1) "v7"
 2) "v46"
 3) "v45"
 4) "v8"
 5) "v4"
 6) "v2"
 7) "v1"
 8) "v3"
 9) "v9"
 10) "v10"
 192.168.4.51:6379>

RDB优点:

高性能的持久化实现:创建一个子进程来执行持久化,先将数据写入临时文件,持久化过程结束后,再用这个临时文件替换上次持久化好的文件;
过程中主进程不做任何IO操作.
比较适合大规模数据恢复,且对数据完整性要求不是非常高的场合
RDB的缺点:
意外宕机时,最后一次持久化的数据会丢失

使用AOF文件恢复数据

使用AOF文件恢复数据
1)AOF介绍
只做追加操作的文件,Append Only File
记录redis服务所有写操作
不断的将新的写操作,追加到文件的末尾
使用cat命令可以查看文件内容
2)参数配置
文件名
appendfilename “appendonly.aof” 指定文件名
appendonly yes 启用aof ,默认no
AOF文件记录写操作的方式
appendfsync always 有新写操作立即记录
appendfsync everysec 每秒记录一次
appendfsync no 从不记录

[ root@redisA 6379] # redis- cli - h 192.168.4.51- a 123456 shutdown
[ root@redisA 6379] # rm - rf dump.rdb
[ root@redisA 6379] # v im /etc/redis/6379.conf
appendonly y es //启用aof,默认no
appendfilename "appendonly .aof " //文件名
appendfsy nc every sec //每秒记录一次
[ root@redisA 6379] # vim /etc/redis/6379.conf
[ root@redisA 6379] # /etc/init.d/redis_6379 start
Starting Redis server...
[ root@redisA 6379] # ls //会出现appendonly .aof文件
appendonly .aof dump.rdb nodes- 6351.conf
[ root@redisA 6379] # cat appendonly .aof //无内容
[ root@redisA 6379] # redis- cli - h 192.168.4.51- a 123456
192.168.4.51:6379> set v1 a1
OK
192.168.4.51:6379> set v2 a2
OK
192.168.4.51:6379> set v3 a3
OK
192.168.4.51:6379> set v4 a4
OK
192.168.4.51:6379> set v5 a5
OK
192.168.4.51:6379> set v6 a6
OK
192.168.4.51:6379> set v7 a7
OK
192.168.4.51:6379> set v8 a7
OK
192.168.4.51:6379> set v9 a9
OK
192.168.4.51:6379> set v10 a10
OK
192.168.4.51:6379> keys *
1) "v2"
2) "v5"
3) "v10"
4) "v9"
5) "v6"
6) "v8"
7) "v3"
8) "v7"
9) "v1"
10) "v4"
192.168.4.51:6379> exit
[ root@redisA 6379] # cat appendonly .aof //有数据

使用AOF恢复数据

备份数据

[ root@redisA 6379] # cp appendonly .aof appendonly .aof.bak
[ root@redisA 6379] # redis- cli - h 192.168.4.51- a 123456 shutdown

删除数据

[ root@redisA 6379] # rm - rf appendonly .aof
[ root@redisA 6379] # /etc/init.d/redis_6379 start
 Starting Redis server...
[ root@redisA 6379] # redis- cli - h 192.168.4.51- a 123456
192.168.4.51:6379> keys * 
( empty list or set)
192.168.4.51:6379> exit

恢复数据

[ root@redisA 6379] # mv appendonly .aof.bak appendonly .aof
mv : overwrite ‘ appendonly .aof’ ? y
[ root@redisA 6379] # redis- cli - h 192.168.4.51- a 123456 shutdown
[ root@redisA 6379] # /etc/init.d/redis_6379 start
Starting Redis server...
[ root@redisA 6379] # redis- cli - h 192.168.4.51- a 123456192.168.4.51:6379> keys *
1) "v9"
2) "v5"
3) "v8"
4) "v2"
5) "v1"
6) "v4"
7) "v10"
8) "v6"
9) "v7"
10) "v3"
192.168.4.51:6379>

修复AOF文件,把文件恢复到最后一次的正确操作

[ root@redisA 6379] # v im appendonly .aof
*2 //可以把这一行删除
$6
SELECT
$1
0
*3
set
$2
a1
*3
$3
.........
[ root@redisA 6379] # redis- check- aof - - fix appendonly .aof //恢复文件
0x 0: Expected prefix '*', got: '$'
AOF analy zed: size=311, ok_up_to=0, diff=311This will shrink the AOF from 311by tes, with 311by tes, to 0 by tes
Continue? [ y /N] : y
Successfully truncated AOF

RDB优点:

可以灵活的设置同步持久化appendfsync always或异步持久化appendfsync verysec
宕机时,仅可能丢失1秒的数据

RDB的缺点:

AOF文件的体积通常会大于RDB文件的体积
执行fsync策略时的速度可能会比RDB慢

Redis数据库常用操作

redis数据类型

String字符串
set key value [ex seconds] [px milliseconds] [nx|xx]
设置key及值,过期时间可以使用秒或毫秒为单位
setrange key offset value
从偏移量开始复写key的特定位的值

 [ root@redisA 6379] # redis- cli - h 192.168.4.51- a 123456
 192.168.4.51:6379> set first "hello world"
 OK
 192.168.4.51:6379> setrange first 6 "Redis" //改写为hello Redis
 ( integer) 11
 192.168.4.51:6379> get first
 "hello Redis"

strlen key,统计字串长度

192.168.4.51:6379> strlen first
 ( integer) 11

append key value 存在则追加,不存在则创建key及value,返回key长度

192.168.4.51:6379> append my name jacob
( integer) 5

setbit key offset value 对key所存储字串,设置或清除特定偏移量上的位(bit),value值可以为1或0,offset为0~2^32之间,key不存在,则创建新key

192.168.4.51:6379> setbit bit 0 1 //设置bit第0位为1
( integer) 0
192.168.4.51:6379> setbit bit 1 0 //设置bit第1位为0
( integer) 0

bitcount key 统计字串中被设置为1的比特位数量

192.168.4.51:6379> setbit bits 0 1 //0001
 ( integer) 0
192.168.4.51:6379> setbit bits 3 1 //1001
( integer) 0
192.168.4.51:6379> bitcount bits //结果为2
( integer) 2

记录网站用户上线频率,如用户A上线了多少天等类似的数据,如用户在某天上线,则使用setbit,以用户名为key,将网站上线日为offset,并在该offset上设置1,最后计算用户总上线次数时,使用bitcount用户名即可,这样即使网站运行10年,每个用户仅占用10*365比特位即456字节

192.168.4.51:6379> setbit peter 100 1 //网站上线100天用户登录了一次
( integer) 0
192.168.4.51:6379> setbit peter 105 1 //网站上线105天用户登录了一次
( integer) 0
192.168.4.51:6379> bitcount peter
( integer) 2

decr key 将key中的值减1,key不存在则先初始化为0,再减1

192.168.4.51:6379> set z 10
OK
192.168.4.51:6379> decr z
( integer) 9
192.168.4.51:6379> decr z
( integer) 8
192.168.4.51:6379> decr bb
( integer) - 1
192.168.4.51:6379> decr bb
( integer) - 2

decrby key decrement 将key中的值,减去decrement

192.168.4.51:6379> set count 100
OK
192.168.4.51:6379> DECRBY cc 20 //定义每次减少20(步长)
( integer) - 20
192.168.4.51:6379> DECRBY cc 20
( integer) - 40

get key 返回key存储的字符串值,若key不存在则返回nil,若key的值不是字串,则返回错误,get只能处理字串

192.168.4.51:6379> get a
( nil)

getrange key start end 返回字串值中的子字串,截取范围为start和end,负数偏移量表示从末尾开始计数,-1表示最后一个字符,-2表示倒数第二个字符

192.168.4.51:6379> set x 123456789
OK
192.168.4.51:6379> getrange x - 5 - 1
"56789"
192.168.4.51:6379> getrange x 0 4
"12345"

incr key 将key的值加1,如果key不存在,则初始为0后再加1,主要应用为计数器

192.168.4.51:6379> set page 20
OK
192.168.4.51:6379> incr page
( integer) 21

incrby key increment 将key的值增加increment

192.168.4.51:6379> set x 10
OK
 192.168.4.51:6379> incr x
 ( integer) 11
 192.168.4.51:6379> incr x
 ( integer) 12

incrbyfloat key increment 为key中所储存的值加上浮点数增量 increment

192.168.4.51:6379> set num 16.1
OK
192.168.4.51:6379> incrby float num 1.1
"17.2"

mset key value [key value …] 设置多个key及值,空格分隔,具有原子性

192.168.4.51:6379> mset j 9 k 29
OK

mget key [key…] 获取一个或多个key的值,空格分隔,具有原子性

192.168.4.51:6379> mget j k
1) "9"
2) "29"

list列表

Redis的list是一个字符队列,先进后出,一个key可以有多个值
lpush key value [value…] 将一个或多个值value插入到列表key的表头,Key不存在,则创建key

192.168.4.51:6379> lpush list a b c //list值依次为c b a
( integer) 3

lrange key start stop 从开始位置读取key的值到stop结束

192.168.4.51:6379> lrange list 0 2 //从0位开始,读到2位为止
1) "c"
2) "b"
3) "a"
192.168.4.51:6379> lrange list 0 - 1 //从开始读到结束为止
1) "c"
2) "b"
3) "a"
192.168.4.51:6379> lrange list 0 - 2 //从开始读到倒数第2位值
1) "c"
2) "b"

lpop key 移除并返回列表头元素数据,key不存在则返回nil

192.168.4.51:6379> lpop list //删除表头元素,可以多次执行
"c"
192.168.4.51:6379> LPOP list
"b"

llen key 返回列表key的长度

192.168.4.51:6379> llen list
"c"

lset key index value 将key中index位置的值修改为value

192.168.4.51:6379> lpush list a b c d
( integer) 5
192.168.4.51:6379> lset list 3 test //将list中第3个值修改为test
OK

rpush key value [value…] 将value插入到key的末尾

192.168.4.51:6379> rpush list3 a b c //list3值为a b c
( integer) 3
192.168.4.51:6379> rpush list3 d //末尾插入d
( integer) 4

rpop key 删除并返回key末尾的值

192.168.4.51:6379> RPOP list3
"d"

hash表

hset key field value 将hash表中field值设置为value

192.168.4.51:6379> hset site google 'www.g.cn'
 ( integer) 1
192.168.4.51:6379> hset site baidu 'www.baidu.com'
( integer) 1

hget key filed 获取hash表中field的值

192.168.4.51:6379> hget site google
"www.g.cn"

hmset key field value [field value…] 同时给hash表中的多个field赋值

192.168.4.51:6379> hmset site google www.g.cn baidu www.baidu.com
OK

hmget key field [field…] 返回hash表中多个field的值

192.168.4.51:6379> hmget site google baidu
1) "www.g.cn"
2) "www.baidu.com"

hkeys key 返回hash表中所有field名称

192.168.4.51:6379> hmset site google www.g.cn baidu www.baidu.com
OK
192.168.4.51:6379> hkey s site
1) "google"
2) "baidu"

hgetall key 返回hash表中所有key名和对应的值列表

192.168.4.51:6379> hgetall site
1) "google"
2) "www.g.cn"
3) "baidu"
4) "www.baidu.com"

hvals key 返回hash表中所有key的值

192.168.4.51:6379> hvals site
1) "www.g.cn"
2) "www.baidu.com"

hdel key field [field…] 删除hash表中多个field的值,不存在则忽略

192.168.4.51:6379> hdel site google baidu
( integer) 2
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值