说到前面:这篇笔记只是我作为一个Redis新手,从0到认知的一个过程。后续会持续深入学习。
学习Redis,因为这是热门技术,必须掌握的技术,别人都会我不会。就这一点就够了吧。一直以来一直听说Redis,也尝试了解过相关概念和基本语法,但是没有实际使用过。按照自己的学习计划,自己是需要通过官网系统的学习一遍的,就算有看不懂的知识,通过官网也不会有遗漏的知识点。另外一点就是通过此次系统学习形成自己的学习笔记,并且在自己的脑海中搭建起自己对Redis的知识体系的架构。
我打算怎么学呢:
这其实是我自己定的自学方案模板,为什么要用官网?
让我们愉快的开始学习吧。
其他学习资源:https://www.bilibili.com/video/av49517046?from=search&seid=5207085009732188353
https://redis.io/topics/introduction
Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.
Redis是一个开放源代码(BSD许可)的内存中数据结构存储,用作数据库,缓存和消息代理。 它支持数据结构,例如字符串,哈希,列表,集合,带范围查询的排序集合,位图,超日志,带有半径查询和流的地理空间索引。 Redis具有内置的复制,Lua脚本,LRU逐出,事务和不同级别的磁盘持久性,并通过Redis Sentinel和Redis Cluster自动分区提供了高可用性。
You can run atomic operations on these types, like appending to a string; incrementing the value in a hash; pushing an element to a list; computing set intersection, union and difference; or getting the member with highest ranking in a sorted set.
In order to achieve its outstanding performance, Redis works with an in-memory dataset. Depending on your use case, you can persist it either by dumping the dataset to disk every once in a while, or by appending each command to a log. Persistence can be optionally disabled, if you just need a feature-rich, networked, in-memory cache.
为了获得出色的性能,Redis使用内存中的数据集。 根据您的用例,您可以通过将数据集偶尔转储到磁盘上,或者通过将每个命令附加到日志中来持久化它。 如果只需要功能丰富的网络内存缓存,则可以选择禁用持久性。
Redis also supports trivial-to-setup master-slave asynchronous replication, with very fast non-blocking first synchronization, auto-reconnection with partial resynchronization on net split.
Redis还支持琐碎的设置主从异步复制,具有非常快速的非阻塞首次同步,以及在网络拆分时具有部分重新同步的自动重新连接。
Redis is written in ANSI C and works in most POSIX systems like Linux, *BSD, OS X without external dependencies. Linux and OS X are the two operating systems where Redis is developed and tested the most, and we recommend using Linux for deploying. Redis may work in Solaris-derived systems like SmartOS, but the support is best effort. There is no official support for Windows builds.
Redis是用ANSI C编写的,并且可以在大多数POSIX系统中使用,例如Linux,* BSD,OS X,而无需外部依赖。 Linux和OS X是Redis开发和测试最多的两个操作系统,我们建议使用Linux进行部署。 Redis可以在基于Solaris的系统中使用,例如SmartOS,但是尽力而为。 Windows版本没有官方支持。
下载安装,官网自带安装教程,点击就下载了。(也可以手动下载tar包)
$ wget http://download.redis.io/releases/redis-5.0.7.tar.gz
$ tar xzf redis-5.0.7.tar.gz
$ cd redis-5.0.7
$ make
测试:
安装完成之后,会提示你执行:(此操作让我电脑起飞了)
make redis-test

运行:(这里默认安装在系统变量的src/目录下了)
src/redis-server

使用:启动客户端
src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"

https://zhuanlan.zhihu.com/p/37055648
先介绍了Redis的架构,和基本使用的原因。然后介绍了由一到多的集群搭建原因。和具体的实现手段。如集群,主从复制等。接下来深入Redis底层,介绍其底层数据结构和实现原理。最后介绍有问题还是查看官网,官网的资料是一手的
这就如,先学java,然后用框架,然后再回头看JVM和Java底层的实现。nice。
2020年03月16日07:23:16
简单笔记:
2020年03月17日04:25:04 - 按照一个系统的视频教学来看一遍先
https://www.bilibili.com/video/av49517046?p=2
Redis是完全免费的,遵守BSD协议,是一个高性能的(NOSQL)的key-value数据库。Redis是一个开源的使用ANSI C语言编写,支持网络,可基于 内存亦
关系型数据库:
非关系型数据库:
HBase是列存储数据库
MongoDB是文档类型数据库
Neo4j是图形(Graph)数据库
NoSQL数据库在以下几种情况下比较实用。
Redis与其他key-value缓存产品的三个特点
Redis的特点:
好多人说用Docker,为什么?Docker是什么?又有人说,体验一下原生态不好吗,非要Docker。
GCC
解压,安装 Redis
启动服务器和客户端,ping
可以通过配置文件来修改默认参数,如端口号,启动方式,等等
安装目录下的:redis.conf
使用指定配置文件启动服务器端,启动的时候
Redis关闭
## 第一种关闭:断电
##查询pid: ps -ef|grep -i redis
kill -9 pid
第二种:客户端关闭
在客户端运行:shutdown
## 公用命令
del key ##删除指定key
DUMP key ##序列化指定key
exists key ## 判断指定key是否存在
expire key seconds ##为指定key 设定指定过期时间
pexpire key milliseconds ## 毫秒
ttl key ## 查看key的存在时间, -1代表永久有效, -2 代表无效
pttl key ##以毫秒查看存在时间
persist b ## 移除过期时间
keys pattern ## 查询指定的key ? 代表占用一个字符 * 代表通配符
randomkey ##从当前数据库中随机返回一个key
select 1 ## 切换到第二个数据库 一共默认0-15 16个数据库
rename a b ## 改名 a->b
move c 1 ## 把 c 移动到指定的数据库
type key ## 返回指定key的类型
例如:Expire key seconds
redis单个key存入512m大小
key的命名不要太长,尽量不要超过1024字节,这不仅仅小号内存,而且会降低查询的效率。
key也不要太短,太短的话,key的可读性会降低;
在一个项目中,key最好用同意的命名模式,例如 user:123:password;
Key的命名区分大小写
例如:users 对应Users表。 id,name,age等相关信息 存储之后为
users:1:name 大娃
users:2:name 二娃
因为数据与数据之间是没有任何关联的,通过命名来解决。

关于二进制安全的讲解。
set key value
get key
setnx key value ## 在指定的key不存在的时候,为key设置值
getrange key start end ## 字符串截取
getset key value ## 先取值,再赋值
strlen key ## 取长度
del key ##删除
incr key ##自增,如果没有,初始化为0,然后进行incr操作
decr key ## 自减
incrby key 10 ## 自定义自增增量 10
decrby key 10 ## 自定义自减增量 10
重点介绍:
setnx key value ## 解决分布式锁 方案之一

## 基本语法
hset key field value ## 存一个
hget key field ## 取一个
hmset key field value [field value...] ## 存多个
hmget key field [field...] ##取多个
hgetall key ## 取所有
hkeys key ## 获取所有哈希表中的字段
hlen key ## 获取哈希表中字段的数量
##删除语法
hdel key field1[field2] ## 仅删除指定field
## 其他语法
hsetnx key field value ## 如果不存在,存。
hincrby key field ## 对于int类型的可以自增。
hexist key field ##判断指定key的filed是否存在。
hash 不能覆盖 String, String可以覆盖Hash

package com.dawa.jedis;
import redis.clients.jedis.Jedis;
public class JedisDemo {
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost",6379);
String ping = jedis.ping();
System.out.println(ping);
// jedis.auth("dawa");
// jedis.set("user:1", "这个是大娃");
//
String s = jedis.get("user:2");
System.out.println(s);
}
}
<dependencies>
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
</dependency>
</dependencies>
SpringData 提供了RedisTemplate模板
https://spring.io/projects/spring-data-redis
Spring Data’s mission is to provide a familiar and consistent, Spring-based programming model for data access while still retaining the special traits of the underlying data store.
It makes it easy to use data access technologies, relational and non-relational databases, map-reduce frameworks, and cloud-based data services.
Spring Data的任务是为数据访问提供一个熟悉且一致的,基于Spring的编程模型,同时仍保留基础数据存储的特殊特征。
它使使用数据访问技术,关系和非关系数据库,map-reduce框架以及基于云的数据服务变得容易。
这里学习springdata提供的Redis操作。
Spring Data Redis, part of the larger Spring Data family, provides easy configuration and access to Redis from Spring applications. It offers both low-level and high-level abstractions for interacting with the store, freeing the user from infrastructural concerns.

牛逼:
这里的自动注入。
上面的 hash 和下面的 string。 这里运用返回值的方法。自动注入


使用场景:任务队列(举例:快递流程)
无需集合,类似于java中的hashtable。集合成员唯一
差集,交集,并集等操作。
sadd
sdiff
有序集合,集合成员唯一。
zadd
默认从低到高排序
zrange 取值
zrevrange 从高到低取值
zcount 取值指定值区间的key





这个两个功能是Web开发中用到的最多的。
其实这里说的就是 0-15 这16个仓库

https://redis.io/topics/transactions
Redis事务的作用:保证一连串的命令按照串行化执行。
串行化的命令执行。





错误分两种:
Watch用来监控某个Key在事务的操作过程中,是否被修改。



RDB,AOF两种机制
RDB是通过快照
AOF是通过一定时间间隔

缓存大量失效的时候,发生大量的缓存穿透。所有的查询都落在了数据库上,造成了缓存雪崩。

如100万人同时访问,第一次一定不存在的数据。数据库查的为Null,且存不到缓存中。

canal工具:主从数据同步

触发器
Lua:Redis脚本使用lua解释器来执行脚本。
Redis2.6版本通过内嵌支持Lua环境。
执行脚本的常用命令为Eval
Redis运用于工程项目中,一台Redis是万万不能的。
如何才能保证其服务的高可用

如12306,8点抢票,最少几百万

如何提高并发能力?




主从同步的时候,主机如果只有一个,故障了,还是要废掉。


哨兵模式就是集群出现之前的一种解决方案。3.0版本之后,出现了集群的概念。

客户端与Redis节点直接连接,不需要访问中间的Proxy层。




接下来,进入官网自学环节
后续会深入学习,从实际应用入手。当然,也会从实际的面试题入手。
这个笔记仅仅记录了 花费一天的时间去了解Redis。
原文:https://www.cnblogs.com/bigbaby/p/12549948.html