redis入门

redis

Redis介绍、常用指令
1)radis—>Remote Dictionary Server(远程字典服务器,是一款高性能的(Key/Values)分布式内存数据库
支持数据持久化(定期把内存里数据存储到硬盘),支持多种数据类型string、list、hash
支持master-salve模式数据备份

2)配置服务运行参数

默认端口		6379 
主配置文件		/etc/redis/6379.conf 
日志文件		/var/log/redis _6379.log 
数据库目录		/var/lib/redis/6379 
服务启动程序  	/usr/local/bin/redis-server 
命令行连接		redis-cli  (-h 地址 -p 端口 [-a 密码])
启动命令      	 /etc/init.d/redis_6379  start  status  stop 

常用命令

set key名key值		//存储1个key值
mset key名列表		//存储多个key值
get key名				//获取key值
mget						//获取多个key值
select 数据库编号		//切换库,默认0-15,16个库
keys  *					//显示所有key名
keys  a?					//显示指定key名
exists  key名			//测试key名是否存在
ttl  key名				//查看key生存时间
type key名				//查看key类型
move key名库编号		//移动key到指定库,一次一个
expire key名数字		//设置key有效时间
del key名				//删除指定的key 
save						//保存所有key到硬盘
shutdown				//停止服务   
flushall 				 	//删除内存里所有key 
flushdb					//删除所在库的所有key 

2、搭建Redis服务

[root@test ~]# rpm -q gcc || yum -y install gcc
[root@test ~]# tar -zxvf redis-4.0.8.tar.gz   	#上传
[root@test ~]# cd redis-4.0.8/
[root@test redis-4.0.8]#  make && make install
[root@test redis-4.0.8]# ./utils/install_server.sh   //初始化,一路enter
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 service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!

启动

[root@test ~]# /etc/init.d/redis_6379  start
[root@test ~]# /etc/init.d/redis_6379   status
Redis is running (4410)
[root@test ~]# ss -ntulp | grep 6379
tcp    LISTEN     0      128    127.0.0.1:6379  *:*    users:(("redis-server",..

redis使用

[root@test ~]# redis-cli		#此处为本机登陆练习,不需-h -p
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set school beijing
OK
127.0.0.1:6379> get school
"beijing"
127.0.0.1:6379> save
OK
127.0.0.1:6379> select 1     #0-15库,默认0库,16个库
 [1]> mset i 2  j 6  k 7
127.0.0.1:6379[1]> select 0
127.0.0.1:6379> EXISTS age    #age是否存在  0不存在,1存在
(integer) 0
127.0.0.1:6379> exists school   #name 是否存在
(integer) 1
127.0.0.1:6379> get school
"beijing"
127.0.0.1:6379> set name bj     #已有值,再设置重新赋值
OK
127.0.0.1:6379> get name
"bj"
127.0.0.1:6379> ttl x			#-1表示永久储存
(integer) -1					
127.0.0.1:6379> EXPIRE x 20     #设置存储时间20s
127.0.0.1:6379> ttl x  			#查看剩余时间
127.0.0.1:6379> ttl x
(integer) -2 					#-2表示已经过期
127.0.0.1:6379> move school 3     #一次移动一个
127.0.0.1:6379> select 3
127.0.0.1:6379[3]> keys *
1) "school"
127.0.0.1:6379> type i
string
127.0.0.1:6379> lpush tea A B
(integer) 2
127.0.0.1:6379> type tea
list
127.0.0.1:6379[3]> select 0
127.0.0.1:6379> keys *
127.0.0.1:6379> del i j k 		#一次删除多个变量
127.0.0.1:6379> del name  	#删除指定的一个变量
127.0.0.1:6379> keys *
127.0.0.1:6379> flushdb  		#删除当前库下的所有变量
127.0.0.1:6379> flushall 			#删除内存里的所有变量
127.0.0.1:6379> save 			#手动保存数据到硬盘
127.0.0.1:6379> shutdown 		#停止服务

3)常用配置

[root@test ~]# grep -vE  "^#|^$"  /etc/redis/6379.conf
bind 127.0.0.1						#iP地址 
protected-mode yes
port 6379							#端口 
...
daemonize yes						#守护进程方式运行 
databases16							#数据库个数 
logfile  /var/log/redis_6379.log	#日志文件 
maxclients 10000					#并发连接数量 
dir  /var/lib/redis/6379			#数据库目录
...

4)内存清除策略

volatile-lru					#最近最少使用(针对设置了TTL的key)
allkeys-lru					#删除最少使用的key(针对所有的key)
allkeys-lfu					#从所有key中清除使用频率最少的key
volatile-lfu					#从所有配置了过期时间的key中清除使用频率最少的key
volatile-random 			#在设置了TTL的key里随机移除
allkeys-random			#随机移除key
volatile-tl(minor TTL)		#移除最近过期的key
noeviction 					#不删除,直接给报错信息

5)内存优化

maxmemory	1g					#最大内存,固定,自己独享
maxmemory-policy策略			#定义使用策略 
maxmemory-samples 		15		#选取key模板的个数(针对lru.ttl. lfu策略必填)

对子符类型数据管理的命令

[root@test ~]# /etc/init.d/redis_6379 stop
Stopping ...
Redis stopped
[root@test ~]# vim /etc/redis/6379.conf
70   bind  192.168.1.11
93   port  6379
501  requirepass  123456 #开启密码功能,搭建集群时不要打开注释

set key

set key value  [EX seconds]  [PX milliseconds]  [NX|XX]
ex 秒,px  毫秒,不写默认永久;  nx无变量值时存入,有值不操作;  xx 有变量值时覆盖,无值不操作
> set z 14
> set y 8 ex 20					#20秒有效
> set x 11 px 20				#20毫秒有效
> set x 4 nx				#设置变量,无值时存入
> get x			
"4"
> set x 5 nx				#设置变量,有值时不操作
(nil)
> get x						
"4"  #未存入还是之前的4
> set x 5 xx				#设置变量,有值覆盖
OK
> get x
"5"
> set y 99 xx		#设置变量,无值不操作
(nil)			当前没有y

get key

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

setrange  key  offset  value 
从偏移量开始复写key的特定位的值,已有字串覆盖
192.168.1.11:6379> set name jerry
OK
192.168.1.11:6379> get name
jerry
192.168.1.11:6379> setrange name 0 tom
(integer) 5   
192.168.1.11:6379> get name
"tomry"			#tom 从0位j开始覆盖   

getrange key start end

192.168.1.11:6379> getrange name 0 0
"j"
192.168.1.11:6379> getrange name 0 2
"jer"
192.168.1.11:6379> getrange name 0 3
192.168.1.11:6379> getrange name 0 4
"jerry"
192.168.1.11:6379> getrange name 0 5  #超出了全部截取
"jerry"
192.168.1.11:6379> strlen name		#strlen key,统计字串长度 
(integer) 5
192.168.1.11:6379> append name tom		#append key value   追加,不存在则创建
(integer) 8
192.168.1.11:6379> get name
"jerrytom"

decr decrby incr incrby incrbyfloat 实现加减

192.168.1.11:6379> decr x
(integer) 8
192.168.1.11:6379> decr x
(integer) 7
192.168.1.11:6379> set x 9
OK
192.168.1.11:6379> decr x
(integer) 8
192.168.1.11:6379> decrby x 2
(integer) 6
192.168.1.11:6379> incr x
(integer) 7
192.168.1.11:6379> incrby x 2
(integer) 9
192.168.1.11:6379> incrbyfloat  x 0.5
"9.5"

mset key value [key value.…] 设置多个key及值,空格分隔,具有原子性
mget key [key……] 获取一个或多个key的值,空格分隔,具有原子性

192.168.1.11:6379>  mset  j 1 k 2 l 3
OK
192.168.1.11:6379> mget j k l
1) "1"
2) "2"
3) "3"

setbit统计字串中被设置为1的比特位,offset 可以到2^32位,用于统计

setbit  key  offset (第几位)  value(0或1)
>setbit peter  0  1			/设置bit第0位为1       登陆
>setbit peter  1  0			/设置bit第1位为0       未登陆
>setbit peter  2  0			/设置bit第2位为0       未登陆

bitcount key   统计
> bitcount peter			#统计登录次数
(integer) 1
作用:节省内存空间
场景说明:
    记录网站用户上线频率,如用户A上线了多少天等类似的数据如用户在某天上线,则使用setbit,以用户名为key,将网站上线日为offset,并在该offset上设置1,最后计算用户总上线次数时,使用bitcount用户名即可。这样,即使网站运行10年,每个用户仅占用10*365比特位即456字节。

2、列表list类型数据管理的命令
列表简介:Redis的list是一个字符队列先进后出,一个key可以有多个值

lpush key value [value.…]		将一个或多个值value插入到列表key的表头,Key不存在,则创建key

>lpush list a b c					//创建list值依次为c、b、a,倒序存入
(integer) 3
Irange key start stop		从开始位置读取key的值到stop结束
192.168.1.11:6379> lrange list 0 2
1) "c"
2) "b"
3) "a"
192.168.1.11:6379> lrange list 0 1
1) "c"
2) "b"
192.168.1.11:6379> llen list		#返回列表key的长度
(integer) 3 
192.168.1.11:6379> lpop list		#删除最后一个并返回删除的数据
"c"
192.168.1.11:6379> lrange list 0 2
1) "b"
2) "a"
192.168.1.11:6379> rpop list		#移除第一个并返回删除的数据,key不存在则返回nil
"a"
192.168.1.11:6379> lrange list 0 2
1) "b"
192.168.1.11:6379> rpush list c d e		#将value插入到key的未尾
(integer) 4
192.168.1.11:6379> lindex list 0		#返回列表中0号位的值
"b"
192.168.1.11:6379> lset list 0 ab
OK
192.168.1.11:6379> lindex list 0		#将list中0号位置的值修改为value
"ab"

3、对hash表类型数据管理的命令

Redis hash是一个string类型的field和value的映射表,一个key可对应多个field,一个field对应一个value
将一个对象存储为hash类型,较于每个字段都存储成string类型更能节省内存

hset key field value -将hash表中field值设置为value
192.168.1.11:6379> hset site baidu www.baidu.com
(integer) 1
192.168.1.11:6379> keys site
1) "site"
192.168.1.11:6379> type site
hash
192.168.1.11:6379> hget site baidu
"www.baidu.com"

hmset key field value [field value.…] -同时给hash表中的多个field赋值
192.168.1.11:6379> hmset site jd www.jd.com  163 www.163.com
OK
192.168.1.11:6379> hkeys site		#返回hash表中所有field名称
1) "baidu"
2) "jd"
3) "163"		
192.168.1.11:6379> hvals site		#返回hash表中所有field的值 
1) "www.baidu.com"
2) "www.jd.com"
3) "www.163.com"	
192.168.1.11:6379> hgetall site		#返回hash表中所有field和value 
1) "baidu"
2) "www.baidu.com"
3) "jd"
4) "www.jd.com"
5) "163"
6) "www.163.com"

192.168.1.11:6379> hdel site  baidu		#删除hash表中多个列的值,不存在则忽略 
(integer) 1

三、部署LNMP+redis

redis主机

[root@test ~]# rpm -q gcc || yum -y install gcc
[root@test ~]# tar -zxvf redis-4.0.8.tar.gz   	#上传
[root@test ~]# cd redis-4.0.8/
[root@test redis-4.0.8]#  make && make install
[root@test redis-4.0.8]# ./utils/install_server.sh
[root@test ~]# /etc/init.d/redis_6379   status

redis改配置、设置密码、测试

[root@test ~]# /etc/init.d/redis_6379 stop
Stopping ...
Redis stopped
[root@test ~]# vim /etc/redis/6379.conf
70   bind  192.168.1.11
93   port  6379
501  requirepass  123456 #开启密码功能,搭建集群时不要打开注释
[root@test ~]# vim +43 /etc/init.d/redis_6379
	$CLIEXEC -h 192.168.1.11 -p 6379 -a 123456 shutdown
#否则只能 redis-cli -h 192.168.1.11 -p 6379 -a 123456 shutdown 停服务,stop无效
[root@test ~]# /etc/init.d/redis_6379  start
Starting Redis server...
[root@test ~]# ss -utnlp  | grep 6379
tcp    LISTEN     0      128    192.168.1.11:6379   *:*   users:(("redis-server",...
[root@test ~]# redis-cli -h 192.168.1.11  -p  6379
192.168.1.11:6379>  select 0
(error) NOAUTH Authentication required.
192.168.1.11:6379> auth 123456			#输入密码 可操纵  或者-a 指定
OK
192.168.1.11:6379>  select 0
OK
192.168.1.11:6379> exit
[root@test ~]# redis-cli -h 192.168.1.11  -p  6379  -a 123456
192.168.1.11:6379> select 0
OK

部署环境机打开动静分离测试

[root@lnmp ~]# yum -y install gcc pcre-devel zlib-devel
[root@lnmp ~]# tar -xf nginx-1.12.2.tar.gz
[root@lnmp ~]# cd nginx-1.12.2/
[root@lnmp nginx-1.12.2]# ./configure
[root@lnmp nginx-1.12.2]# make  &&make install
[root@lnmp nginx-1.12.2]# vim  +65  /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@lnmp nginx-1.12.2]# /usr/local/nginx/sbin/nginx   -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@lnmp ~]# yum -y install php-fpm.x86_64
[root@lnmp ~]# /usr/local/nginx/sbin/nginx
[root@lnmp ~]# systemctl start php-fpm
[root@lnmp ~]# vim /usr/local/nginx/html/test.php   #编写php网页
<?php
 echo "hellow world";
?>
[root@lnmp ~]# curl http://localhost/test.php		#测试动静分离
 hellow world

php配置

[root@lnmp ~]# yum -y install php  php-devel
[root@lnmp ~]# which php
/usr/bin/php
[root@lnmp ~]# php -m     #列出php 支持的模块
[root@lnmp ~]# php -m | grep -E mysql  #没有  需安装php-mysql
[root@lnmp ~]# php -m | grep redis			#没有  需要配置redis
[root@lnmp ~]# php -m | grep -E "mysql | redis" 

配置php-redis支持redis调用

[root@lnmp ~]# yum -y install php  php-devel  automake  autoconf
[root@lnmp ~]# tar -zxvf php-redis-2.2.4.tar.gz
[root@lnmp ~]# cd phpredis-2.2.4/
[root@lnmp phpredis-2.2.4]# phpize
Configuring for:
PHP Api Version:         20100412
Zend Module Api No:      20100525
Zend Extension Api No:   220100525
[root@lnmp phpredis-2.2.4]# ./configure  --with-php-config=/usr/bin/php-config
[root@lnmp phpredis-2.2.4]# make && make install 
[root@lnmp phpredis-2.2.4]# ls  /usr/lib64/php/modules/
curl.so      mysqli.so     pdo.so         redis.so
fileinfo.so  mysql.so      pdo_sqlite.so  sqlite3.so
json.so      pdo_mysql.so  phar.so    zip.so    #有mysql会多出几个文件
[root@lnmp phpredis-2.2.4]# vim +728 /etc/php.ini		#配置调用模块支持Redis
728 extension_dir = "/usr/lib64/php/modules/"       #模块目录
730 extension = "redis.so"						#模块名
[root@lnmp phpredis-2.2.4]# systemctl  restart php-fpm
[root@lnmp phpredis-2.2.4]# php -m | grep -i "redis"
redis

编写php脚本连接redis服务存取数据

[root@lnmp ~]# cat /usr/local/nginx/html/set.php
<?php
#连接服务
$redis = new redis();
$redis->connect("192.168.1.11" , "6379");
$redis->auth("123456");
$redis->set("beijing","BJ");   #存储数据
echo "save data ok ";    #数据存储成功的提示
?>
[root@lnmp ~]# cat /usr/local/nginx/html/get.php
<?php
#连接服务
$redis = new redis();
$redis->connect("192.168.1.11" , "6379");
$redis->auth("123456");
echo $redis->get("beijing"); #查询数据
?>

访问网站存取数据的php脚本

[root@lnmp ~]# curl http://localhost/set.php
save data ok 
[root@lnmp ~]# curl  http://localhost/get.php
BJ
[root@test ~]# redis-cli -h 192.168.1.11  -p  6379  -a 123456
192.168.1.11:6379> keys *
1) "beijing"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值