写作时间:2019-12-01
Spring Boot: 2.2.1 ,JDK: 1.8, IDE: IntelliJ IDEA
1. 说明
Remote Dictionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。
Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
Redis的数据结构,例如以下几种:
- String: 字符串
- Hash: 散列
- List: 列表
- Set: 集合
- Sorted Set: 有序集合
相关资源
Redis 官网:https://redis.io/
Redis 在线测试:http://try.redis.io/
Spring 对 Redis 的支持
- Spring Data Redis
- 支持的客户度 Jedis / Lettuce
- RedisTemplate
- Redis Repository
2. Redis 优势
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。 - 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
3. Redis 与其他 key - value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
4. Redis与其他key-value存储有什么不同?
-
Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
-
Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
5. Jedis 客户端的简单实用
- Jedis 不是线程安全的
- 通过 JedisPool 获得 Jedis 实例
- 直接使用 Jedis 中的方法
6. 通过 Docker 启动 Redis
官方指引
- https://hub.docker.com/
进入镜像中心,搜索redis,第一个就是官方的镜像 - https://hub.docker.com/_/redis
搜索Redis镜像
% docker search redis
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
redis Redis is an open source key-value store that… 7343 [OK]
bitnami/redis Bitnami Redis Docker Image 127 [OK]
sameersbn/redis 77 [OK]
...
获取镜像
- docker pull redis
查看本地镜像
% docker images redis
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 63130206b0fa 10 days ago 98.2MB
创建启动 Redis
- docker run -d -p 6379:6379 -v $PWD/data:/data redis
解析:
-
-p 6379:6379 : 将容器的6379端口映射到主机的6379端口
-
-v $PWD/data:/data : 将主机中当前目录下的data挂载到容器的/data
如果已经存在 Redis的镜像,直接启动就好
- docker start redis
查看Docker中的进程
% docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a29d10ecd6d5 redis "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:6379->6379/tcp elastic_curie
运行Redis客户端,注意要跟Server关联,也即是上面的Container Id
% docker exec -it a29d10ecd6d5 redis-cli
查看Redis 信息
% docker exec -it a29d10ecd6d5 redis-cli
127.0.0.1:6379> info
# Server
redis_version:5.0.5
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:442b43d467cd2b03
redis_mode:standalone
os:Linux 4.9.184-linuxkit x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:8.3.0
process_id:1
run_id:ae99dde4e98d8316ba0fb9ec489a29e1c34a9de6
tcp_port:6379
uptime_in_seconds:163
uptime_in_days:0
hz:10
configured_hz:10
lru_clock:8918360
executable:/data/redis-server
config_file:
...
操作hset 命令
127.0.0.1:6379> hset myhash field1 "Hello"
(integer) 1
127.0.0.1:6379> hget myhash field1
"Hello"
127.0.0.1:6379> hgetall myhash
1) "field1"
2) "Hello"
7. 总结
恭喜你,学会了Redis操作数据。
8. 参考
https://redis.io
http://try.redis.io/
https://hub.docker.com/_/redis
https://www.runoob.com/redis/redis-tutorial.html
https://www.runoob.com/docker/docker-install-redis.html