学习Redis笔记

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

1Redis的发展史

Redis[Remote Directory Server]:远程服务器字典

 

2Redis的安装

2.1linux下安装Redis

wget http://download.redis.io/releases/redis-3.2.6.tar.gz

tar xzf redis-3.2.6.tar.gz

cd redis-3.2.6/

Make

Make install

2.2、在bin下可执行的程序

Redis-server:  Redis服务器

Redis-cli命令行客户端

Redis-benchmark: Redis的性能测试工具

Redis-check-aofAOF文件修复工具

Redis-check-dumpRDB文件检测工具

Redis.conf: Redis的配置文件

将配置文件中daemonize yes 以守护进程的方式来使用

2.3、启动和停止Redis

直接启动

redis-server

redis-server /etc/redis.conf

停止Redis

Shutdown

结束Redis的进程

3、命令返回值

1)状态回复

2)错误回复

3)整数回复

4)字符串回复

5)多行字符串回复

KEYS *  得到当前数据库中存在的键名

4Redis配置选项相关内容

1)动态设置/获取配置选项的值

CONFIG GET name

CONFIG SET name value

2)Redis配置文件redis.conf选项相关

Port 6379 默认端口

Bind 127.0.0.1 默认绑定的主机地址

Timeout 0, 当客户端闲置多久之后关闭连接,0代表没有启动

Loglevel notice, 日志的级别

Logfile stdout日志的记录方式,默认为标准输出

Datebase 16,默认数据库的数量16个,默认的数据库编号从0开始

Save <second> <change>, 多少秒有多少次改变将其同步到磁盘中的数据文件里

Save 900 1

Save 300 10

Save 60 10000

Rdbcompression yes, 存储本地数据库时是否启用压缩,默认yes

Dbfilename dump.rdb, 指定本地数据库文件名,默认dump.rdb

Dir ./, 指定本地数据库的存放目录,默认是当前目录

5Redis的数据类型

String字符串类型

一个键最多存储512MB

SET 语法: SET key value [EX seconds] [PX milliseconds] [NX|XX]

如果key存在,同名会产生覆盖

GET:根据key找到对应的值 语法:GET key

如果key不是字符串,会报错

如果key不存在,返回nil

GETRANGE: 返回字符串中一部分  语法: GETRANGE start end

GETSET: 设置指定key的值,并且返回旧的值  语法: GETSET key value

key不存在返回nil,如果key不是字符串,会报错

MSET, 语法:MSET key vakue [key value…]

MGET,语法:MGET key key

STRLEN: 获取key的字符串长度  语法: STRLEN key   注意:对于不存在key获取其长度返回0

SETRANGE:相当于字符串替换的效果  语法: SETRANGE key offset value  注意:如果设置的key原来的字符串长度要比偏移量小,就会以零字节(\x00)填充

对不存在的key使用SETRANGE,返回零字节(\x00)填充

GETRANGE

SETNX: 语法: SETNX key value  只有key不存在才能设置成功

SETEX: 设置keykey的过期时间  语法: SETEX secondsvalue  注意:SETEX是原子性操作,相当于执行了SET keyvalue,又对ke设置了过期时间EXPIRE key seconds

MSETNX: 一次设置多个key-value对,只有所有的key都不存在的时候才能设置成功  语法: MSETNX key value [key value…]

PSETEX: 以毫秒为单位设置key的生存周期  语法: PSETEX key milliseconds value             返回毫秒数PTTL

INCR: key中存储的数字+1    语法:INCR key    注意:key如果不存在,则会先初始化为0,再进行INCR操作, 如果key存储的不是数字,会报错

INCRBY: key中存储的数字加上指定增量  语法:INCRBY key increment

INCRBYFLOAT: key中存储的数字加上指定的浮点数

DECR: key中存储的数字减1  语法: DESC KEY

DECRBY: key中存储的数值减去指定的值   DESCBY key increment

APPEND: 通过APPEND将值追加到字符串的末尾      APPEND key value  如果key不存在,则相当于执行了SET操作

Hash类型

在配置文件中可以通过配置

Hash-max-ziplist-entries 512   512字节

Hash-max-ziplist-value 64 字段数目

HSET: 将哈希表key中域field设置成指定的value    语法:HSET key field value

HGET: 返回哈希表key中指定field的值     如果keyfield不存在,返回nil

HSETNX:hash表中的field设置成指定的值,只要field不存在的时候才可以成功;如果field存在,操作无效

HSETNX key field value

HMSET: 通过将多个field-value设置到hashkey   语法:HMSET key field value field value  …

HMSET:一次获得hashkey中对多个field   语法:HMSET key field field    注意如果hashkeyfield不存在,会返回nil

HGETALL: 返回hashkey中所有的fieldvalue   语法: HGETALL key

HKEYS:返回hashkey的所有的field  语法:HKEYS key

HVALS:返回hashkeyfiled所有对应的值   语法:HVALS key

HEXISTS:检测hashkeyfield是否存在  语法:   HEXISTS key field

HLEN:返回hashkeyfield的数量  语法:HLEN key

HINCRBY: hashkeyfield做增量操作  语法: HINCRBY key field increment

HINCRBYFLOAT: hashkeyfield做增量浮点操作    语法:HINCRBYFLOAT key field increment

HDEL:删除hashkey的指定field,可以删除一个也可以删除多个  语法: HDEL key field field

List类型

LPUSH: 向列表左端添加元素

RPUSH:向列表右端添加元素

LPUSHX:向列表头部添加元素,只有key存在才添加

PPUSHX:向列表尾部添加元素,只有key存在才添加

LPOP

RPOP

LRANGE:获取列表片段   语法:LRANGE key start stop

注意:如果start下表比列表的最大下标end大,返回的空列表;如果stop比列表长度大,返回到列表的末尾

LREM:删除列表中指定的值   语法:LREM key count value

count值有以下几种:

Count>0,从列表的头开始,向尾部搜索,移除与value相等的元素,移除count个;

Count<0:,从列表尾部向头搜索,移除与value相等的元素,移除count

Count=0:移除列表中所有与value相等的值

LINDEX: 获得指定索引元素的值    LINDEX key index

LSET:设置指定索引元素的值   语法:LSET key index value

LTRIM: 只保留列表的片段   语法:LTRIM keystart stop

LINSERT:向列表插入元素   语法:LINSERT keyBEFORE|AFTER pivot value

RPOPLPUSH:将元素从一个列表转到另一个列表

BLPOP:LPOP的阻塞版本  语法: BLPOP key[key…] timeout

Set类型

SADD:像集合中添加元素 语法:SADD key member [,…]

SMEMBERS:返回指定集合中的元素   语法:SMEMBERS key

SISMEMBER:检测value是否是集合中的成员  语法:SISMEMBER key value

SREM:删除集合中的一个或者多个成员   语法:SREM key member [member…]

SPOP:删除并返回集合中的随机元素   语法: SPOP key

SRANDMEMBER:随机返回结合中的元素  SRANDMEMBER key count

count为正数,而且小于集合中的元素个数,返回的是一个包含随机元素的集合数组;

count大于集合中元素的个数,返回整个集合;

count为负数,返回一个数组,数组中的成员可能出现重复,数组的长度是count的绝对值

SDIFF:返回集合间的差集   语法: SDIFF key key …

SINTER:返回集合间的交集   语法:SINTER key key …

SUNION:返回集合间的并集  语法: SUNION key key …

SCRAD:返回集合中元素的个数  SCRAD key

SDIFFSTORE:将差集结果保存到指定集合中    SDIFFSTORE destination key key …

SINTERSTORE

SUNIONSTORE

SMOVE:将集合中元素移动另外一个集合中  SMOVE source destination member

Zset类型

ZADD:将元素及其分数添加到集合中    语法: ZADD key score member [score member]

ZADD key +inf maxInt -inf minInx

ZSCORE:获得指定元素的分数   ZSCORE key member

ZRANGE:按照元素分数从小到大的顺序返回指定索引startstop之间所有元素(包含两端)     ZRANGE key start  stop[WITHSCORES]

当两个元素的分数相同时,Redis在排序时按照字段顺序(0<9<A<Z<a<z),如果使用的是UTF-8的编码方式的中文同样按照字典顺序排列

ZREVRANGE:ZRANGE相反,按照分数从大到小的顺序     ZREVRANGE key start stop [WITHSCORES]

ZRANGEBYSCORE:获得指定分数范围内的元素,按照分数从小到大的熟悉怒,返回的是分数在指定的minmax的元素

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

ZRANGEBYSCORE PHPScore 80 90 WITHSCORES     包含8090

ZRANGEBYSCORE PHPScore (80 (90 WITHSCORES  不包含8090

ZREVRANGEBYSCORE:获得指定分数范围内的元素,按照元素的分数从大到小的顺序返回minmax之间的元素

ZREVRANGEBYSCORE keymax min [WITHSCORES] [LIMIT offset count]

ZINCRBY:操作某个元素的分数,返回操作之后的分数     ZINCRBY key increment member

ZCARD:获得集合中元素的数量   ZCARD key

ZCOUNT: 获得指定分数内的元素数量

ZREM:删除一个或多个元素,返回删除元素的个数     ZREM key member …

ZREMRANGEBYRANK:按照排名范围删除元素,按照分数从小到达的顺序删除所指定的排名范围的所有元素

ZREMRANGEBYRANK key start stop

ZREMRANGEBYSCORE:按照分数范围删除元素     ZREMRNAGEBYSCORE key min max

ZRANK:获得指定元素的排名,根据分数从小到大的顺序     ZRANK key member

ZREVRANK:获得指定元素的排名,根据分数从大到小的顺序     ZRANK key member

ZINTERSTORE:计算有序集合的交集,并将结果保存起来

ZINTERSTORE destination numkeys key key … [WEIGHTS weight weight…] [AGGEGATE SUM|MIN|MAX]

ZUNIONSTORE:计算有序集合并集,将结果保存起来

ZINTERSTORE destination numkeys  key key … [WEIGHTS weight weight…] [AGGEGATE SUM|MIN|MAX]

KEYS相关的命令

KEYS:返回所有符合给定模式的key   语法: KEYS pattern

*: 匹配任意个字符

?:匹配一个任意字符

[]:匹配[]之间的一个字符

\x:匹配特殊字符

EXISTS:检测指定key是否存在    语法:EXISTS key

TYPE:返回key所存储的类型   语法:TYPE key

EXPIRE:设置key的过期时间  语法:EXPIRE key seconds

EXPIREAT:需要指定在指定时间戳过期   语法:EXPIREAT keytimestamp

PEXPIRE:以毫秒的形式指定过期时间   语法:PEXPIRE key milliseconds

PEXPIREAT:指定时间戳,单位为毫秒  语法:PEXPIREAT key timestamp

TTL:以秒为单位返回key剩余时间   如果key没有设置过期时间,返回-1;如果key不存在返回-2

PTTL:以毫秒为单位返回key剩余时间

PERSIST:将一个带有过期时间的key转变成永久的key  语法: PERSIST key

DEL:删除指定的key

RANDOMKEY:随机的从当前数据库中返回一个key

RENAME:重命名一个键   RENAME key  newkey

RENAMENX:如果新名称不存在才会生效

DUMP:序列化给定的key,返回序列化之后的值

RESTORE:反序列化

MOVE:将当前数据库中的key移动到另外的数据库中

6Redis的事务

1、开启事务

MULTI:开启事务,事务块中的多条语句会按照顺序放入队列当中,最后由EXEC命令来执行

MULTI

INCR counter1

INCR counter2

INCR counter3

PING

GET counter1

2、执行事务块中的命令

EXEC:执行事务块中的命令

3、监视一个或者多个key

WATCH:监视一个或者多个key,如果在执行事务之前这个key如果被其他命令改动,事务就被打断了。

UNWATCH:取消WATCH命令对所有key的监视

4、取消事务

DISCARD:

5、事务中的错误处理

语法错误:Redis接到exec后直接返回错误,正确的命令也不会被执行

运行错误:正确的命令会被执行

7Redis连接相关

PING:测试和服务器之间是否连接有效

ECHO:打印一个特定信息

QUIT:请求服务器关闭与当前客户端的连接,EXIT,CTRL-C

SHUTDOWN:关闭服务器和客户端

AUTH:指定Redis的身份验证,Redis配文件中requirepass选项的值

CONFIG SET requirepass password

登录进来之后通过AUTH password进行认证

连接的时候-a password

SELECT:选择数据库   SELECT 0

8、生存时间

EXPIRE/EXPIREAT

PEXPIRE/PEXPIREAT

PERSIST

TTL

PTTL

使用SET GETSET也会清除过期时间

9、排序相关

对数值进行排序

SORT key

SORT key DESC

对字母进行排序

SORT key ALPHA DESC

使用LIMIT限制返回结果

SORT key [ALPHA] LIMIT 0 5 DESC

根据外部key的权重进行排序

SORT uid BY user_level_*

根据排序结果取出相应键值

SORT uid GET user_name_*

将排序结果保存起来

SORT key [BY pattern] [LIMIT offset count] [GET pattern] [GET pattern] [ASC|DESC|ALPHA] [STORE destination]

 

10、发布订阅模式

PUBLISH/SUBSCRIBE

发布订阅模式的原理

包含两个角色,一个是发布者,一个是订阅者;订阅者可以订阅一个或者多个频道channel;发布者可以向指定频道发布信息

通过PUBLISH发布消息

PUBLISH channel message

PUBLISH channel1.1 'abelxu'

通过SUBSCRIBE订阅频道

SUBSCRIBE channel …

注意:发不出去的消息是不会被持久化的,只有客户端订阅了之后才会接手后面发送的消息

UNSUBSCRIBE:取消某个频道订阅,但在Redis客户端中做了限制,没有办法进行验证     UNSUBSCRIBE [channel]

PSUBSCRIBE:订阅指定的规则

UNPSUBSCRIBE:取消订阅

11、管道技术



本文转自 许大树 51CTO博客,原文链接:http://blog.51cto.com/abelxu/1892883,如需转载请自行联系原作者
相关实践学习
基于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 数据可视化 Linux
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
本文介绍了Redis的两个可视化管理工具:付费的Redis Desktop Manager和免费的Another Redis DeskTop Manager,包括它们的下载、安装和使用方法,以及在使用Another Redis DeskTop Manager连接Redis时可能遇到的问题和解决方案。
157 1
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
|
2月前
|
NoSQL Linux Redis
Docker学习二(Centos):Docker安装并运行redis(成功运行)
这篇文章介绍了在CentOS系统上使用Docker安装并运行Redis数据库的详细步骤,包括拉取Redis镜像、创建挂载目录、下载配置文件、修改配置以及使用Docker命令运行Redis容器,并检查运行状态和使用Navicat连接Redis。
352 3
|
2月前
|
NoSQL Java Redis
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
这篇文章介绍了如何使用Spring Boot整合Apache Shiro框架进行后端开发,包括认证和授权流程,并使用Redis存储Token以及MD5加密用户密码。
42 0
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
|
2月前
|
存储 Prometheus NoSQL
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
34 3
|
2月前
|
NoSQL 关系型数据库 MySQL
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
本文全面阐述了Redis事务的特性、原理、具体命令操作,指出Redis事务具有原子性但不保证一致性、持久性和隔离性,并解释了Redis事务的适用场景和WATCH命令的乐观锁机制。
404 0
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
|
2月前
|
NoSQL Redis
redis学习五、错误总结,redis正常运行时后会出现一些bug 总结。
本文介绍了Redis在正常运行时可能遇到的一个错误,即无法进行磁盘持久化的问题,并提供了通过设置`stop-writes-on-bgsave-error`为`no`来解决这一问题的方案。
127 0
|
4月前
|
缓存 NoSQL 关系型数据库
Redis学习总结
Redis学习总结
43 1
|
缓存 运维 NoSQL
收藏的博客 -- Redis学习
收藏的博客 -- Redis学习
155 0
|
6天前
|
存储 缓存 NoSQL
解决Redis缓存数据类型丢失问题
解决Redis缓存数据类型丢失问题
125 85
|
2月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
84 6