redis
相关资源
-
Redis基本使用及百亿数据量中的使用技巧分享
-
谈谈Redis的SETNX https://huoding.com/2015/09/14/463
-
Redis 命令参考 — Redis 命令参考
http://doc.redisfans.com/index.html -
Redis 简介 | 菜鸟教程
https://www.runoob.com/redis/redis-intro.html -
Memcached与Redis有什么区别 - 中间件小哥 - 博客园
https://www.cnblogs.com/middleware/articles/9052394.html -
Redis 命令执行过程(上) | 程序员历小冰
http://remcarpediem.net/article/4cc1fb9/ -
Redis 命令执行过程(下) - 程序员历小冰 - 博客园
https://www.cnblogs.com/remcarpediem/p/12038377.html
Redis 简介
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
Redis 优势
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
- 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
Redis与其他key-value存储有什么不同?
- Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
- Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
服务端程序和客户端程序
redis服务程序redis-server
用于测试的客户端程序redis-cli
查看版本命令
redis-server --version
redis-server --version
redis的sentinel(哨兵)模式
Redis Sentinel机制与用法 - duanxz - 博客园
https://www.cnblogs.com/duanxz/p/4701831.html
Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自懂切换。
它的主要功能有以下几点
- 不时地监控redis是否按照预期良好地运行;
- 如果发现某个redis节点运行出现状况,能够通知另外一个进程(例如它的客户端);
- 能够进行自动切换。当一个master节点不可用时,能够选举出master的多个slave(如果有超过一个slave的话)中的一个来作为新的master,其它的slave节点会将它所追随的master的地址改为被提升为master的slave的新地址。
操作记录
redis的docker容器
docker pull redis:latest
# 启动一个redis容器,名称是 redis 容器端口6379映射到宿主机6379
docker run -d -p 6379:6379 --name=redis redis
在redis容器里面通过redis-cli shell来交互redis
#访问和redis-cli在同一台主机的redis服务
redis-cli
#明确指定redis-cli访问的redis服务的主机名和端口
redis-cli -h localhost -p 6379
# 有时候会有中文乱码,添加 --raw参数
redis-cli --raw
测试是否连上redis服务
ping
#PONG
配置命令
#获取所有配置
CONFIG GET *
#获取特定配置
CONFIG GET loglevel
#设置配置
CONFIG SET loglevel "debug"
数据类型操作
string(字符串)
#字符串类型
set hw helloworld
get hw
del hw
set hw "hello world"
get hw
set hw 'hello world'
get hw
hash(哈希)
hset sam name sam age 23 description "I am come from china"
hget sam name
hmset sam name sam age 23 description "I am come from china"
hmget sam name age description
list(列表)
lpush color red yellow blue green
lrange color 1 10
lpop color
set(集合)
sadd nums one two three four
smembers nums
zset(sorted set:有序集合)
zadd nums one 1.0 two 2.0 three 3.0
zranage nums 0 10
zrangebyscore nums 0 10
redis config
可以不用细看,需要的时候再看
Redis 配置 | 菜鸟教程
https://www.runoob.com/redis/redis-conf.html
直接更改redis.conf文件,可以在启动redis-server的时候指定配置文件,没有指定则使用默认的配置文件
windows下为redis的安装目录下,配置文件名称是
redis.windows.conf
获取和设置redis的配置的命令
#获取所有配置
CONFIG GET *
#获取特定配置
CONFIG GET loglevel
#设置配置
CONFIG SET loglevel "debug"
redis支持的数据类型
get一个不存在的数据时候返回 nil,等同于null
Redis 数据类型 | 菜鸟教程
https://www.runoob.com/redis/redis-data-types.html
- string(字符串)
- hash(哈希)
- list(列表)
- set(集合)
- zset(sorted set:有序集合)
各个数据类型应用场景:
类型 | 简介 | 特性 | 场景 |
---|---|---|---|
String(字符串) | 二进制安全 | 可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512M | --- |
Hash(字典) | 键值对集合,即编程语言中的Map类型 | 适合存储对象,并且可以像数据库中update一个属性一样只修改某一项属性值(Memcached中需要取出整个字符串反序列化成对象修改完再序列化存回去) | 存储、读取、修改用户属性 |
List(列表) | 链表(双向链表) | 增删快,提供了操作某一段元素的API | 1,最新消息排行等功能(比如朋友圈的时间线) 2,消息队列 |
Set(集合) | 哈希表实现,元素不重复 | 1、添加、删除,查找的复杂度都是O(1) 2、为集合提供了求交集、并集、差集等操作 | 1、共同好友 2、利用唯一性,统计访问网站的所有独立ip 3、好友推荐时,根据tag求交集,大于某个阈值就可以推荐 |
Sorted Set(有序集合) | 将Set中的元素增加一个权重参数score,元素按score有序排列 | 数据插入集合时,已经进行天然排序 | 1、排行榜 2、带权重的消息队列 |
redis常用的key命令
Redis 键(key) | 菜鸟教程
https://www.runoob.com/redis/redis-keys.html
序号 | 命令及描述 |
---|---|
1 | DEL key 该命令用于在 key 存在时删除 key。 |
2 | DUMP key 序列化给定 key ,并返回被序列化的值。 |
3 | EXISTS key 检查给定 key 是否存在。 |
4 | EXPIRE key seconds 为给定 key 设置过期时间,以秒计。 |
5 | EXPIREAT key timestamp EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。 |
6 | PEXPIRE key milliseconds 设置 key 的过期时间以毫秒计。 |
7 | PEXPIREAT key milliseconds-timestamp 设置 key 过期时间的时间戳(unix timestamp) 以毫秒计 |
8 | KEYS pattern 查找所有符合给定模式( pattern)的 key 。 |
9 | MOVE key db 将当前数据库的 key 移动到给定的数据库 db 当中。 |
10 | PERSIST key 移除 key 的过期时间,key 将持久保持。 |
11 | PTTL key 以毫秒为单位返回 key 的剩余的过期时间。 |
12 | TTL key 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。 |
13 | RANDOMKEY 从当前数据库中随机返回一个 key 。 |
14 | RENAME key newkey 修改 key 的名称 |
15 | RENAMENX key newkey 仅当 newkey 不存在时,将 key 改名为 newkey 。 |
16 | TYPE key 返回 key 所储存的值的类型。 |
更多命令请参考:https://redis.io/commands
Redis HyperLogLog
Redis HyperLogLog | 菜鸟教程
https://www.runoob.com/redis/redis-hyperloglog.html
Redis 发布订阅
Redis 发布订阅 | 菜鸟教程
https://www.runoob.com/redis/redis-pub-sub.html
Redis 事务
Redis 事务 | 菜鸟教程
https://www.runoob.com/redis/redis-transactions.html
Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:
- 批量操作在发送 EXEC 命令前被放入队列缓存。
- 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
- 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。
一个事务从开始到执行会经历以下三个阶段:
- 开始事务。
- 命令入队。
- 执行事务。
Redis 脚本
Redis 脚本 | 菜鸟教程
https://www.runoob.com/redis/redis-scripting.html
Redis 脚本使用 Lua 解释器来执行脚本。 Redis 2.6 版本通过内嵌支持 Lua 环境。执行脚本的常用命令为 EVAL。
Redis 连接
Redis 连接 | 菜鸟教程
https://www.runoob.com/redis/redis-connection.html
echo "this is test message"
Redis 服务器
Redis 服务器 | 菜鸟教程
https://www.runoob.com/redis/redis-server.html
info
Redis 数据备份与恢复
Redis 数据备份与恢复 | 菜鸟教程
https://www.runoob.com/redis/redis-backup.html
SAVE
CONFIG GET dir
Redis 安全
Redis 安全 | 菜鸟教程
https://www.runoob.com/redis/redis-security.html
CONFIG get requirepass
CONFIG set requirepass "123456"
AUTH "123456"
Redis 性能测试
Redis 性能测试 | 菜鸟教程
https://www.runoob.com/redis/redis-benchmarks.html
同时执行 10000 个请求来检测性能
redis-benchmark -n 10000 -q
Redis 客户端连接
Redis 客户端连接 | 菜鸟教程
https://www.runoob.com/redis/redis-client-connection.html
redisson
高性能分布式锁-redisson的使用 - webwangbao - 博客园
https://www.cnblogs.com/webwangbao/p/9247318.html
发表评论