服务端学习 - Redis入门及应用

Redis简介

Redis是一个远程内存数据库,不仅性能强,而且还具有复制特性以及为解决问题而生的独一无二的数据模型
Redis是一个速度非常快的非关系型数据库,可以存储键和5种不同类型值的之间的映射,可以将存储在内存中的键值对数据持久化到硬盘,可以使用复制特性来阔爱站读性能,又可以使用客户端分片来扩展写性能。

Redis与其他数据库及软件比较

名称类型数据存储数据查询
Redis使用内存存储的非关系型数据库字符串、列表、集合、散列表、有序集合每种数据类型都有自己的命令
Memcached使用内存存储的键值缓存键值之间的映射创建、读取、更新、删除等
MySQL关系型数据库每个数据库包含多个表,每个表包含多行select、insert、update、delete等
MongoDB使用磁盘存储的非关系型数据库每个数据库包含多个表,每个表包含多个BSON文档创建、读取、更新、删除等

Redis数据持久化
时间点转存(内存->硬盘)

Redis安装及配置

Redis的安装
Linux CentOS 7

官网https://redis.io/download
官网不支持在windows下安装,但可以在windows下使用它的客户端
http://download.redis.io/releases/redis-5.0.8.tar.gz

  1. 下载安装包并解压
/tmp/> wget http://download.redis.io/releases/redis-5.0.8.tar.gz
/tmp/> tar -zxvf redis-5.0.8.tar.gz
  1. 安装gcc依赖
> yum -y install gcc gcc-c++ autoconf automake
  1. 编译配置
/tmp/redis-5.0.8/>make MALLOC=libc
# 如果之前编译错误,用以下命令清除缓存文件
> make distclean
  1. 编译安装
/tmp/redis-5.0.8/src/> make install
# 默认生成到/usr/local/bin/>
  1. 启动Redis服务的几种方式

直接启动

> redis-server
9093:C 20 Mar 2020 11:12:55.725 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
9093:C 20 Mar 2020 11:12:55.725 # Redis version=5.0.8, bits=64, commit=00000000, modified=0, pid=9093, just started
9093:C 20 Mar 2020 11:12:55.725 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
9093:M 20 Mar 2020 11:12:55.726 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                _._
           _.-``__ ''-._
      _.-``    `.  `_.  ''-._           Redis 5.0.8 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 9093
  `-._    `-._  `-./  _.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |           http://redis.io
  `-._    `-._`-.__.-'_.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-'
      `-._    `-.__.-'    _.-'
          `-._        _.-'
              `-.__.-'

9093:M 20 Mar 2020 11:12:55.727 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
9093:M 20 Mar 2020 11:12:55.727 # Server initialized
9093:M 20 Mar 2020 11:12:55.727 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
9093:M 20 Mar 2020 11:12:55.727 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
9093:M 20 Mar 2020 11:12:55.728 * Ready to accept connections

后台进程的方式启动

> vim /tmp/redis-5.0.8/redis.conf

搜索 /daemon 找到 daemonize no 更改成 daemonize yes

/tmp/redis-5.0.8/> cp redis.conf /etc/
> redis-server /etc/redis.conf

# 查看进程
> ps -ef | grep redis
root       9141      1  0 11:23 ?        00:00:00 redis-server 127.0.0.1:6379
root       9146   7404  0 11:23 pts/0    00:00:00 grep --color=auto redis
# 关闭后台redis服务
> kill -9 9141

伪装成服务里启动

# 查看配置脚本
/tmp/redis-5.0.8/utils/> vim install_server.sh
# 执行脚本
/tmp/redis-5.0.8/utils/> ./install_server.sh
Welcome to the redis service installer
This script will help you 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] /etc/redis.conf
Please select the redis log file name [/var/log/redis_6379.log] /var/log/redis.log
Please select the data directory for this instance [/var/lib/redis/6379] /var/lib/redis
Please select the redis executable path [/usr/local/bin/redis-server]
Selected config:
Port           : 6379
Config file    : /etc/redis.conf
Log file       : /var/log/redis.log
Data dir       : /var/lib/redis
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!
/var/run/redis_6379.pid exists, process is already running or crashed
Installation successful!

>rm /var/run/redis_6379.pid
rm:是否删除普通文件 "/var/run/redis_6379.pid"?y

# 启动/停止服务
> service redis_6379 start
> service redis_6379 stop
# 设置开机启动服务
> systemctl enable redis_6379

# 如果是远程链接,别忘记开防火墙
> firewall-cmd --add-port=6379/tcp --permanent
> firewall-cmd --reload

Redis常用配置
配置文件redis.conf

  • ip绑定配置 bind 如果设置了则只执行此ip的请求
  • 保护模式配置 protected-mode
  • 端口配置 port
  • 后台运行配置 daemonize
  • 进程文件配置 pidfile
  • 持久化配置 save
  • 连接认证配置 masterauth
> vim /etc/redis.conf

Redis数据结构及应用

Redis提供的5种结构

结构类型存储值读写能力
STRING可以是字符串、整数及浮点数对整个字符串或者字符串中一部分操作;对整数和浮点数执行increment或者decrement
LIST链表,每个节点包含一个STRING从链表两端push或者pop元素;根据偏移量对链表进行裁剪;读取单个或多个元素;根据值查找或移除元素
SET包含STRING的无序集合,其值具有唯一性添加、获取、移除单个元素;检查一个元素是否存在于集合中
HASH包含键值对的无序散列表添加、获取、移除单个键值对;获取所有键值对
ZSETSTRING成员于浮点数分值之间的有序映射,排列顺序由分值大小决定添加、获取、移除单个元素;根据分值范围或者成员获取元素

命令行执行redis

> redis-cli -h 127.0.0.1 -p 6379
# STRING
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
127.0.0.1:6379> del hello
(integer) 1
127.0.0.1:6379> get hello
(nil)

# LIST
127.0.0.1:6379> rpush list item
(integer) 1
127.0.0.1:6379> rpush list item2
(integer) 2
127.0.0.1:6379> rpush list item3
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "item"
2) "item2"
3) "item3"
127.0.0.1:6379> lindex list 0
"item"
127.0.0.1:6379> lpop list
"item"
127.0.0.1:6379> lrange list 0 -1
1) "item2"
2) "item3"

# SET
127.0.0.1:6379> sadd set item
(integer) 1
127.0.0.1:6379> sadd set item2
(integer) 1
127.0.0.1:6379> sadd set item3
(integer) 1
127.0.0.1:6379> sadd set item1
(integer) 1
127.0.0.1:6379> sadd set item
(integer) 0
127.0.0.1:6379> sismember set item4
(integer) 0
127.0.0.1:6379> sismember set item1
(integer) 1
127.0.0.1:6379> srem set item2
(integer) 1
127.0.0.1:6379> srem set item2
(integer) 0
127.0.0.1:6379> smembers set
1) "item"
2) "item1"
3) "item3"

# HASH
127.0.0.1:6379> hset hash subkey1 value1
(integer) 1
127.0.0.1:6379> hset hash subkey2 value2
(integer) 1
127.0.0.1:6379> hset hash subkey1 value1
(integer) 0
127.0.0.1:6379> hset hash subkey3 value3
(integer) 1
127.0.0.1:6379> hgetall hash
1) "subkey1"
2) "value1"
3) "subkey2"
4) "value2"
5) "subkey3"
6) "value3"
127.0.0.1:6379> hdel hash subkey3
(integer) 1
127.0.0.1:6379> hget hash subkey3
(nil)

# ZSET
127.0.0.1:6379> zadd zset 728 member1
(integer) 1
127.0.0.1:6379> zadd zset 982 member0
(integer) 1
127.0.0.1:6379> zadd zset 982 member0
(integer) 0
127.0.0.1:6379> zrange zset 0 -1
1) "member1"
2) "member0"
127.0.0.1:6379> zrange zset 0 -1 withscores
1) "member1"
2) "728"
3) "member0"
4) "982"
127.0.0.1:6379> zrem zset member1
(integer) 1
127.0.0.1:6379> zrem zset member1
(integer) 0
127.0.0.1:6379> zrange zset 0 -1
1) "member0"

Redis在Node.js中的应用

在windows中远程linux

> redis-cli -h 192.168.129.129
192.168.129.129:6379> get age
"20"
192.168.129.129:6379> incr age
(integer) 21
192.168.129.129:6379> decr age
(integer) 20
192.168.129.129:6379> decrby age 10
(integer) 10

Node.js链接Redis

> npm install redis
// 引入和连接redis
const redis = require('redis')
const client = redis.createClient(6379, '192.168.129.129')

Node.js操作Redis数据

// console.log(client)
const cb = (err, data) => {
    console.log('error:', err, 'data:', data)
}

// STRING
client.set('name', '张三', cb)
client.get('name', cb)
client.set('age', 20, cb)
client.get('age', cb)
/**
error: null data: OK
error: null data: 张三
error: null data: OK
error: null data: 20
 */

// LIST
client.del('friends', cb)
client.rpush('friends', '王五', '赵六', cb)
client.lrange('friends', 0, -1, cb)
client.lpush('friends', '田七', '王八', cb)
client.lrange('friends', 0, -1, cb)
// rpop.lpop
client.lindex('friends', 1, cb)
client.ltrim('friends', 1, 2, cb)
client.lrange('friends', 0, 1, cb)
/**
error: null data: 1
error: null data: 2
error: null data: [ '王五', '赵六' ]
error: null data: 4
error: null data: [ '王八', '田七', '王五', '赵六' ]
error: null data: 田七
error: null data: OK
error: null data: [ '田七', '王五' ]
 */

// SET
client.sadd('ids', 1, 2, cb)
client.smembers('ids', cb)
client.srem('ids', 2, cb)
/**
error: null data: 0
error: null data: [ '1', '2' ]
error: null data: 1
 */

知识技能获取,感谢[网易云课堂 - 微专业 - 前端高级开发工程师]运营团队。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值