快捷搜索:  汽车  科技

redis在代码中的具体使用(安装及队列应用测试)

redis在代码中的具体使用(安装及队列应用测试)

redis 队列

Redis 不仅可作为缓存服务器,还可用作消息队列。它的列表类型天生支持用作消息队列。

由于 Redis 的列表是使用双向链表实现的,保存了头尾节点,所以在列表头尾两边插取元素都是非常快的。

redis在代码中的具体使用(安装及队列应用测试)(1)

安装

自动下载安装

redis_version="5.0.7" install_path="/opt/redis" cd $HOME wget -c -t 0 -T 12000 https://mirrors.huaweicloud.com/redis/redis-${redis_version}.tar.gz tar zxvf redis-${redis_version}.tar.gz cd redis-${redis_version} make make PREFIX=${install_path} install

配置

直接使用脚本配置

port=6379 redis_server="/opt/redis/bin/redis-server" data_dir="/data/redis" config_dir="/opt/redis/conf" # create random password random_password="" arr=(a b c d e f g h i g k l m n o p q r s t u v w x y z A B C D E F G H I G K L M N O P Q R S T U V W X Y Z ! @ 0 1 2 3 4 5 6 7 8 9) for ((i = 0; i < 16; i )); do random_password=${random_password}${arr[$RANDOM % ${#arr[@]}]} done mkdir -p ${config_dir} mkdir -p ${data_dir} cat >${config_dir}/${port}.conf <<EOF bind 0.0.0.0 protected-mode yes port ${port} daemonize yes pidfile ${data_dir}/redis_${port}.pid loglevel notice logfile "${config_dir}/${port}.log" databases 16 always-show-logo yes save 900 1 save 300 10 save 60 10000 dbfilename dump_${port}.rdb dir ${data_dir} appendonly yes appendfilename "appendonly_${port}.aof" appendfsync everysec requirepass "${random_password}" EOF echo -n "Start service command : " echo "${redis_server} ${config_dir}/${port}.conf"

启动服务

/opt/redis/bin/redis-server /opt/redis/conf/6379.conf

命令测试

/opt/redis/bin/redis-cli -p 6379

  • LPUSH(头部插入)和 RPOP(尾部弹出)

redis在代码中的具体使用(安装及队列应用测试)(2)

127.0.0.1:6379> LPUSH queue 1 2 3 4 5 6 7 8 9 0 (integer) 10 127.0.0.1:6379> RPOP queue "1" 127.0.0.1:6379> RPOP queue "2" 127.0.0.1:6379> RPOP queue "3" 127.0.0.1:6379> RPOP queue "4" 127.0.0.1:6379> RPOP queue "5" 127.0.0.1:6379> RPOP queue "6" 127.0.0.1:6379> RPOP queue "7" 127.0.0.1:6379> RPOP queue "8" 127.0.0.1:6379> RPOP queue "9" 127.0.0.1:6379> RPOP queue "0" 127.0.0.1:6379> RPOP queue (nil)

  • RPUSH(尾部插入)和 LPOP(头部弹出)

127.0.0.1:6379> RPUSH queue 1 2 3 4 5 6 7 8 9 0 (integer) 10 127.0.0.1:6379> LPOP queue "1" 127.0.0.1:6379> LPOP queue "2" 127.0.0.1:6379> LPOP queue "3" 127.0.0.1:6379> LPOP queue "4" 127.0.0.1:6379> LPOP queue "5" 127.0.0.1:6379> LPOP queue "6" 127.0.0.1:6379> LPOP queue "7" 127.0.0.1:6379> LPOP queue "8" 127.0.0.1:6379> LPOP queue "9" 127.0.0.1:6379> LPOP queue "0" 127.0.0.1:6379> LPOP queue (nil)

  • 相对可靠的队列 RPOPLPUSH

一般情况下,简单的队列就够用了,但是有一些需要可靠性比较强的消费队列,就可以使用 RPOPLPUSH,可以防止任务被取出,还没有处理完就出现宕机等情况,导致队列数据丢失。 RPOPLPUSH 后面跟两个参数,一个是弹出的list,一个是要插入的list,开始执行的时候,存入到目标队列,任务执行完再从目标队列删除。

127.0.0.1:6379> LPUSH queue 1 2 3 4 5 6 7 8 9 0 (integer) 10 127.0.0.1:6379> RPOPLPUSH queue doing "1" 127.0.0.1:6379> RPOPLPUSH queue doing "2" 127.0.0.1:6379> RPOPLPUSH queue doing "3" 127.0.0.1:6379> LRANGE doing 0 100 1) "3" 2) "2" 3) "1" 127.0.0.1:6379> LRANGE queue 0 100 1) "0" 2) "9" 3) "8" 4) "7" 5) "6" 6) "5" 7) "4" 127.0.0.1:6379> LREM doing 1 1 (integer) 1 127.0.0.1:6379> LRANGE doing 0 100 1) "3" 2) "2"

redis在代码中的具体使用(安装及队列应用测试)(3)

猜您喜欢: