Redis 实践笔记1---基础知识

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

前言

由于Redis的广泛使用,加上在项目中涉及到Redis,因此会根据自己的使用和学习,写一个Redis系列的博客,作为自己的笔记,同时也分享给大家。


What is Redis ?


看一下Redis的官网http://redis.io/对REDIS的描述:

Redis is an open source, BSD licensed, advanced key-value cache and store. It is often referred to as a data structure server since keys can contain stringshasheslistssets,sorted setsbitmaps and hyperloglogs.


关键词:

Redis,开源KEY/VALUE缓存系统,数据结构服务器,数据类型。



install it and start it!


安装redis,没有什么特殊之处,启动也很简单。

如果解压之后,没有configure进行安装选项的指定,直接make && makeinstall进行安装的话,默认REDIS会安装至/usr/local/bin下。

命令 说明
./redis-server ./redis.conf 我们可以把安装路径下的redis.conf拷贝至启动命令路径下。用于启动REDIS。

./redis-cli

./redis-cli shutdown

REDIS客户端,可以连接和关闭redis。
./redis-benchmark REDIS性能测试。


启动后,观察端口占用情况:

1
2
3
4
[root@master bin] # ./redis-server ./redis.conf
[root@master bin] # netstat -tnlp | grep redis
tcp        0      0 0.0.0.0:6379                0.0.0.0:*                   LISTEN      4508 /redis-server 
tcp        0      0 :::6379                     :::*                        LISTEN      4508 /redis-server  *


REDIS的默认启动端口就是 6379。

1
2
3
4
5
6
7
[root@master bin] # ./redis-cli 
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379>  set  name zhangfengzhe
OK
127.0.0.1:6379> get name
"zhangfengzhe"


Redis.conf


可以浏览下Redis的配置文件,下面是一些入门配置选项。


配置 说明
daemonize yes 启动redis是否以后台的方式启动。默认是no,那么一个XSHELL客户端启动REDIS后会阻塞,因此可以将配置改为yes.
port 6379 启动端口。
bind 192.168.1.100 REDIS的安全特性,可以允许指定IP客户端才能访问REDIS SERVER!
logfile "/usr/local/bin/resin.runlog" 指定REDIS的运行日志
databases 16 REDIS的数据是存储在内存中的,但是也是可以持久化到数据库中,并且REDIS将数据库的个数默认设置为16个,默认情况下是数据库0在使用,我们可以使用select进行切换。
save 900 1 REDIS将内存中的数据保存至数据库的策略。左边示例就是说,900S内有一个KEY发生变化,那么STORE至DB。支持多SAVE的策略。
dbfilename dump.rdb
dir ./
数据库文件名称及存储路径
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
REDIS的AOF机制:是否记录操作REDIS的每一个操作至AOF文件中。




数据类型


相比Memcached只支持String类型的KEY/VALUE而言,Redis的数据类型很丰富,比如:String/List/Set/Sorted Set/Hash等。Redis所支持的类型很多,每一种类型的命令也不少,那么我们如何记忆,学习,使用呢?

我的想法:理解REDIS每一种数据类型的特点 + 官方命令手册

http://redisdoc.com/ 有REDIS的每一个数据类型的命令列表,以及命令的使用方法说明。

数据类型 说明以及一些命令
String

字符串类型,也可以存储数字,以及任何可以序列化的数据,REDIS最大上限是1GB,远远大于MEMCACHED的限制。


set/setnx/get/getset/mget/mset/msetnx/   

【结尾是nx标示如果存在这个KEY才操作,m开头的标示批量操作】


incr/incrby/decr/decrby

【数字的原子性的增减】


append/substr/strlen

【追加、截取、长度】

 

List

本质上LIST的每一元素是STRING类型,并且LIST就是一个双向链表!

可以堆栈,即先进后出;可以队列,即先进先出。


lpush/rpush/lpop/rpop/blpop/brpop

【b开头的标示是此命令的阻塞版本,虽然阻塞但是避免了轮询。】


linsert 可以方便LIST进行非头尾的插入操作


lrange/ltrim/lset/lrem

【注意0代表第一个元素,-1代表最后一个元素】


LIST没有命令可以直接查询是否包含这个STRING!

LIST中元素是有序的,提供了lindex key index来返回下标为index的元素


Set

Set是String类型的无序集合,和JAVA的Set<String>特点一致。


sadd/smembers/sinter/sinterstore/sunion/sunionstore/sdiff/sdiffstore

【以store结尾的标示此命令的结果存储至另一个SET集合中】


Set的最大特点是支持集合之间的交,并,差运算。

【这些操作很利于实现SNS需要的好友推荐,BLOG的TAG功能等】


Set还提供SISMEMBER命令来查询SET集合是否包含这个KEY!这是LIST所不能的!

由于Set的无序性,导致取出一个元素只能利用spop/srandmember随机取出!而sorted set解决了这一问题。



Sorted Set

Sorted Set的中的元素是String类型的,但是每一个String元素关联了一个SCORE(权重,优先级),元素根据SCORE来进行排序。


zset需要注意的是,有一个排名,即rank;一个是分数,即score.


Hash

一个String类型的FILED/VALUE的映射表。

Hash特别适合存储对象,占用更少的内存,而且可以很方便的存取整个对象。


hset/hmset/hget/hmget/hkeys/hvals/hgetall/hlen/hdel/hexists...



KEY

exists key
0 or 1 
del key
type key
none/string/list/set/...
keys pattern 符合pattern的所有KEY
expire key seconds 设置KEY的过期时间



本文转自zfz_linux_boy 51CTO博客,原文链接:http://blog.51cto.com/zhangfengzhe/1656888,如需转载请自行联系原作者


相关实践学习
基于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
相关文章
|
1月前
|
存储 缓存 NoSQL
深入理解Django与Redis的集成实践
深入理解Django与Redis的集成实践
58 0
|
6月前
|
canal 缓存 NoSQL
【Redis系列笔记】双写一致性
本文讨论了缓存不一致问题及其后果,如价格显示错误和订单计算错误。问题主要源于并发和双写操作的异常。解决方案包括使用分布式锁(但可能导致性能下降和复杂性增加)、延迟双删策略(通过延迟删除缓存来等待数据同步)以及异步同步方法,如通过Canal和MQ实现数据的最终一致性。面试中,可以提及这些策略来确保数据库和缓存数据的一致性。
515 1
【Redis系列笔记】双写一致性
|
22天前
|
缓存 NoSQL Redis
Redis 缓存使用的实践
《Redis缓存最佳实践指南》涵盖缓存更新策略、缓存击穿防护、大key处理和性能优化。包括Cache Aside Pattern、Write Through、分布式锁、大key拆分和批量操作等技术,帮助你在项目中高效使用Redis缓存。
124 22
|
28天前
|
NoSQL 关系型数据库 MySQL
MySQL与Redis协同作战:百万级数据统计优化实践
【10月更文挑战第21天】 在处理大规模数据集时,传统的单体数据库解决方案往往力不从心。MySQL和Redis的组合提供了一种高效的解决方案,通过将数据库操作与高速缓存相结合,可以显著提升数据处理的性能。本文将分享一次实际的优化案例,探讨如何利用MySQL和Redis共同实现百万级数据统计的优化。
74 9
|
6月前
|
NoSQL Java 关系型数据库
【Redis系列笔记】分布式锁
分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁,只要大家使用的是同一把锁,那么我们就能锁住线程,不让线程进行,让程序串行执行,这就是分布式锁的核心思路
659 2
|
2月前
|
消息中间件 NoSQL Go
PHP转Go系列 | ThinkPHP与Gin框架之Redis延时消息队列技术实践
【9月更文挑战第7天】在从 PHP 的 ThinkPHP 框架迁移到 Go 的 Gin 框架时,涉及 Redis 延时消息队列的技术实践主要包括:理解延时消息队列概念,其能在特定时间处理消息,适用于定时任务等场景;在 ThinkPHP 中使用 Redis 实现延时队列;在 Gin 中结合 Go 的 Redis 客户端库实现类似功能;Go 具有更高性能和简洁性,适合处理大量消息。迁移过程中需考虑业务需求及系统稳定性。
|
5月前
|
网络协议 NoSQL Redis
SMC-R 透明加速 TCP 技术,在 Redis 场景下的应用实践 | 干货推荐
SMC-R 作为一套与 TCP/IP 协议平行、向上兼容 socket 接口、底层使用 RDMA 完成共享内存通信的内核协议栈,其设计意图是为 TCP 应用提供透明的 RDMA 服务,同时保留了 TCP/IP 生态系统中的关键功能。
|
5月前
|
存储 NoSQL Java
Redis系列学习文章分享---第八篇(Redis快速入门之达人探店--发布探店笔记 + 查看探店笔记 + 点赞功能 + 点赞排行榜)
Redis系列学习文章分享---第八篇(Redis快速入门之达人探店--发布探店笔记 + 查看探店笔记 + 点赞功能 + 点赞排行榜)
31 0
|
6月前
|
存储 消息中间件 缓存
Redis - 笔记
Redis是开源的内存数据结构存储系统,兼备数据库、缓存和消息中间件功能。它支持字符串、哈希、列表、集合、有序集合等数据结构,以及地理空间、基数统计和位图等特殊类型。Redis具备复制、LUA脚本、LRU事件、事务、持久化、哨兵和集群等高级特性,以实现高可用性。应用场景包括计数器、存储用户信息、消息队列、共同关注等。字符串最大容量为512M。
|
6月前
|
存储 负载均衡 NoSQL
【Redis系列笔记】Redis集群
集群是一种在多个计算机或服务器之间分配和管理任务的方式。它们被广泛应用于大型计算任务、数据处理、网络服务和高性能计算等领域。在Redis中,主要有以下三种集群,分别是主从集群,哨兵集群,分片集群。
194 18
下一篇
无影云桌面