Redis笔记(入门级学习,了解个大概)

Redis笔记

入门简介

入门介绍

在访问量不大的时候,单个数据库完全可以轻松应对

数据存储的瓶颈是什么?

1、数据量的总大小一个机器放不下

2、数据的索引一个机器的内存放不下

3、访问量一个实例不能承受

1)单体mysql的美好年代

2)缓存+mysql+垂直拆分

3)mysql主从读写分离

4)分表分库+水平拆分+mysql集群

为什么使用NoSQL?

数据成倍增加,传统关系型数据库难以支撑

是什么?

NoSQL(Not Only SQL)泛指非关系型数据库

特点

易扩展:数据之间无关系,更容易拓展

高性能

多样灵活的数据模型

NoSQL数据库的四大分类

KV

文档型句酷

列存储数据库

图关系数据库

CAP+BASE

传统的ACID:原子性,一致性, 独立性,持久性

CAP:强一致性,可用性,分区容错性

CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个

CA-单点集群:传统Oracle数据库

CP-性能不是很高:Redis

AP-一致性要求低一些:大多数网站

BASE:基本可用、软状态、最终一致

Redis入门

Redis是什么?

分布式内存数据库,基于内存运行

热门NoSQL数据库

Redis:远程字典服务器

Redis特点

支持数据持久化

不仅提供kv类型的数据,同时还提供list、set、zset、hasj等数据结构存储

支持数据的备份

能干嘛

内存存储和持久化

发布、订阅消息系统

定时器、计数器

知识点

数据类型、基本操作和配置

持久化和复制、RDB/AOF

事务的控制

复制

Redis数据类型

String(字符串):1个ket对应一个value

Hash(哈希):类似java的Map

List:有序

Set:无序

Zset:有序集合

Redis键(key)

SELECT index:切换到指定的数据库,数据库索引号 index 用数字值指定,以 0 作为起始索引值。

MOVE key db:将当前数据库的 key 移动到给定的数据库 db 当中。

DBSIZE:返回当前数据库的 key 的数量。

KEYS pattern:查找所有符合给定模式 patternkey

**SET key value **:将字符串值 value 关联到 key

EXISTS key:检查给定 key 是否存在。

TTL key:以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。

EXPIRE key seconds:为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除。

DEL key [key …]:删除给定的一个或多个 key

TYPE key:返回 key 所储存的值的类型。

LPUSH key value [value …]:将一个或多个值 value 插入到列表 key 的表头

LRANGE key start stop:返回列表 key 中指定区间内的元素,区间以偏移量 startstop 指定。

Redis字符串(String)

DEL key [key …]:删除给定的一个或多个 key

GET key:返回 key 所关联的字符串值。

APPEND key value:如果 key 已经存在并且是一个字符串,将 value 追加到 key 原来的值的末尾。如果 key 不存在, 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。

STRLEN key:返回 key 所储存的字符串值的长度。

INCR key:将 key 中储存的数字值增一,如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

DECRBY key decrement:将 key 所储存的值减去减量 decrement

GETRANGE key start end:返回 key 中字符串值的子字符串,字符串的截取范围由 startend 两个偏移量决定(包括 startend 在内)。

SETRANGE key offset value:用 value 参数覆写(overwrite)给定 key 所储存的字符串值,从偏移量 offset 开始。

SETEX key seconds value:将值 value 关联到 key ,并将 key 的生存时间设为 seconds (以秒为单位)。

SETNX key value:将 key 的值设为 value ,当且仅当 key 不存在。

MSET key value [key value …]:同时设置一个或多个 key-value 对。

MGET key [key …]:返回所有(一个或多个)给定 key 的值。

MSETNX key value [key value …]:同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。

Redis列表(List)

LPUSH key value [value …]:将一个或多个值 value 插入到列表 key 的表头

RPUSH key value [value …]:将一个或多个值 value 插入到列表 key 的表尾(最右边)。

LRANGE key start stop:返回列表 key 中指定区间内的元素,区间以偏移量 startstop 指定。

LPOP key:移除并返回列表 key 的头元素。

RPOP key:移除并返回列表 key 的尾元素。

LINDEX key index:返回列表 key 中,下标为 index 的元素。

LLEN key:返回列表 key 的长度。

LREM key count value:根据参数 count 的值,移除列表中与参数 value 相等的元素。

LTRIM key start stop:对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除

RPOPLPUSH source destination:在一个原子时间内,执行以下两个动作:

  • 将列表 source 中的最后一个元素(尾元素)弹出,并返回给客户端。
  • source 弹出的元素插入到列表 destination ,作为 destination 列表的的头元素。

LSET key index value:将列表 key 下标为 index 的元素的值设置为 value

LINSERT key BEFORE|AFTER pivot value:将值 value 插入到列表 key 当中,位于值 pivot 之前或之后。

  • 它是一个字符串链表,left,right都可以插入添加;
  • 如果键不存在,创建新的链表;
  • 如果键已存在,新增内容;
  • 如果值全移除,对应的键也就消失了;
  • 链表的操作无论是头和尾效率都极高,单假如是对中间元素进行操作,效率就很低下了。

Redis集合(Set)

SADD key member [member …]:将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。

SCARD key:返回集合 key 的基数(集合中元素的数量)。

SREM key member [member …]:移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。

SRANDMEMBER key [count]:如果命令执行时,只提供了 key 参数,那么返回集合中的一个随机元素。

SMOVE source destination member:将 member 元素从 source 集合移动到 destination 集合。

SDIFF key [key …]:返回一个集合的全部成员,该集合是所有给定集合之间的差集

SINTER key [key …]:返回一个集合的全部成员,该集合是所有给定集合的交集

Redis哈希(Hash)

HSET key field value:将哈希表 key 中的域 field 的值设为 value

HGET key field:返回哈希表 key 中给定域 field 的值。

HMSET key field value [field value …]:同时将多个 field-value (域-值)对设置到哈希表 key 中。

HMGET key field [field …]:返回哈希表 key 中,一个或多个给定域的值。

HGETALL key:返回哈希表 key 中,所有的域和值。

HDEL key field [field …]:删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。

HEXISTS key field:查看哈希表 key 中,给定域 field 是否存在。

HKEYS key:返回哈希表 key 中的所有域。

HVALS key:返回哈希表 key 中所有域的值。

HINCRBY key field increment:为哈希表 key 中的域 field 的值加上增量 increment

HINCRBYFLOAT key field increment:为哈希表 key 中的域 field 加上浮点数增量 increment

HSETNX key field value:将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在。

Redis有序集合Zset(sorted set)

在set基础上,加一个score值

ZADD key score member [[score member] [score member] …]:将一个或多个 member 元素及其 score 值加入到有序集 key 当中。

**ZRANGE key start stop [WITHSCORES]**返回有序集 key 中,指定区间内的成员。其中成员的位置按 score 值递增(从小到大)来排序。

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]:返回有序集 key 中,所有 score 值介于 minmax 之间(包括等于 minmax )的成员。有序集成员按 score 值递增(从小到大)次序排列。

ZREM key member [member …]:移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。

ZCARD key:返回有序集 key 的基数。

ZCOUNT key min max:返回有序集 key 中, score 值在 minmax 之间(默认包括 score 值等于 minmax )的成员的数量。

ZREVRANK key member:返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递减(从大到小)排序。

ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]:返回有序集 key 中, score 值介于 maxmin 之间(默认包括等于 maxmin )的所有的成员。有序集成员按 score 值递减(从大到小)的次序排列。

配置文件(Redis.conf)

daemonize no:是否以守护进程的方式运行

pidfile/var/run/redis/pid:pid写入指定文件

port 6379:指定Redis监听端口

bind 127.0.0.1:绑定的主机地址

timeout 300 :闲置关闭时长

loglevel verbose:日志记录级别

logfile stdout:日志记录方式

. . .

Redis的持久化(rdb+aof)

RDB

RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。

AOF

AOF持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。

Redis事务

可以一次执行多个命令,本质是一组命令的集合。

一个队列中,一次性、顺序性、排他性的执行一系列命令

Redis事务命令

MULTI:标记一个事务块的开始。

EXEC: 执行所有事务块内的命令。

DISCARD :取消事务,放弃执行事务块内的所有命令。

悲观锁and乐观锁

悲观锁

每次拿数据的时候都认为别人会修改,所以每次在哪数据的时候都会上锁

乐观锁

每次拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以是用版本号等机制。

CAS

watch监控

[WATCH key key …]:监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

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

Watch指令,类似乐观锁,事务提交时,如果key的值已被别的客户端改变,整个事务队列都不会被执行

Redis的发布订阅

进程间的一种消息通信模式:发布者发送消息,订阅者接收消息

一般企业不用redis作为消息中间件使用

Jedis

redis基本操作

Jedis jedis=new Jedis("127.0.0.1",6379);
System.out.println(jedis.ping());
jedis.set("k10","v10");
 Set<String> set=jedis.keys("*");
System.out.println(set);

redis事务

Transaction transaction=jedis.multi();
transaction.set("key","value");
transaction.exec();

s

redis基本操作

Jedis jedis=new Jedis("127.0.0.1",6379);
System.out.println(jedis.ping());
jedis.set("k10","v10");
 Set<String> set=jedis.keys("*");
System.out.println(set);

redis事务

Transaction transaction=jedis.multi();
transaction.set("key","value");
transaction.exec();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小赵OvO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值