你不知道的Redis一-Redis入门

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 你不知道的Redis一-Redis入门

一、Redis入门


1.1 redis简介


Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API其中value 可以为string、hash、list、set、zset 等多种数据结构,可以满足很多应用场景。还提供了键过期,发布订阅,事务,流水线,等附加功能


流水线


Redis 的流水线功能允许客户端一次将多个命令请求发送给服务器,并将被执行的多个命令请求的结果在一个命令回复中全部返回给客户端,使用这个功能可以有效地减少客户端在执行多个命令时需要与服务器进行通信的次数。


数据存放


1,Redis安装在磁盘;


2,Redis数据存储在内存


aHR0cHM6Ly9vc2NpbWcub3NjaGluYS5uZXQvb3NjbmV0L3VwLWQ5MGM4MjkzNDFkZmQwMDUxMzJkYTE2MDI3ODE2N2Y4YjMxLnBuZw.png


redis简单使用

比如说,数据库有一张表Order订单表, 表主键orderid


aHR0cHM6Ly9vc2NpbWcub3NjaGluYS5uZXQvb3NjbmV0L3VwLTA0NzYzYzAxZTNiZDhlMDcyZWQ4YzZmNWZiMjRmYzc3NzY5LnBuZw.png

1.2 Redis特性


  1. 速度快,数据放在内存中,官方给出的读写性能10 万/S,与机器性能也有关
  2. 键值对的数据结构服务器
  3. 丰富的功能:见上功能
  4. 简单稳定:单线程
  5. 持久化:发生断电或机器故障,数据可能会丢失,持久化到硬盘
  6. 主从复制:实现多个相同数据的redis 副本
  7. 高可用和分布式:哨兵机制实现高可用,保证redis 节点故障发现和自动转移
  8. 客户端语言多:java php python c c++ nodejs 等


1.3 redis性能高性能原因


  1. 纯内存访问
  2. 非阻塞I/O(使用多路复用)
  3. 单线程避免线程切


1.3 redis使用场景


1,缓存:合理使用缓存加快数据访问速度,降低后端数据源压力

2,排行榜:按照热度排名,按照发布时间排行,主要用到列表和有序集合

3,计数器应用:视频网站播放数,网站浏览数,使用redis 计数

4,社交网络:赞、踩、粉丝、下拉刷新

5,消息队列:发布和订阅


1.4 redis基本操作


  可执行文件

  作用

  redis-server

  启动redis

  redis-cli

  redis命令行客户端

  redis-benchmark

  基准测试工具

  redis-check-aof

  AOF持久化文件检测和修复工具

  redis-check-dump

  RDB持久化文件检测和修复工具

  redis-sentinel

  启动哨兵

  redis-trib

  cluster集群构建工具


二、Redis数据结构介绍


2.1 字符串


字符串类型:实际上可以是字符串(包括XML JSON),还有数字(整形 浮点数),二进制(图片 音频 视频),最大不能超过512MB


命令 备注
set age 23 ex 10 10秒后过期  px 10000 毫秒过期
setnx name test  不存在键name时,返回1设置成功;存在的话失败0
set age 25 xx   存在键age时,返回1成功
get age  存在则返回value, 不存在返回nil
set country china city beijing 批量设值
mget country city address   批量获取


注意:若没有mget命令,则要执行nget命令



aHR0cHM6Ly9vc2NpbWcub3NjaGluYS5uZXQvb3NjbmV0L3VwLTk5ZmM4MjhkYTFkZGU2MGZkYmM5MzYzOTNiNzUxNzVhNjNmLnBuZw.png


命令 备注
incr age     必须为整数自加1,非整数返回错误,无age键从0自增返回1
decr age   整数age减1
incrby age 2 整数age+2
decrby age 2 整数age -2
ncrbyfloat score 1.1 浮点型score+1.1
append name world 追加指令
getrange name 2 4 截取字符串


2.2 哈希(Hash)

2.2.1 hash存储对象

redis得hash和JAVA的hash结构是一样的,我们可以将一些数据库的热点数据写入redis中。例如:

1,用户表数据如下:


aHR0cHM6Ly9vc2NpbWcub3NjaGluYS5uZXQvb3NjbmV0L3VwLTBiMjgxNjM2ODAwMGIyZDk4NWE5ZWJmNWRiMDVlNGU3YjIxLnBuZw.png


2,存储到Redis, 使用字符串如何完成存储操作?


aHR0cHM6Ly9vc2NpbWcub3NjaGluYS5uZXQvb3NjbmV0L3VwLWQzMjQxZTgzY2M4ZmEzNWFlMWY0ZWVhZDBlMWRmYjBjZGVhLnBuZw.png

3,哈希hash是一个string类型的field和value的映射表,hash特适合用于存储对象


aHR0cHM6Ly9vc2NpbWcub3NjaGluYS5uZXQvb3NjbmV0L3VwLTI4MjY5MWJjOWE0Y2Y1MmMxOWY1ODU4ODY2M2NmZWVhNTdkLnBuZw.png

操作指令:  hmset user:1 name Dk age 18


2.2.2 hash常用命令


命令 备注
hset key field value  hset user:1 name Dk//成功返回1,失败返回0
hget user:1 name 取值
hdel user:1 age  删只值
hlen user:1  计算个数
hmset user:2 name Dk age 23 sex boy 批量设值
hmget user:2 name age sex 批量取值
hexists user:2 name 判断field是否存在
hkeys user:2 获取所有field
hvals user:2 批量取值
hgetall user:2 获取user:2所有field与value
hincrby user:2 age 1  增加1
hincrbyfloat user:2 age 2 增加2 浮点


2.2.3 hash对象存放优点

1,原生:set user:1:name Dk;


              set user:1:age  23;


              set user:1:sex boy;


     优点:简单直观,每个键对应一个值


     缺点:键数过多,占用内存多,用户信息过于分散,不用于生产环境


2,将对象序列化存入redis


     set user:1 serialize(userInfo);

     优点:编程简单,若使用序列化合理内存使用率高

  缺点:序列化与反序列化有一定开销,更新属性时需要把userInfo全取出来进行反序列化,更新后再序列化到redis

 

3,使用hash类型

       hmset user:1 name Dk age 23 sex boy

  优点:简单直观,使用合理可减少内存空间消耗

 缺点:要控制ziplist与hashtable两种编码转换,且hashtable会消耗更多内存erialize(userInfo);


2.2.4 内部编码


hash的内部编码主要有ziplist<压缩列表>和hashtable<哈希表>两种,大家感兴趣的话后面可以单独个章节介绍下这两种数据结构


当field 个数少且没有大的value 时,内部编码为ziplist


如:hmset user:3 name Dk age 24; object encoding user:3 //返回ziplist


当value 大于64 字节,内部编码由ziplist 变成hashtable


如:hset user:4 address “fsgst64 字节”; object encoding user:3 //返回hashtable


2.3 列表<list>


2.3.1 list简介


用来存储多个有序的字符串,一个列表最多可存2的32次方减1个元素



aHR0cHM6Ly9vc2NpbWcub3NjaGluYS5uZXQvb3NjbmV0L3VwLWQ4M2IxNDgwNTRjZWFmZjBiZmE4YmMxZmIxNjk1MzdlYmE5LnBuZw.png


因为有序,可以通过索引下标获取元素或某个范围内元素列表,列表元素可以重复


2.3.2 list常用命令


命令 备注
rpush Dk c b a 从右向左插入cba, 返回值3
lrange Dk 0 -1  从左到右获取列表所有元素 返回 c b a
lpush key c b a 从左向右插入cba
linsert Dk before b teacher 在b之前插入teacher, after为之后,使用lrange Dk 0 -1 查看
lrange key start end 索引下标特点:从左到右为0到N-1
lindex Dk -1 返回最右末尾a,-2返回b
llen Dk  返回当前列表长度
lpop Dk 把最左边的第一个元素c删除
rpop Dk 把最右边的元素a删除


2.4 集合<set>


2.4.1 集合应用场景


用户标签,社交,查询有共同兴趣爱好的人,智能推荐

保存多元素,与列表不一样的是不允许有重复元素,且集合是无序,一个集合最多可存2的32次方减1个元素,除了支持增删改查,还支持集合交集、并集、差集;



aHR0cHM6Ly9vc2NpbWcub3NjaGluYS5uZXQvb3NjbmV0L3VwLTY1NTQ0ZDI3ZjExNDRkMzVmZGI5M2UxMzkwN2I4YjgyM2E4LnBuZw.png


2.4.2 set命令:


命令 备注
exists user 检查user键值是否存在
sadd user a b c 向user插入3个元素,返回3
sadd user a b 若再加入相同的元素,则重复无效,返回0
smember user 获取user的所有元素,返回结果无序
srem user a  返回1,删除a元素
scard user  返回2,计算元素个数


2.4.3 使用示例


当我们要根据用户标签筛选有同兴趣爱好的人,实现智能推荐,可以按照这种方式进行计算

1、给用户添加标签:

 sadd user:1:fav basball fball pq

 sadd user:2:fav basball fball  

 ............

2、或者标签添加用户

 sadd basball:users user:1 user:2

 sadd fball:users user:1 user:2

 .......

3、计算出共同感兴趣的人:

 sinter user:1:fav user2:fav


2.5 有序集合(ZSET


2.5.1 常用场景


常用于排行榜,如视频网站需要对用户上传视频做排行榜,或点赞数。与集合有联系,不能有重复的成员


aHR0cHM6Ly9vc2NpbWcub3NjaGluYS5uZXQvb3NjbmV0L3VwLWY4M2M5ZmFlODRhNTdhMDUzOTVkNzNjYmViNTkyNWJmNWNhLnBuZw.png


三、redis常用命令


3.1 常用命令


  1,查看所有键:

            keys *   set school enjoy   set hello world

             keys *ool   ----->   school

 2,键总数 :


            dbsize         //2个键,如果存在大量键,线上禁止使用此指令


  3,检查键是否存在:


            exists key    //存在返回1,不存在返回0


  4,键过期:


            expire key seconds        //set name test  expire name 10,表示10秒过期


              ttl key                            // 查看剩余的过期时间


 5,键的数据结构类型:


            type key                        //返回string,键不存在返回none



3.2  redis数据库管理


redis数据库管理方式

select 0   选择数据库

flushdb   清除数据库

flushall  清除所有数据

dbsize  数据大小


默认支持16个数据库;可以理解为一个命名空间


跟关系型数据库不一样的点

  1. redis不支持自定义数据库名词
  2. 每个数据库不能单独设置授权
  1. 每个数据库之间并不是完全隔离的。 可以通过flushall命令清空redis实例面的所有数据库中的数据

通过  select dbid 去选择不同的数据库命名空间 。 dbid的取值范围默认是0 -15

相关实践学习
基于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
目录
相关文章
|
2月前
|
缓存 NoSQL Java
springboot的缓存和redis缓存,入门级别教程
本文介绍了Spring Boot中的缓存机制,包括使用默认的JVM缓存和集成Redis缓存,以及如何配置和使用缓存来提高应用程序性能。
127 1
springboot的缓存和redis缓存,入门级别教程
|
2月前
|
存储 消息中间件 NoSQL
Redis 入门 - C#.NET Core客户端库六种选择
Redis 入门 - C#.NET Core客户端库六种选择
69 8
|
4月前
|
SQL 存储 NoSQL
Redis6入门到实战------ 一、NoSQL数据库简介
这篇文章是关于NoSQL数据库的简介,讨论了技术发展、NoSQL数据库的概念、适用场景、不适用场景,以及常见的非关系型数据库。文章还提到了Web1.0到Web2.0时代的技术演进,以及解决CPU、内存和IO压力的方法,并对比了行式存储和列式存储数据库的特点。
Redis6入门到实战------ 一、NoSQL数据库简介
|
4月前
|
NoSQL 算法 安全
Redis6入门到实战------ 四、Redis配置文件介绍
这篇文章详细介绍了Redis配置文件中的各种设置,包括单位定义、包含配置、网络配置、守护进程设置、日志记录、密码安全、客户端连接限制以及内存使用策略等。
Redis6入门到实战------ 四、Redis配置文件介绍
|
4月前
|
NoSQL Redis 数据安全/隐私保护
Redis6入门到实战------ 二、Redis安装
这篇文章详细介绍了Redis 6的安装过程,包括下载、解压、编译、安装、配置以及启动Redis服务器的步骤。还涵盖了如何设置Redis以在后台运行,如何为Redis设置密码保护,以及如何配置Redis服务以实现开机自启动。
Redis6入门到实战------ 二、Redis安装
|
4月前
|
NoSQL Java Redis
Redis6入门到实战------思维导图+章节目录
这篇文章提供了Redis 6从入门到实战的全面学习资料,包括思维导图和各章节目录,涵盖了NoSQL数据库、Redis安装配置、数据类型、事务、持久化、主从复制、集群等核心知识点。
Redis6入门到实战------思维导图+章节目录
|
4月前
|
NoSQL 安全 Java
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
这篇文章深入探讨了Redis中的String数据类型,包括键操作的命令、String类型的命令使用,以及String在Redis中的内部数据结构实现。
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
|
4月前
|
NoSQL 关系型数据库 Redis
Redis6入门到实战------ 九、10. Redis_事务_锁机制_秒杀
这篇文章深入探讨了Redis事务的概念、命令使用、错误处理机制以及乐观锁和悲观锁的应用,并通过WATCH/UNWATCH命令展示了事务中的锁机制。
Redis6入门到实战------ 九、10. Redis_事务_锁机制_秒杀
|
4月前
|
NoSQL Java Redis
Redis6入门到实战------ 八、Redis与Spring Boot整合
这篇文章详细介绍了如何在Spring Boot项目中整合Redis,包括在`pom.xml`中添加依赖、配置`application.properties`文件、创建配置类以及编写测试类来验证Redis的连接和基本操作。
Redis6入门到实战------ 八、Redis与Spring Boot整合
|
4月前
|
存储 NoSQL 算法
Redis6入门到实战------ 三、常用五大数据类型(列表(List)、集合(Set)、哈希(Hash)、Zset(sorted set))
这是关于Redis 6入门到实战的文章,具体内容涉及Redis的五大数据类型:列表(List)、集合(Set)、哈希(Hash)、有序集合(Zset(sorted set))。文章详细介绍了这些数据类型的特点、常用命令以及它们背后的数据结构。如果您有任何关于Redis的具体问题或需要进一步的帮助,请随时告诉我。