redis数据库的简单使用

目录

一、 redis 哨兵模式部署        

二、 redis 基础操作  

2.1、string

2.1.1 SET、GET操作

2.1.2 INCR、DECR、INCRBY、DECRBY操作

2.1.3 DEL、EXISTS

2.1.4 EXPIRE、TTL操作

2.2、list

2.2.1 RPUSH

2.2.2 LPUSH

2.2.3 LRANGE

2.2.4 LLEEN

2.2.5 LPOP

2.2.6 RPOP

2.3、set

2.3.1 无序的set

2.3.2 排序的set

2.4、hashes

2.4.1 HSET

2.4.2 HGETALL

2.5、redis配置

2.6、Redis发布订阅

2.7、redis事务

2.8、redis连接

2.8.1 命令 AUTH

2.8.2 命令 PING

2.9、redis 服务器

2.9.1 命令 INFO

2.9.2 命令 CLIENT LIST

2.10、redis数据备份与恢复

2.11、redis安全

2.12、redis性能测试


一、 redis 哨兵模式部署        

        redis 数据库是个内存数据库,它会存一些类似 c++ 的list、set、map 等数据结构,当然几乎每种语言都会有这些数据结构,这里主要简单介绍,如何插入某种结构的数据以及获取数据。

1、整体框架及环境

3个哨兵、1个主redis、2个备redis

3个哨兵的ip及端口如下:  

10.130.41.59:23700
10.130.41.59:23701
10.130.41.59:23702

 主redis和备redis的ip及端口如下:  

主redis 10.130.41.59:7001
备redis1 10.130.41.59:7000
备redis2 10.130.41.59:7002

标准哨兵配置:

port 23700

bind 10.130.41.59

sentinel monitor songbw_master 10.130.41.59 7001 2

sentinel failover-timeout songbw_master 900000

剩余2个哨兵,只需要改变端口即可

主 redis 的标准配置

port 7001

bind 10.130.41.59

appendonly yes

dir "/home/songbw/redis_sentinel/7001"

slave-read-only yes

备 redis 的标准配置

port 7000

bind 10.130.41.59

appendonly yes

dir "/home/songbw/redis_sentinel/7000"

slave-read-only yes

slaveof 10.130.41.59 7001

另外一个备redis,也只需要修改对应的端口即可

注意:

a、配置中的ip 如果 填写成 127.0.0.1,程序可能连不上 redis

b、如果想后台运行,添加配置 daemonize yes

c、dir 配置应该是放redis数据存放的位置,如果目录不存在,或许也会启动失败

启动脚本 redis.sh

#!/bin/sh

WHO=`whoami`;

echo_w()
{
	width=`expr 60 - $1`
	f=`printf "%ds" $width`
	printf  "%$f\n"  "$2"
}

checkRunning()
{
	ret=`ps aux|grep -w $1|grep -v grep`;
	echo $ret

	if [ -z "$ret" ]; then
		return 0;
	else
		return 1;
	fi
}

if [ "$1" = "start" ];then
	./server/redis-server server/redis7001.cfg
	./server/redis-server server/redis7000.cfg
	./server/redis-server server/redis7002.cfg
	./sentinel/redis-sentinel sentinel/sentinel23700.cfg
	./sentinel/redis-sentinel sentinel/sentinel23701.cfg
	./sentinel/redis-sentinel sentinel/sentinel23702.cfg
	len=`expr length "sentinel"`
	for t in 1 2 3
		do 
			echo -n "."	
			len=`expr $len + 1`
			sleep 1
		done
		echo -n "."
		ret=`checkRunning "sentinel"`;
		if [ $? -ne 0 ];then
		   	echo_w `expr $len + 1` "[[32m  OK  [0m]";
		else
		   	echo_w `expr $len + 1` "[[31mFAILED[0m]";
		fi
fi

if [ "$1" = "stop" ];then
	ps aux|grep -i redis|grep -v stop|grep -v grep|awk '{print $2}'|xargs -I {} kill -9 {}
fi


if [ "$1" = "check" ];then
	len=`expr length "sentinel"`
	ret=`checkRunning "sentinel"`;
	if [ $? -ne 0 ];then
		echo_w `expr $len + 1` "[[32m  OK  [0m]";
	else
		echo_w `expr $len + 1` "[[31mFAILED[0m]";
	fi
fi

是我自己写的简单的启动脚本

./redis.sh check

检测redis是都正在运行,执行结果

 [  OK  ]

表明 redis 正在运行

./redis.sh stop

停止正在运行的 redis

./redis.sh start

启动 redis,执行结果  

....                               [  OK  ]

这种哨兵模式的大致原理是:

三个哨兵,三个redis ,包括一个主的redis和2个备的redis,哨兵的作用是为了管理数据同步,同时在主的redis宕掉时,备的redis要顶上去等。

二、 redis 基础操作  

2.1、string

2.1.1 SET、GET操作

设置键值 server:name 的值为  “fido”

通过GET操作,拿到键值 server:name的 vlaue值

2.1.2 INCR、DECR、INCRBY、DECRBY操作

INCR操作将键中存的值自增1

DECR操作将键中存的值自减1

INCR 和 DECR 就是增1或者减1,但如果想增加或者减少一个特定的值呢?

就用上面的命令,integer 就表示具体要增加或者减少的值

注意:

如果INCR、DECR、INCRBY、DECRBY所跟的键不存在,则会先将键中相应的值置为0,然后再进行自增或自减操作。关键是它们都是原子操作,不会引起数据的不一致性。

2.1.3 DEL、EXISTS

DEL是删除键及相关的值。

EXISTS 是查看某一个键是否存在,1存在,0不存在

2.1.4 EXPIRE、TTL操作

表示键 resourse:lock将会在120秒后被删除。

过了一会,使用命令:

,可能会得到值100,这表明resourse:lock的存活时间还有100秒。再过了好了一会你又使用命令,返回的值是-2,它表明键resourse:lock已经不存在了。而如果返回的值的值是-1,则表明键将永远不会过期,如下:

2.2、list

        它所拥有的操作RPUSH,LPUSH,LLLEN,LRANGE,LPOP,RPOP,注意你可以立即开启一个list,只要这个键之前没有以其它的类型存在。

2.2.1 RPUSH

将一个新值放在列表的末尾

2.2.2 LPUSH

将一个新值放在列表的开始

2.2.3 LRANGE

返回list中特定范围的一个集合。它有两个参数,第一个参数是你想获得的第一个元素的索引,第二个参数是你想获得的最后一个元素的索引。如果是’-1’的话,就代表list末尾。

2.2.4 LLEEN

返回当前的list的长度

2.2.5 LPOP

移除list的第一个元素并且返回它

2.2.6 RPOP

移除list的最后一个元素并且返回它

用命令LLEN和LRANGE查看

说明LPOP和RPOP正是我们想表达的意思。 

2.2.7 LINDEX

       LINDEX 是找到索引位置的值并返回,LPUSH 是往表头插,那么mylist列表中,第一个是 Hello,第二个是 World,那么, LINDEX mylist -1  就是返回 mylist 列表中的最后一个元素,当然返回的是World  

2.2.8 BLPOP

        Redis Blpop 命令移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。   

        这里的重点是,在弹出一个元素之后,列表中的数据就会少一个,如果列表中只有一个元素,弹出后,列表将为空,列表可能就不存在了   

返回值:   

如果列表为空,返回一个 nil 。 否则,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。    

格式如下:  

redis 127.0.0.1:6379> BLPOP LIST1 LIST2 .. LISTN TIMEOUT

具体例子:   

redis 127.0.0.1:6379> BLPOP list1 100       

其中  list1 是列表的 key , 100 是超时,也就是说,如果没有数据,就会等100s 返回,或者直到有数据返回     

2.3、set

2.3.1 无序的set

set是个集合,显然它里面的元素是无序的,且每个元素只能出现一次,它的操作:SADD,SREM,SISMEMBER,SMEMBERS,SUNION

a、 SADD

添加给定的值到集合。

入第一列,是往key superpowers 中添加元素 flight

b、 SREM

从set中移除给定的值

c、 SISMEMBER

检测给定值是否在set中,返回1,说明在,0,不在

d、 SMEMBERS

返回set中所有的成员

e、 SUNION

合并2个或更多的set,并返回所有的元素

2.3.2 排序的set

由于set中的元素是不排序的,所以对于一些问题,它不能工作的很好,所以提出了sorted set,sorted set 和常规的set是很相似的,不同的是:对于sorted set ,每一个值会关联一个分数值,用来对sorted set 中的元素排序。

a、 ZADD

比如此例子第一行,

第二个字段是key值 hackers

第四个字段是具体的一个hacker ,名字是Alan Kay

第三个字段,是Alan Kay关联的一个分数值,表示其出生年月,是1940年

b、 ZRANGE

显然,集合中的元素已经排序过了,而我们取的是索引2到索引4的元素。

2.4、hashes

hashes是一个map,string字段和string值之间。它可以完美的表达出一个对象,因为一个对象,它就会有学号、性别、年龄等这些字段。

2.4.1 HSET

HSET是建立一个hashes

user:1000是一个key,然后将name “John Smith” 、 email “john. smith@example.com” 、 password  “s3cret”存到了键user:1000里面,这不就是c++ 的map吗

2.4.2 HGETALL

HGETALL:得到hashes中所有的键值对

HMSET:一次性,把所有的键值对都放到hashes中

HGET:得到hashes中某一个字段对应的值

而且在hashes中,也有对数字的值进行原子性加减的操作:

HINCRBY:对hashes中,相应的值原子操作内加一个特定的值。并且和set中相应的操作一样,如果某个字段不存在,先将此字段的值设置为0,然后再进行加减操作。

HDEL:删除hashes中某一个字段值

显然,在hashes中,对于键user:1000,存入 visits 10,然后通过HINCRBY进行加操作,最后当我把 visits删掉后,再增加的话,值就变成了1。

2.5、redis配置

我们知道每一个redis实例都有一个配置文件redis.conf,不仅可以直接编辑redis.conf文件,还可以连上redis后,通过命令来配置,格式如下:

redis 127.0.0.1:6379> CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE

可以给字段CONFIG_SETTING_NAME设置值NEW_CONFIG_VALUE

例子如下:

redis 127.0.0.1:6379> CONFIG SET loglevel "notice"

OK

还可以通过命令拿到配置的值,格式如下:

redis 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME

可以得到字段CONFIG_SETTING_NAME的值

例子如下:

redis 127.0.0.1:6379> CONFIG GET loglevel
1) "loglevel"
2) "notice"

而命令CONFIG GET * 可以得到所有配置项的键值对

redis 127.0.0.1:6379> CONFIG GET *
  1) "dbfilename"
  2) "dump.rdb"
  3) "requirepass"
  4) ""
  5) "masterauth"
  6) ""

2.6、Redis发布订阅

一个redis实例在运行,然后很多客户端都可以去连接它,而Redis的发布订阅就是为了实现多个客户端之间的通信。

如一个客户端1订阅了redischat通道

客户端2在redischat通道上发布信息

返回值’3’代表有3个客户端订阅了redischat通道

然后客户端1就收到了这条消息

2.7、redis事务

Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:

A、事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

B、事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。

由一个例子具体解释:

MULTI代表一个事务的开始,在这之后输入的命令都不会执行,而是放到一个队列里(例子中返回的是QUEUED),等EXEC执行之后,触发事务,这些命令会全部执行,而且它是一个原子操作。

2.8、redis连接

2.8.1 命令 AUTH

验证通过后,客户端才能正常与redis通信

2.8.2 命令 PING

返回值PONG,说明可以和redis服务端进行通信

2.9、redis 服务器

2.9.1 命令 INFO

INFO:得到所有关于服务器的统计数据和信息

仅仅是截取了一部分图

2.9.2 命令 CLIENT LIST

2.10、redis数据备份与恢复

数据备份:

a、

b、创建 redis 备份文件也可以使用命令 BGSAVE,该命令在后台执行。

查看redis安装目录:

恢复数据:

只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可。

2.11、redis安全

可以给redis服务端设置密码,而密码是在配置文件redis.conf的requirepass字段中存放。

而我的redis服务端设置的密码是songbw_qn。

当然,前面讲过,我们也可以通过CONFIG SET命令来重新设置密码,一旦设置了密码,就需要通过AUTH password命令进行验证,才能正常连接到服务器。

2.12、redis性能测试

redis性能测试基本命令如下:

选项解释如下:

其中比较常用的是:

-h,-p,-n,-t,-q

图像仅截取了一部分

以上实例中主机为 127.0.0.1,端口号为 7001,请求数为 10000,因为没有用-t命令,所以显示所有命令的执行效率,没有用-q命令,所以显示所有的信息。

以上实例中主机为 127.0.0.1,端口号为 7001,执行的命令为 set,lpush,请求数为 10000,通过 -q 参数让结果只显示每秒执行的请求数。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis是一个开源的内存数据结构存储系统,可以用作数据库缓存和消息中间件。它支持多种数据结构,包括字符串、哈希、列表、集合和有序集合。在本文中,我们将介绍如何安装和使用Redis数据库。 安装Redis 在Linux系统上安装Redis非常简单。以下是在Ubuntu上安装Redis的步骤: 1. 打开终端并输入以下命令: ``` sudo apt-get update ``` 2. 安装Redis: ``` sudo apt-get install redis-server ``` 3. 检查Redis是否已经安装成功: ``` redis-cli ping ``` 如果Redis已经安装成功,你将看到以下输出: ``` PONG ``` 使用Redis 安装Redis之后,你可以使用以下命令来连接Redis服务器: ``` redis-cli ``` 这将打开一个Redis命令行界面,你可以在其中执行Redis命令。以下是一些常用的Redis命令: 1. 设置键值对: ``` set key value ``` 例如,要将名为"mykey"的键设置为"value",可以执行以下命令: ``` set mykey value ``` 2. 获取键值对: ``` get key ``` 例如,要获取名为"mykey"的键的值,可以执行以下命令: ``` get mykey ``` 3. 删除键: ``` del key ``` 例如,要删除名为"mykey"的键,可以执行以下命令: ``` del mykey ``` 4. 获取所有键: ``` keys * ``` 这将返回所有键的列表。 5. 获取键的类型: ``` type key ``` 例如,要获取名为"mykey"的键的类型,可以执行以下命令: ``` type mykey ``` 6. 获取键的过期时间: ``` ttl key ``` 例如,要获取名为"mykey"的键的过期时间,可以执行以下命令: ``` ttl mykey ``` 7. 设置键的过期时间: ``` expire key seconds ``` 例如,要将名为"mykey"的键设置为60秒的过期时间,可以执行以下命令: ``` expire mykey 60 ``` 总结 Redis是一个非常强大的内存数据结构存储系统,它可以用作数据库缓存和消息中间件。在本文中,我们介绍了如何在Linux系统上安装和使用Redis。如果你需要一个快速、可靠的数据库缓存系统,那么Redis是一个不错的选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值