首页 > 数据库 >Redis 安装与使用

Redis 安装与使用

时间:2022-09-21 18:25:23浏览次数:97  
标签:127.0 0.1 redis Redis 6379 key 使用 安装

Redis 安装与使用

Redis 介绍

Redis 是由 Salvatore Sanfilippo 写的 key-value 存储系统,是一个跨平台的非关系型数据库(NoSQL)。

Redis 是用C语言开发完全开源,基于内存的高性能数据库,理论读速度110000次/s,写速度81000次/s 。

安装

下载

可以从 Redis 官网下载最新版本,或从 https://github.com/redis/redis-hashes/ 选择自己需要的版本下载。

安装

# 1、安装C语言和环境
yum install gcc-c++
# 2、解压Redis安装包
tar -zxvf redis-3.0.0.tar.gz
# 3、进入解压目录并编译
cd redis-3.0.0/
make
# 4、安装到指定目录
make install PREFIX=/usr/local/redis

基本使用

启动和关闭

前端启动

该方法在启动后会占用当前窗口。

在 redis/bin/ 目录下直接运行 redis-server,使用默认配置文件启动

./redis-server

显示如下界面:

image-20220920111043367

关闭当前命令窗口会使 redis-server 结束运行,或使用Ctrl + C命令结束 redis-server 进程。

后端启动

  • 进入安装包解压目录中,有一份配置文件 redis.conf,将其拷贝到 redis/bin 目录下

    cp redis.conf  /usr/local/redis/bin
    
  • 修改 /usr/local/redis/bin 下的 redis.conf,将daemonize由no改为yes

    ################################ GENERAL  #####################################
    
    # By default Redis does not run as a daemon. Use 'yes' if you need it.
    
    # Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
    
    daemonize yes
    
    
  • 使用 redis.conf 配置文件启动

    ./redis-server redis.conf
    

关闭

在 redis/bin/ 目录下,执行 redis-cli -p [port] shutdown

./redis-cli -p [port] shutdown

基本命令

redis客户端命令 redis-cli 控制连接 redis 服务:

# 直接运行 redis-cli,则默认ip 127.0.0.1,默认端口 6379
[root@localhost bin]# ./redis-cli
127.0.0.1:6379> 

redis支持远程访问:

# -h [host] -p [port] -a [password]
[root@localhost bin]# ./redis-cli -h 192.168.233.134 -p 6379
192.168.233.134:6379> 

键(Key)命令

  • **keys *** :

    查看当前库中所有的 key

  • exists

    检查 key 是否存在,存在返回 1,不存在返回 0

  • expire

    设置 key 的过期时间(s)

  • ttl

    查看 key 的剩余生存时间(s)

  • type

    返回 key 存储的 value 的数据类型

五种数据类型

数据类型 赋值 取值 删除
string set key value get key del key
hash hset key field value hget key field hdel key field...
list lpush key value... lrange key start stop lrem key count value
set sadd key value... smembers key srem key value...
sorted set(zset) zadd key score value... zrange key start stop [withscores] zrem key value...
  • string

    127.0.0.1:6379> set str 666
    OK
    127.0.0.1:6379> get str
    "666"
    

    自增(incr)、自减(decr

    # incr 使存储的数字数据自增
    127.0.0.1:6379> incr str
    (integer) 667
    
    # decr 使存储的数字数据自减
    127.0.0.1:6379> decr str
    (integer) 666
    
  • hash

    127.0.0.1:6379> hset user name zhangsan
    (integer) 1
    127.0.0.1:6379> hset user age 35
    (integer) 1
    
    # hgetall 获取key的所有字段和值
    127.0.0.1:6379> hgetall user
    1) "name"
    2) "zhangsan"
    3) "age"
    4) "35"
    
    # 一年过去了
    127.0.0.1:6379> hset user age 36
    (integer) 0
    127.0.0.1:6379> hgetall user
    1) "name"
    2) "zhangsan"
    3) "age"
    4) "36"
    
  • list

    元素有序,可重复

    # lpush 从左(表头)插入元素,rpush 从右(表尾)插入元素
    127.0.0.1:6379> lpush list 1 2
    (integer) 2
    127.0.0.1:6379> rpush list 3 4
    (integer) 4
    
    # lrange key 0 -1 遍历所有元素
    127.0.0.1:6379> lrange list 0 -1
    1) "2"
    2) "1"
    3) "3"
    4) "4"
    

    lrem key count value 删除 key 中 count 个为 value 的元素

    127.0.0.1:6379> rpush list 3
    (integer) 5
    127.0.0.1:6379> lrange list 0 -1
    1) "2"
    2) "1"
    3) "3"
    4) "4"
    5) "3"
    
    # count = 0,删除所有值为 3 的元素
    127.0.0.1:6379> lrem list 0 3
    (integer) 2
    127.0.0.1:6379> lrange list 0 -1
    1) "2"
    2) "1"
    3) "4"
    
  • set

    元素无序,不可重复

    127.0.0.1:6379> sadd set1 1 2 3 4
    (integer) 4
    127.0.0.1:6379> sadd set2 1 2 
    (integer) 2
    
    # 为 set2 添加一个 2
    127.0.0.1:6379> smembers set2
    1) "1"
    2) "2"
    127.0.0.1:6379> sadd set2 2 
    (integer) 0
    127.0.0.1:6379> smembers set2
    1) "1"
    2) "2"
    

    集合间的差值

    # set1 - set2
    127.0.0.1:6379> sdiff set1 set2
    1) "3"
    2) "4"
    
    # set2 - set1
    127.0.0.1:6379> sdiff set2 set1
    (empty list or set)
    
    # 移除 set1 中的 3、4
    127.0.0.1:6379> srem set1 3 4
    (integer) 2
    127.0.0.1:6379> smembers set1
    1) "1"
    2) "2"
    127.0.0.1:6379> sdiff set1 set2
    (empty list or set)
    
  • sorted set(zset)

    元素有序,不可重复

    127.0.0.1:6379> zadd student 59 zhangsan 60 lisi 65 wangwu
    (integer) 3
    127.0.0.1:6379> zrange student 0 -1 withscores
    1) "zhangsan"
    2) "59"
    3) "lisi"
    4) "60"
    5) "wangwu"
    6) "65"
    
    # 将 "zhangsan" 的分数改为 60
    127.0.0.1:6379> zadd student 60 zhangsan
    (integer) 0
    127.0.0.1:6379> zrange student 0 -1 withscores
    1) "lisi"
    2) "60"
    3) "zhangsan"
    4) "60"
    5) "wangwu"
    6) "65"
    

切换数据库

redis 默认有 16 个数据库(由 redis.conf 文件中的 databases 配置),通过索引标识,不能设置名称。

连接 redis 时,默认会连接到数据库 [0]。

image-20220921141816586
  • 使用 select [0-15] 切换数据库。
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> select 2
OK
127.0.0.1:6379[2]> 
  • 数据库间的数据相互独立,只能访问修改当前数据库下的数据
# 之前在数据库[0]创建有 str :666
# 在数据库[2]获取 str
127.0.0.1:6379[2]> get str
(nil)
# 在数据库[2]设置 str :lisi
127.0.0.1:6379[2]> set str lisi
OK
127.0.0.1:6379[2]> get str
"lisi"
# 回到数据库[0],获取 str 依然为 666
127.0.0.1:6379[2]> select 0
OK
127.0.0.1:6379> get str
"666"
  • 清空数据库的数据

    FLUSHDB :清空当前数据库的数据

    # 数据库[0]
    127.0.0.1:6379> keys *
    1) "student"
    2) "list"
    3) "set1"
    4) "set2"
    5) "str"
    6) "user"
    # 数据库[2]
    127.0.0.1:6379[2]> keys *
    1) "str"
    # 在数据库[0]使用 FLUSHDB 命令
    127.0.0.1:6379> flushdb
    OK
    127.0.0.1:6379> keys *
    (empty list or set)
    
    # 数据库[2]的数据没有被清除
    127.0.0.1:6379> select 2
    OK
    127.0.0.1:6379[2]> keys *
    1) "str"
    

    FLUSHALL :清空所有数据库的数据

    # 在数据库[0]、[1]各创建一个数据
    127.0.0.1:6379> keys *
    1) "db0"
    127.0.0.1:6379[1]> keys *
    1) "db1"
    127.0.0.1:6379[2]> keys *
    1) "str"
    
    # 在任意数据库运行 FLUSHALL 命令
    127.0.0.1:6379[1]> flushall
    OK
    127.0.0.1:6379> keys *
    (empty list or set)
    127.0.0.1:6379[1]> keys *
    (empty list or set)
    127.0.0.1:6379[2]> keys *
    (empty list or set)
    

持久化

Redis 的所有数据都存储在内存中,为了使 Redis 在重启之后仍能访问到上次的数据,需要将数据从内存中同步到硬盘中,这一过程就是持久化。

Redis 支持两种持久化方式,RDB和AOF,可以单独使用或结合使用。

RDB持久化

Redis 默认的持久化方案,通过快照(snapshotting)创建 dump.rdb 文件将数据保存到磁盘

image-20220921145614386

RDB配置项:

save 900 1     #900秒内如果超过1个key被修改,则发起快照保存
save 300 10    #300秒内如超过10个key被修改,则发起快照保存
save 60 10000  #60秒内如果超过10000个key被修改,则发起快照保存

stop-writes-on-bgsave-error yes  #如果最近一次快照文件创建失败则停止 redis 的数据写入操作
rdbcompression yes   #压缩快照文件
dbfilename dump.rdb  #文件名
dir ./               #创建文件路径

Redis 启动后会读取RDB快照文件,将数据从硬盘载入到内存。

在操作数据库时,可以使用 SAVE / BGSAVECONFIG GET dir 命令手动保存或读取RDB快照文件,在读取RDB文件时要使文件名、文件路径与配置文件中保持一致。

一般我们会使用 RDB 的自动持久化策略:

  • 优点:减少 IO 操作,确保 redis 的高性能
  • 缺点:Redis 一旦发生故障,极易造成数据丢失,无法保证数据完整性

AOF持久化

AOF(Append Only File)仅追加的文件,会将执行过的写指令追加到 AOF 文件,redis 重启后再将所有指令执行一遍。

image-20220921154313239

AOF 默认是关闭的,需要配置 redis.conf 文件的 appendonly yes 开启

appendonly yes                 #开启 AOF
appendfilename appendonly.aof  #文件名,保存路径和 RDB 文件一致

#appendfsync always    #每次有数据修改时,写入 AOF 文件。
appendfsync everysec   # AOF 默认策略,每秒写入一次。
#appendfsync no        #从不写入。

auto-aof-rewrite-percentage 100  #自动重写的增长比例阈值
auto-aof-rewrite-min-size 64mb   #自动重写的最小文件大小

重写是指:将指令集压缩到可以恢复数据的最小指令集。

开启 AOF 持久化后,当 AOF 文件的大小大于 64M,且当前大小比上一次重写后的大小增长比例高于阈值,才会进行重写。

  • 优点:保证了数据的完整性
  • 缺点:大量的 IO 操作,严重影响 redis 性能

主从复制

持久化保证了 Redis 重启后不会丢失数据,但如果硬盘损坏了怎么办。主从复制就可以避免这类问题。

主从复制:将主Redis服务器(master)的数据,复制到从Redis服务器(slave)。

  • 只能有一个 master,可以有多个 slave,一主多从。

  • 数据只能由 master 复制到 slave。

  • 主从数据实时同步,master 写入数据时通过主从复制机制,将数据复制到 slave。

  • 主从复制时不会阻塞 master 的服务进程,master 依然可以处理 Client 请求。

  • 一个 Redis 可以即是主又是从,(Redis1 是 Redis3/4 的主,是 Redis 的从):

    image-20220921170728010

主从复制过程

image-20220921172421610

复制过程:

1、slave 建立和 master 的连接,发送sync 命令。

2、master 启动一个后台进程将数据库保存到 RDB 文件中

3、master 发送RDB文件给 slave

4、slave 接收文件保存到磁盘,然后加载到内存

5、master 把缓存的写命令同步给 slave

  • 注意:主如果宕机,从只能读

主从复制的配置

  • 主Redis无需额外配置。

  • 配置从Redis (slave) 的 redis.conf 中的 slaveof:slaveof <masterip> <masterport>,例:

    slaveof 192.168.233.134 6379
    

在主Redis中创建一条数据 str 666,启动从Redis 查看

slave 127.0.0.1:6380> keys *
slave 1) "str"

在主Redis存入数据,查看效果

master 127.0.0.1:6379> set master 123
master OK

# 从Redis同步了数据
slave 127.0.0.1:6380> keys *
slave 1) "str"
slave 2) "master"
slave 127.0.0.1:6380> get master
slave "123"
# 尝试在从Redis存入数据
slave 127.0.0.1:6380> set user zhangsan
slave (error) READONLY You can't write against a read only slave.

关闭主Redis,查看从Redis情况

# 从Redis可以正常读取数据
slave 127.0.0.1:6380> keys *
slave 1) "str"
slave 2) "master"
# 从Redis依然不可写入数据
slave 127.0.0.1:6380> set user zhangsan
slave (error) READONLY You can't write against a read only slave.

标签:127.0,0.1,redis,Redis,6379,key,使用,安装
From: https://www.cnblogs.com/magicmouseblogs/p/16716622.html

相关文章

  • mock介绍及moco框架搭建使用
    https://cloud.tencent.com/developer/article/1759972?from=article.detail.1465591一Mock介绍1什么是mockmock测试就是在测试过程中,对于某些不容易构造或者不容易获......
  • 使用ThreadPool.SetMinThreads方法提升API服务响应性能的总结
    关于使用ThreadPool.SetMinThreads方法提升API服务响应性能的总结使用该方法的背景?某个API服务在每日请求量40W的情况下,流量增多时会产生大量请求异常:Theoperationwas......
  • 【postman】postman插件newman的安装与使用
    一、newman的安装(newmanan安装相关内容来源摘自:https://blog.csdn.net/a272329874a/article/details/115232486)1、关于newmannewman是postman的命令集合运行器。允许......
  • R语言学习笔记:因子factor和数据框data frame基础介绍和使用教程
    今天的笔记内容是R语言中因子和数据框的基础介绍和使用方法。更多笔记关注公众号:生信分析笔记R语言因子因子可以用来存储不同类别的数据类型,R语言创建因子使用facto......
  • Docker安装和卸载(centos)
    Docker安装和卸载一,已安装Docker,卸载Docker1.方法一sudoyumremovedocker\docker-client\docker-client-latest\......
  • python-Typora的安装及应用
      Typora软件是一个文本编辑器,可以记录文字类似于word,可以用来日常记笔记,学习代码,界面简洁,清晰,方便日常工作。安装        安装时尽量装在其他盘不要......
  • Redis操作类
    importcn.hutool.core.date.DatePattern;importcn.hutool.core.date.DateUtil;importcn.hutool.extra.spring.SpringUtil;importorg.slf4j.Logger;importorg.slf......
  • MySQL索引查询条件使用函数导致索引失效
     索引失效EXPLAINSELECTdt.nameASdeviceName,su.`name`ASuserName,date_format(co.upload_time,'%Y%m%d')astimeFROMtb_cust_ordercoI......
  • Docker 安装ELK
    ELK配置文件ES端口修改./es/config/elasticsearch.ymlKibana配置,ES地址,kibana账号密码./kibana/config/kibana.ymlLogstash配置修改,ES地址,ES账号密码./logstash......
  • 使用FileStream来实现复制功能
    staticvoidMain(string[]args){stringsource=@"D:\桌面\demo.txt";stringtarget=@"D:\桌面\demo2.txt";CopyF......