Centos7构建Redis高性能数据库——Redis概述,应用场景分析,数据回收策略,结合PHP测试Redis服务

一、Redis 概述

Redis 是一个可持久化的单进程单线程 key-value 类型高速内存缓存系统,和Memcached类似,它支持存储的 value 类型相对更多,包括 string(字符串)、list(列表)、set(集合)、zset(sorted set --有序集合)和hashs(哈希类型)。这些数据类型都支持push/pop、add/remove 及取交集并集和差集及更丰富的操作。
优点:

  1. 性能极高–Redis 能支持超过 100K+ 每秒的读写频率。
  2. 丰富的数据类型–Redis 支持二进制案例的 Strings,Lists,Hashes,Sets 及 Ordered Sets 数据类型操作。
  3. 原子性–Redis 的所有操作都是原子性(即所有操作要么成功 要么失败不执行),同时 Redis 还支持对几个操作全并后的原子性执行。
  4. Redis 运行在内存中但是可以持久化到硬盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复制的数据结构,在内存中操作起来非常简单,这样 Redis 可以做很多内部复杂性很强的事。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

二、应用场景分析

MySQL+Memcached 架构的问题:
实际上 MySQL 是适合海量数据存储的,通过 Memcached 将热点数据加载到 cache,加速访问,很多公司曾经都使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,可能会遇到以下问题:

  1. MySQL 需要不断进行拆库拆表,Memcached 也不断跟着扩容,扩容和维护工作占据大量开发时间。
  2. Memcached 与 MySQL 数据库一致性问题。
  3. Memcached 数据命中率低或 down 机,大量访问直接穿透到 DB,MySQL无法支撑。
  4. 跨机房 cache 同步问题。

Redis 的应用场景:
在这里插入图片描述
Redis 更像一个加强版的 Memcached,那么何时使用 Memcached,何时使用 Redis 呢?

  1. Redis 不仅仅支持简单的 k/v 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。
  2. Redis 支持数据的备份,即 master-slave 模式的数据备份。
  3. Redis 支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
  • Memcached 动态系统中减轻数据库负载,提升性能;做缓存,适合多读少写,大数据量的情况(如人人网大量查询用户信息、好友信息、文章信息等)。
  • Redis 适用于对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统(如新浪微博的计数和微博发布部分系统,对数据安全性、读写要求都很高)。

三、Redis 的数据回收策略

  • volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰。
  • volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰。
  • volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰。
  • allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰。
  • allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰。
  • no-enviction(驱逐):禁止驱逐数据。

四、搭建 Redis 高性能数据库

准备工作:

主机名 操作系统 IP地址
Redis CentOS7.7 192.168.1.1

搭建 Redis 高性能数据库需要安装下面软件包:
https://pan.baidu.com/s/1nveVNPuas0gAVYfX59erNg
提取码:yjtw

1.安装并配置 Redis 服务

[root@Redis ~]# ls
anaconda-ks.cfg  phpredis-4.0.2.tar.gz  redis-4.0.9.tar.gz
[root@Redis ~]# tar zxf redis-4.0.9.tar.gz -C /usr/src/
[root@Redis ~]# cd /usr/src/redis-4.0.9/
[root@Redis redis-4.0.9]# make && make PREFIX=/usr/local/redis install  
[root@Redis redis-4.0.9]# ln -s /usr/local/redis/bin/* /usr/local/bin/   #创建软连接优化执行路径
[root@Redis redis-4.0.9]# cd utils/
[root@Redis utils]# ./install_server.sh      #执行启动脚本安装
依次回车即可或自己定义

在这里插入图片描述
安装完成后,可通过Redis的服务控制脚本/etc/init.d/redis_6379来对Redis服务进行控制

[root@Redis utils]# netstat -anpt | grep redis      #查看redis端号
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      4355/redis-server 1 
[root@Redis utils]# /etc/init.d/redis_6379 stop     #关闭Redis服务
Stopping ...
Redis stopped
[root@Redis utils]# /etc/init.d/redis_6379 start    #启用Redis服务
Starting Redis server...
[root@Redis utils]# /etc/init.d/redis_6379 status   #查看Redis运行状态
Redis is running (5146)

对Redis主配置文件进行修改

[root@Redis ~]# sed -i '/^bind 127.0.0.1$/s/127.0.0.1/192.168.1.1/g' /etc/redis/6379.conf   #将监听端口改为本机IP地址
[root@Redis ~]# sed -i '/protected-mode/s/yes/no/g' /etc/redis/6379.conf          #关闭redis的保护模式
[root@Redis ~]# sed -i '/daemonize/s/no/yes/g' /etc/redis/6379.conf 		      #开启redis的后台守护进程模式
[root@Redis ~]# sed -i '/requirepass/s/foobared/123123/g' /etc/redis/6379.conf    #设置redis的密码为123123
[root@Redis ~]# sed -i '/requirepass 123123/s/^#//g' /etc/redis/6379.conf   	  #开启redis的密码
[root@Redis ~]# /etc/init.d/redis_6379 restart		#重启redis服务
Stopping ...
Redis stopped
Starting Redis server...

redis.conf主配置文件详解

  • daemonize yes :以后台daemon方式运行redis
  • pidfile “/var/run/redis.pid” :redis以后台运行,默认pid文件路径/var/run/redis.pid
  • port 6379 :默认端口
  • bind 127.0.0.1 :默认绑定本机所有ip地址,为了安全,可以只监听内网ip
  • timeout 300 :客户端超时设置,单位为秒
  • loglevel verbose :设置日志级别,支持四个级别:debug、notice、verbose、warning
  • logfile stdout :日志记录方式,默认为标准输出,logs不写文件,输出到空设备/dev/null
  • logfile “/usr/local/redis/var/redis.log” :可以指定日志文件路径
  • databases 16 :开启数据库的数量
  • save 900 1 :900秒内,执行1次写操作后触发快照
  • save 300 10 :300秒内,执行10次写操作
  • save 60 10000 :60秒内,执行10000次写操作
  • rdbcompression yes :启用数据库lzf压缩,也可以设置为no
  • dbfilename dump.rdb :本地快照数据库名称
  • dir “/usr/local/redis/var/” :本地快照数据库存放目录
  • requirepass 123456 :设置redis数据库连接密码
  • maxclients 10000 :同一时间最大客户端连接数,0为无限制
  • maxmemory 1024MB :设定redis最大使用内存,值要小于物理内存,必须设置
  • appendonly yes :开启日志记录,相当于MySQL的binlog
  • appendfilename “appendonly.aof” :日志文件名,注意:不是目录路径
  • appendfsync everysec :设置日志同步的频率,每秒执行同步,还有两个参数always、no一般设置为everysec,相当于MySQL事物日志的写方式
  • Slaveof :设置数据库为其他数据库的从数据库
  • Masterauth :主数据库连接需要的密码验证
  • vm-enabled :是否开启虚拟内存支持 (vm开头的参数都是配置虚拟内存的)
  • vm-swap-file :设置虚拟内存的交换文件路径
  • vm-max-memory :设置redis使用的最大物理内存大小
  • vm-page-size :设置虚拟内存的页大小
  • vm-pages :设置交换文件的总的page数量
  • vm-max-threads :设置使用swap存储同时使用的线程数量,通常设置值为核心数相同,如果设置为0,则会以串行方式,对数据的完整性有着极大的保证
  • Glueoutputbuf :把小的输出缓存存放在一起
  • hash-max-zipmap-entries :设置hash的临界值
  • Activerehashing :重新hash

2.Redis命令工具

Redis软件提供了多个命令工具,当Redis安装时,所包含的软件包工具会同时被安装到系统中,在系统中可以直接使用。

[root@Redis ~]# ls /usr/local/bin/
redis-benchmark  redis-check-rdb  redis-sentinel
redis-check-aof  redis-cli        redis-server

命令工具及作用如下:

  • redis—server:用于启用Redis的工具
  • redis—benchmark:用于检测Redis在本机运行效率
  • redis—check—aof:修复AOF持久化文件
  • redis—check—rdb:修复RDB持久化文件
  • redis—cli:Redis命令工具
  • redis—setinel:redis—server命令工具软连接

五、结合 PHP 测试 Redis 服务

[root@Redis ~]# mount /dev/cdrom /media/cdrom
mount: /dev/sr0 写保护,将以只读方式挂载
[root@Redis ~]# yum -y install wget
[root@Redis ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo    

在这里插入图片描述

[root@Redis ~]# yum -y install httpd php  php-devel
[root@Redis ~]# php -v		#查看php版本
PHP 5.4.16 (cli) (built: Apr  1 2020 04:07:17) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
[root@Redis ~]# tar zxf phpredis-4.0.2.tar.gz -C /usr/src/
[root@Redis ~]# cd /usr/src/phpredis-4.0.2/
[root@Redis phpredis-4.0.2]# /usr/bin/phpize 
Configuring for:
PHP Api Version:         20100412
Zend Module Api No:      20100525
Zend Extension Api No:   220100525
[root@Redis phpredis-4.0.2]# ./configure --with-php-config=/usr/bin/php-config
[root@Redis phpredis-4.0.2]# make && make install
[root@Redis phpredis-4.0.2]# echo -e "extension_dir = \"/usr/lib64/php/modules/\"\nextension = redis.so" >>/etc/php.ini   
[root@Redis phpredis-4.0.2]# systemctl start httpd

1.测试php连接redis

[root@Redis ~]# vim /var/www/html/test.php
<?php
    //连接本地的 Redis 服务
   $redis = new Redis();
   $redis->connect('192.168.1.1', 6379);
   $redis->auth('123123');
   echo "Redis 连接成功";
?>

在这里插入图片描述

2.测试写入list列表

[root@Redis ~]# vim /var/www/html/test1.php
<?php
   //连接本地的 Redis 服务
   $redis = new Redis();
   $redis->connect('192.168.1.1', 6379);
   $redis->auth('123123');
   echo "Connection to server sucessfully<br>";
   //存储数据到列表中
   $redis->lpush("tutorial-list", "Redis");
   $redis->lpush("tutorial-list", "Mongodb");
   $redis->lpush("tutorial-list", "Mysql");
   // 获取存储的数据并输出
   $arList = $redis->lrange("tutorial-list", 0 ,5);
   echo "Stored string in redis<br>";
   print_r($arList);
?>

在这里插入图片描述

3.测试写入string字符串

[root@Redis ~]# vim /var/www/html/test2.php
<?php
   //连接本地的 Redis 服务
   $redis = new Redis();
   $redis->connect('192.168.1.1', 6379);
   $redis->auth('123123');
  echo "这是 Redis数据库服务器<br>";
   //设置 redis 字符串数据
   $redis->set("tutorial-name", "xingming");
   // 获取存储的数据并输出
   echo "Stored string in redis: <br>" . $redis->get("tutorial-name");
?>

在这里插入图片描述

4.测试查看所有keys键值对

[root@Redis ~]# vim /var/www/html/test3.php
<?php
   //连接本地的 Redis 服务
   $redis = new Redis();
   $redis->connect('192.168.1.1', 6379);
   $redis->auth('123123');
   echo "Connection to server sucessfully<br>";
   // 获取数据并输出
   $arList = $redis->keys("*");
   echo "Stored keys in redis:<br>";
   print_r($arList);
?>

在这里插入图片描述

六、Redis常用操作命令

1.Redis中操作之String – 字符串

概述:
String 是简单的 key-value 键值对,value 不仅可以是 String,也可以是数字。String在 redis 内部存储默认就是一个字符串,被 redisObject 所引用,当遇到 incr,decr 等操作时会转成数值型进行计算,此时 redisObject 的 encoding 字段为int。

[root@Redis ~]# redis-cli -h 192.168.1.1 -p 6379 -a 123123
192.168.1.1:6379> set hello world
OK
192.168.1.1:6379> get hello
"world"
192.168.1.1:6379> exists hello		 	#验证 key 是否存在
(integer) 1
192.168.1.1:6379> type hello
string
192.168.1.1:6379> substr hello 1 2		#查看 key 的第12两个字符
"or"
192.168.1.1:6379> append hello !		# key 后添加字符 
(integer) 6
192.168.1.1:6379> get hello
"world!"
192.168.1.1:6379> keys h*				#查看以h开头的 key
1) "hello"
192.168.1.1:6379> set name xiaoming
OK
192.168.1.1:6379> keys *
1) "tutorial-name"
2) "name"
3) "hello"
4) "tutorial-list"
192.168.1.1:6379> RANDOMKEY				#随机返回一个 key
"name"
192.168.1.1:6379> RANDOMKEY				#随机返回一个 key
"hello"
192.168.1.1:6379> get name
"xiaoming"
192.168.1.1:6379> set name xiaohong
OK
192.168.1.1:6379> get name
"xiaohong"
192.168.1.1:6379> expire name 10		#设置 key 值的超时时间 
(integer) 1
192.168.1.1:6379> ttl name				#查看 key 值当前剩余的超时时间
(integer) 7
192.168.1.1:6379> get name
(nil)
192.168.1.1:6379> keys n*
(empty list or set)

2.Redis中操作之list – 列表

概述:
Redis 列表是简单的字符串列表,可以类比到 C++ 中的 std::list,简单的说就是一个列表或者说是一个队列。可以从头部或尾部向 Redis 列表添加元素。列表的最大长度为2^32 - 1,也即每个列表支持超过40亿个元素。Redis list的实现为一个双向列表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。
应用场景:
Redis list的应用场景非常多,也是Redis最重要的数据结构之一,比如twitter的关注列表、粉丝列表等都可以用Redis的list结构来实现,再比如有的应用使用Redis的list类型实现一个简单的轻量级消息队列,生产者push,消费者pop/bpop。

[root@Redis ~]# redis-cli -h 192.168.1.1 -p 6379 -a 123123
192.168.1.1:6379> rpush list1 1				#创建列表并在尾部插入元素
(integer) 1
192.168.1.1:6379> rpush list1 2
(integer) 2
192.168.1.1:6379> lrange list1 0 1			#验证列表中的第0个元素到第1个元素
1) "1"
2) "2"
192.168.1.1:6379> lpush list1 0				#在列表头部插入元素
(integer) 3
192.168.1.1:6379> lrange list1 0 1			#验证列表中的第0个元素到第1个元素
1) "0"
2) "1"
192.168.1.1:6379> lrange list1 0 2			#验证列表中的第0个元素到第2个元素
1) "0"
2) "1"
3) "2"
192.168.1.1:6379> llen list1				#查看列表中的元素的数量
(integer) 3
192.168.1.1:6379> lindex list1 1			#定位到列表中的第1个元素
"1"
192.168.1.1:6379> ltrim list1 1 2			#截取列表中的第1个元素到第2个元素
OK
192.168.1.1:6379> lrange list1 0 10			#查看列表中的第0个元素到第10个元素
1) "1"
2) "2"
192.168.1.1:6379> lset list1 1 haha			#更改列表中的第1个元素值为haha
OK
192.168.1.1:6379> lrange list1 0 10
1) "1"
2) "haha"
192.168.1.1:6379> lset list1 2 haha			#验证更改时得元素位置不能大于现有元素的数量
(error) ERR index out of range
192.168.1.1:6379> lrange list1 0 10
1) "1"
2) "haha"
192.168.1.1:6379> rpush list1 haha			#在列表尾部插入新的元素
(integer) 3
192.168.1.1:6379> lrange list1 0 10
1) "1"
2) "haha"
3) "haha"
192.168.1.1:6379> lrem list1 2 haha			#删除列表中两个值为 haha 的元素
(integer) 2
192.168.1.1:6379> lrange list1 0 10
1) "1"
192.168.1.1:6379> rpush list1 haha
(integer) 2
192.168.1.1:6379> rpush list1 haha
(integer) 3
192.168.1.1:6379> rpush list1 haha
(integer) 4
192.168.1.1:6379> rpush list1 haha
(integer) 5
192.168.1.1:6379> lrange list1 0 10
1) "1"
2) "haha"
3) "haha"
4) "haha"
5) "haha"
192.168.1.1:6379> lpop list1				#删除列表内开头的第一个元素
"1"
192.168.1.1:6379> lrange list1 0 10
1) "haha"
2) "haha"
3) "haha"
4) "haha"
192.168.1.1:6379> lpop list1
"haha"
192.168.1.1:6379> lrange list1 0 10
1) "haha"
2) "haha"
3) "haha"

3.Redis中操作之set – 无序集合

概述:
可以理解为一堆值不重复的列表,类似数学领域中的集合概念,且Redis也提供了针对集合的求交集、并集、差集等操作。set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。
应用场景:
Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。又或者在微博应用中,每个用户关注的人存在一个集合中,就很容易实现求两个人的共同好友功能。

[root@Redis ~]# redis-cli -h 192.168.1.1 -p 6379 -a 123123
192.168.1.1:6379> sadd set1 0			#创建 set1 并赋值 0
(integer) 1
192.168.1.1:6379> sadd set1 1			#在 set1 后追加值 1
(integer) 1
192.168.1.1:6379> smembers set1			#显示 set1 的所有值
1) "0"
2) "1"
192.168.1.1:6379> scard set1			#显示 set1 的基数
(integer) 2
192.168.1.1:6379> sismember set1 0		#显示 set1 中是否包含值为 0 的元素
(integer) 1
192.168.1.1:6379> srandmember set1		#随机返回 set1 中的元素值
"0"
192.168.1.1:6379> sadd set2 0			#创建 set2 并添加元素
(integer) 1
192.168.1.1:6379> sadd set2 2
(integer) 1
192.168.1.1:6379> sinter set1 set2		#过滤 set1  set2 的交集
1) "0"
192.168.1.1:6379> sinterstore set3 set1 set2 	# set1  set2 的交集保存到 set3
(integer) 1
192.168.1.1:6379> smembers set3
1) "0"
192.168.1.1:6379> sunion set1 set2		#过滤 set1  set2 的并集
1) "0"
2) "1"
3) "2"
192.168.1.1:6379> sdiff set1 set2		#相对于 set2 来讲,set1的差集
1) "1"
192.168.1.1:6379> sdiff set2 set1		#相对比 set1 来讲,set2的差集
1) "2"
192.168.1.1:6379> keys *				#查看已经存在的各种数据类型的建
1) "list1"
2) "tutorial-name"
3) "set3"
4) "set2"
5) "hello"
6) "set1"
7) "tutorial-list"

4.Redis中操作之zset – 有序集合

概述:
Redis有序集合类似Redis无序集合,不同的是增加了一个功能,即集合是有序的。一个有序集合的每个成员带有分数,用于进行排序。Redis有序集合添加、删除和测试的时间复杂度均为O(1)(固定时间,无论里面包含的元素集合的数量)。列表的最大长度为2^32- 1元素(4294967295,超过40亿每个元素的集合)。
Redis sorted set的内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,而跳跃表里存放的是所有的成员,排序依据是HashMap里存的score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。
使用场景:
Redis sorted set的使用场景与set类似,区别是set不是自动有序的,而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。当你需要一个有序的并且不重复的集合列表,那么可以选择sorted set数据结构。

[root@Redis ~]# redis-cli -h 192.168.1.1 -p 6379 -a 123123
192.168.1.1:6379> zadd zset1  1 baidu.com		#创建集合 zset1,添加元素baidu.com,并且设置元素的 score 值(有序集合的序列号)为1
(integer) 1
192.168.1.1:6379> zadd zset1 2 sina.com
(integer) 1
192.168.1.1:6379> zadd zset1 3 qq.com
(integer) 1
192.168.1.1:6379> zrange zset1 0 2				#查看集合 zset1 中的元素
1) "baidu.com"
2) "sina.com"
3) "qq.com"
192.168.1.1:6379> zcard zset1					#查看集合 zset1 中的基数
(integer) 3
192.168.1.1:6379> zscore zset1 baidu.com		#验证元素 baidu.com 在集合 zset1 中的 score 
"1"
192.168.1.1:6379> zscore zset1 qq.com			#验证元素 qq.com 在集合 zset1 中的 score 
"3"
192.168.1.1:6379> zrevrange zset1 0 1			#倒序查找集合中的元素
1) "qq.com"
2) "sina.com"
192.168.1.1:6379> zrem zset1 qq.com				#删除集合中的元素 qq.com
(integer) 1
192.168.1.1:6379> zrange zset1 0 5				#验证集合中的所有元素
1) "baidu.com"
2) "sina.com"
192.168.1.1:6379> zincrby zset1 5 taobao.com	#设置该元素 socre 值为5,如若已经存在 socre 值为5的元素,那么则按照数字0-9,字母a-z进行自动排序     
"5"
192.168.1.1:6379> zrange zset1 0 5				#验证集合中的元素
1) "baidu.com"
2) "sina.com"
3) "taobao.com"
192.168.1.1:6379> zrange zset1 0 5 withscores	#查看集合中的元素值并输出其本身的 score 
1) "baidu.com"
2) "1"
3) "sina.com"
4) "2"
5) "taobao.com"
6) "5"
192.168.1.1:6379> zincrby zset1 10 haha.com		#添加新元素 haha.com 并指定其本身 score 
"10"
192.168.1.1:6379> zrange zset1 0 5 withscores	#验证元素的排序
1) "baidu.com"
2) "1"
3) "sina.com"
4) "2"
5) "taobao.com"
6) "5"
7) "haha.com"
8) "10"
192.168.1.1:6379> zincrby zset1 15 baidu.com	#如若新添加的元素已经存在,那么会在原有 score 值得基础上增加指定的 score        
"16"
192.168.1.1:6379> zrange zset1 0 5 withscores	#验证元素 baidu.com  score 值变为16,增加了15,并排序到集合的末尾
1) "sina.com"
2) "2"
3) "taobao.com"
4) "5"
5) "haha.com"
6) "10"
7) "baidu.com"
8) "16"

注:此外,还有zrevrank,zrevrange,zrangebyscore,zremrangebyrank,zramrangebyscore,zinterstore/zunionstore等操作

5.Redis中操作之hash

概述:
类似C#中的dict类型或者C++中的hash_map类型。Redis Hash对应Value内部实际就是一个HashMap,这个Hash的成员比较少时Redis为了节省内存会采用类似一堆数组的方式来紧凑存储,而不会采用真正的HashMap结构,对应的value redisObject的encoding为zipmap,当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。
应用场景:
假设有多个用户及对应的用户信息,可以用来存储以用户ID为key,将用户信息序列化为比如json格式做为value进行保存。

[root@Redis ~]# redis-cli -h 192.168.1.1 -p 6379 -a 123123
192.168.1.1:6379> hset hash1 key1 value1		#设置键值hash1,并且指定内部 key  value 对应
(integer) 1
192.168.1.1:6379> hget hash1 key1				#查看 hash1 中的 key1 的值 
"value1"
192.168.1.1:6379> hexists hash1 key1			#检查 hash1 中是否由 key1
(integer) 1
192.168.1.1:6379> hset hash1 key2 value2		# hash1 中创建 key2
(integer) 1
192.168.1.1:6379> hlen hash1					#查看 hash1 中键值的基数
(integer) 2
192.168.1.1:6379> hkeys hash1					#查看 hash1 中具体包含的键
1) "key1"
2) "key2"
192.168.1.1:6379> hvals hash1					#查看 hash1 中具体包含的值
1) "value1"
2) "value2"
192.168.1.1:6379> hmget hash1 key1 key2 		#通过明确指定 hash1 中的key,去查看值是什么
1) "value1"
2) "value2"
192.168.1.1:6379> hgetall hash1					#查看 hash1 中包含的所有键和值的对应
1) "key1"
2) "value1"
3) "key2"
4) "value2"
192.168.1.1:6379> hset hash1 key4 10			#添加新键key4,值为整数10
(integer) 1
192.168.1.1:6379> hincrby hash1 key4 15	     	#将key4执行计算加10(仅限整数)
(integer) 25
192.168.1.1:6379> hmset hash1 key5 value5 key6 value6 key7 value7	#批量添加键值对
OK
192.168.1.1:6379> hgetall hash1					#验证批量添加的键值对
 1) "key1"
 2) "value1"
 3) "key2"
 4) "value2"
 5) "key4"
 6) "10"
 7) "key5"
 8) "value5"
 9) "key6"
10) "value6"
11) "key7"
12) "value7"

6.Redis中操作之其他操作

[root@Redis ~]# redis-cli -h 192.168.1.1 -p 6379 -a 123123
192.168.1.1:6379> dbsize 					#查看所有key的数目 
192.168.1.1:6379> flushdb  					#删除当前选择数据库中的所有key 
192.168.1.1:6379> flushall  				#删除所有数据库中的所有key 
192.168.1.1:6379> save						#将数据同步保存到磁盘 
192.168.1.1:6379> bgsave 					#异步保存 
192.168.1.1:6379> lastsave 					#上次成功保存到磁盘的Unix时间戳 
192.168.1.1:6379> info						#查询server信息 
192.168.1.1:6379> slaveof					#改变复制策略设置

猜你喜欢

转载自blog.csdn.net/weixin_46902396/article/details/109580725
今日推荐