Redis的安装以及常用命令汇总

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Redis的安装以及常用命令汇总

Redis超详细笔记

引言:

        本文主要分享了Redis的相关知识,包括:Redis的安装、Redis Desktop Manager的安装使用、Redis的存储数据的结构分析、常用的命令(String、list、hash、set、zset、库操作以及key中高频使用的)、Redis的事务问题、Redis持久化机制以及Redis的淘汰机制;

@[toc]

1. Redis简介

       由于用户量增大因此请求数量也增大,数据压力也就大了;多态服务器之间数据不同步;多态服务器之间的锁已经不存在互斥;因此引入了Redis。

       Redis(Remote Dictionary Server)就是一款基于Key-Value的NoSQL非关系数据库;远程字典服务,由C语言编写完成,基于内存存储数据,提供了多种持久化机制,高性能并且提供了集群的搭建方式,可以方便的横向扩展以及纵向的垂直扩展,还支持事务的操作,保证了高并发场景下数据的安全性和一致性;

1.1 Redis特点

  • 简单:部署较为简单
  • 访问性能优越:读数据11万次/s,写数据8万次/s;
  • 数据类型丰富:string、list、set、hash、zset、地理信息……
  • 可以持久化存储:断电或者重启数据不会丢失;

1.2 应用场景

  • 解决Session共享问题
  • 解决高频数据库查询问题
  • 高访问数据解决(将高访问的数据存到Redis中使用时直接从内存中取出,提高了速度和服务器开销)
  • ……

2. Redis安装

2.1 下载Redis

下载地址:https://github.com/tporadowski/redis/releases

  • 下载好减压即可

在这里插入图片描述

2.2 启动Redis

服务启动:在根目录下cmd中启动

  redis-server.exe  redis.windows.conf

在这里插入图片描述

客户端启动:在根目录下cmd

  redis-cli.exe

在这里插入图片描述

2.3 使用Redis Desktop Manager连接Redis

下载地址:https://redisdesktop.com/pricing

  • 傻瓜式安装

在这里插入图片描述

2.3.1 新建链接

在这里插入图片描述

2.3.2 测试是否成功

在这里插入图片描述

2.3.3 打开控制台

在这里插入图片描述

3. Redis存储数据的结构

Redis有5种常见的结构:string、hash、list、set、zset

不常用:

  • HyperLogLog:计算近似值
  • GEO:地理存储
  • BIT:存储的是一个byte[]

3.1 key-string

一般用于存储一个值,一个key对应一个值

key value
name kak
  • 一个key(name)对应一个值(kak)

3.2 key-hash

存储一个对象数据,一个key对应一个Map

stu name kak
age 20
gender man
  • 存储对象,一个stu对应了三个属性,一个Map集合;

3.3 key-list

使用list结构实现栈和队列结构,一个key对应一个列表

key:value1,value2,value2,value3……

  • 一个key存储多个有序的对象

3.4 key-set

交集、差集、并集的操作,一个key对应一个集合

key:value4,value2,value1,value3……

  • 一个key存储多个无序的对象

3.5 key-zset

排行榜、积分存储等等,一个key对应一个有序集合

key:score1-value1,score2-value2,score3-value3……

  • 放进去数据后会自动进行排序

4. Redis中常用命令

官方参考文档:http://doc.redisfans.com/

4.1 String常用命令

key-value value 为一个字符串,最大512M(弱类型)

  • 类型隐式转换
    #添加值
    set person 30
    #获取值
    get person
    #自增++
    incr person
    #自减--
    decr person
    #自增2个单位
    incrby person 2
    decrby person -2
    #自减2个单位
    incrby person -2
    decrby person 2
    #同时设置一个或多个key-value对
    mset stu1 kak stu2 taotao stu3 zhuanghzuang
    #同时获取一个或多个key-value对
    mget stu1 stu2 stu3
    #当key不存在时设置值,key存在时什么也不做
    setnx stu1 kak
    #设置值得同时,指定生存时间
    setex stu1 20 kak
    #在stu1对应的kaka追加内容,返回长度
    append stu1 kaka
    #查看value的字符串长度
    strlen stu1

4.2 hash常用命令

大小:2^32-1

    #存储数据
    hset stu:1 sage 23
    #获取数据
    hget stu:1 sid
    #批量创建数据
    hmset stu:2 sid 1002 sname kak sage 23
    #批量获取数据
    hmget stu:2 sid sname sage
    #获取所有的hash的key值
    hkeys stu:1
    #获取所有的hash的value值
    hvals stu:1
    #获取所有的数据
    hgetall stu:1
    #获取当前hash结构中的值的数量
    hlen stu:1
    #删除key对应的值,返回值移除的数量
    hdel stu:1 sid
    #检查值是否存在,存在返回1,不存在返回0
    hexists stu:1 sname
    #设置值(不存在正常添加,存在不添加)
    hsetnx stu:3 sid 1003

4.3 set常用命令

大小:2^32-1

    #存储数据,返回长度
    sadd slist zhangsan lisi wangwu zhaoliu tianqi
    #获取全部数据
    smembers slist
    #随机获取数据,获取的同时删除
    spop slist
    #随机取得3个元素,不删除
    srandmember slist 3
    #交集(取多个set集合交集)
    sinter slist slist2
    #并集(取全部集合中的数据)
    sunion slist slist2
    #差集(取多个集合中不一样的数据)
    sdiff slist slist2
    #删除数据,返回删除的数量
    srem slist tianqi
    #查看set集合中是否包含kak这个值,包含1、不包含0
    sismember slist kak
    #保存交集的结果
    sinterstore slist slist2
    #差集保存到集合
    sdiff slist slist2

4.4 zset常用命令

有序集合

  • 默认从小到大排序
    #添加数据(87是score必须为数字,kak为member不可以重复)
    zadd english 87 kak
    #修改member的分数---加2分,存在加,不存在相当于zadd
    zincrby english 2 kak
    #查看指定的member的分数
    zscore english kak
    #查看范围(取下标)
    zrange english 0 -1
    #查看反序的范围(从大到小,取下标)
    zrevrange english 0 -1
    #查看30~60分的人数
    zcount english 30 60
    #查看名次,返回名次
    zrank english kak
    #查看zset中的数据数量
    zcard english
    #删除zset的成员
    zrem engilsh taotao

4.5 库中常用的命令

    #清空当前所在的数据库
    flushdb
    #清空全部的数据库
    flushall
    #查看数据库有多少key
    dbsize
    #查看最后一次的操作时间
    lastsave
    #实时监控Redis服务接收的命令
    monitor

4.6 其他常用命令

    #选择操作的0库
    select 0
    #移动stu到另外一个库(1库)
    move stu 1
    #移除key的剩余生存时间:1移除成功、0不存在生存时间或者key不存在
    persist key
    #查看key值得数量
    keys *
    #删除
    del person
    #查看剩余生存时间:key不存在时返回-2、key存在但没有设置剩余生存时间时返回-1、设置生存时间返回key的剩余生存时间(秒)
    ttl person
    #设定生存时间,给person设定生存时间为10秒
    expire person 10
    #检查给定key是否存在:存在返回1,否则返回0 
    exists person

5. Redis事务

5.1 事务指令

  • multi :开启事务

  • exec: 执行事务

  • discard:放弃事务

  • watch:检查

  • unwatch:撤销检查

5.2 redis的事务特性

redis的事务是分布式事务也就是跨链接的事务;

5.2.1 单链接提交事务

  1. multi 开启事务后,将写入的数据存放在队列中不执行,提交的时候才按顺序执行;
  2. exec提交事务时,一次性执行;

5.2.2 单链接撤销事务

  1. multi 开启事务后,将写入的数据存放在队列中不执行,提交的时候才按顺序执行;
  2. discard 撤销事务,不执行;

5.2.2 分布式事务

两个会话,跨连接

  1. 会话1:开启事务multi ,进行数据的操作,不提交;
  2. 会话2:查看,还是未改变的;
  3. 会话1:exec 提交事务
  4. 会话2:查看,已经改变
  5. 会话2:改变数据
  6. 会话1:提交,数据结果为会话2改变后的;
  7. 场景:如果同时操作,需要watch监控
  8. watch key
  9. 会话1 :开启事务,进行相关操作
  10. 会话2:干扰
  11. 提交,结果为会话2的结果;
  12. watch监控发生作用,两个共同操作一个key的话,先提交事务的一方修改,另一方将放弃所有操作;(秒抢)

6. Redis持久化机制

在redis.windows.conf中修改参数:appendonly

  • no:RDB快照模式
  • yes:AOF模式

6.1 RDB

RDB为快照模式,是Redis的默认持久化机制;

  • RDB持久化文件速度比较快 ,存储的是一个二进制文件,传输方便;
  • redis.windows.conf中关于RDB的描述:
# Save the DB on disk:
#
#   save <seconds> <changes>
#
#   Will save the DB if both the given number of seconds and the given
#   number of write operations against the DB occurred.
#
#   In the example below the behaviour will be to save:
#   after 900 sec (15 min) if at least 1 key changed
#   after 300 sec (5 min) if at least 10 keys changed
#   after 60 sec if at least 10000 keys changed
#
#   Note: you can disable saving completely by commenting out all "save" lines.
#
#   It is also possible to remove all the previously configured save
#   points by adding a save directive with a single empty string argument
#   like in the following example:
#
#   save ""

save 900 1
save 300 10
save 60 10000
  • 大意就是,在15分钟内有一次改变就会触发改变;5分钟有10次改变也会触发改变;在1分钟改变了10000次同样会触发改变;
  • RDB无法保证数据的绝对安全;

6.2 AOF

AOF持久化机制默认是关闭的:

  • AOF持久化速度相对RDB较慢,存储的是一个文本文件,文件会越来越大,传输困难;

    在这里插入图片描述

The default is "everysec", as that's usually the right compromise between
# speed and data safety. It's up to you to understand if you can relax this to
# "no" that will let the operating system flush the output buffer when
# it wants, for better performances (but if you can live with the idea of
# some data loss consider the default persistence mode that's snapshotting),
# or on the contrary, use "always" that's very slow but a bit safer than
# everysec.
More details please check the following article:
# http://antirez.com/post/redis-persistence-demystified.html
#
# If unsure, use "everysec".
# appendfsync always
appendfsync everysec
# appendfsync no
  • 就是说,传输是最安全的,但是牺牲性能,权衡使用;
  • 官方推介同时开启RDB和AOF持久化,更安全可以避免数据丢失;

AOF持久化机制:

  • appendfsync always:每执行一个写操作,立刻持久化到文件中,性能较低;
  • appendfsync everysec:每秒执行一次持久化;
  • appendfsync no:根据操作系统、环境的不同,在一定时间执行一次持久化;

7. Redis的淘汰机制

7.1 过期策略

redis有两种过期策略,定期删除和惰性删除

  • 定期删除:redis每个100ms随机抽取一些设置了过期时间的key,检查其是否过期,如果过期就删除;
  • 惰性删除:在获取某个key的时候,redis检查一下,如果该key设置了过期时间则判断该过期时间是否已经过期,如果过期了就直接删掉并不返回任何东西;

7.1 内存淘汰机制

当Redis内存已经满的时候,再次添加一个新数据会执行淘汰机制,在redis.windows.conf中maxmemory-policy设置改变参数:

redis提供6中数据淘汰策略:

  • volatile-lru:Redis会在设置过生存期的key中删除一个最近最少(时钟最短、频率最少)使用的key;
  • allkey-lru:Redis会在全部的key中干掉一个最近最少的使用的key;
  • volatile-random:Redis会在设置过生存期的key中随机干掉一个;
  • allkey-random:Redis会在全部的key中随机干掉一个;
  • volatile-ttl:从已设置了过期时间的key中挑选即将要过期的key干掉一个;
  • noeviction:默认,内存不足时会报错;

附 数据库分类

关系型数据库:

  • Oracle 、mysql、sqlserver、db2、达梦、神通

NoSql数据库

  • 缓存数据库: redis、memcached
  • 文档数据库:MongoDB、ES、Solr
  • 面向列数据库:hbase
  • 图形数据库:Nero4j
  • 网络数据库
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
9天前
|
NoSQL 算法 Redis
docker高级篇(大厂进阶):安装redis集群
docker高级篇(大厂进阶):安装redis集群
61 24
|
2天前
|
NoSQL 关系型数据库 MySQL
Linux安装jdk、mysql、redis
Linux安装jdk、mysql、redis
58 7
|
6天前
|
NoSQL 应用服务中间件 API
Redis是如何建立连接和处理命令的
本文主要讲述 Redis 是如何监听客户端发出的set、get等命令的。
|
1月前
|
NoSQL Linux PHP
如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤
本文介绍了如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤。接着,对比了两种常用的 PHP Redis 客户端扩展:PhpRedis 和 Predis,详细说明了它们的安装方法及优缺点。最后,提供了使用 PhpRedis 和 Predis 在 PHP 中连接 Redis 服务器及进行字符串、列表、集合和哈希等数据类型的基本操作示例。
64 4
|
1月前
|
存储 SQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(1)作者——LJS[含MySQL的下载、安装、配置详解步骤及报错对应解决方法]
Mysql And Redis基础与进阶操作系列(1)之[MySQL的下载、安装、配置详解步骤及报错对应解决方法]
|
2月前
|
NoSQL Ubuntu Linux
Redis 安装
10月更文挑战第14天
70 1
|
1月前
|
NoSQL 编译器 Linux
【赵渝强老师】Redis的安装与访问
本文基于Redis 6.2版本,详细介绍了在CentOS 7 64位虚拟机环境中部署Redis的步骤。内容包括安装GCC编译器、创建安装目录、解压安装包、编译安装、配置文件修改、启动服务及验证等操作。视频讲解和相关图片帮助理解每一步骤。
|
1月前
|
存储 NoSQL Java
Redis命令:列表模糊删除详解
通过本文的介绍,我们详细探讨了如何在Redis中实现列表的模糊删除。虽然Redis没有直接提供模糊删除命令,但可以通过组合使用 `LRANGE`和 `LREM`命令,并在客户端代码中进行模糊匹配,来实现这一功能。希望本文能帮助你在实际应用中更有效地操作Redis列表。
61 0
|
2月前
|
NoSQL Redis 数据安全/隐私保护
Redis 命令
10月更文挑战第15天
40 0
|
存储 缓存 移动开发
Redis 命令执行过程(上)
今天我们来了解一下 Redis 命令执行的过程。在之前的文章中《当 Redis 发生高延迟时,到底发生了什么》我们曾简单的描述了一条命令的执行过程,本篇文章展示深入说明一下,加深读者对 Redis 的了解。
Redis 命令执行过程(上)