< 返回技术文档列表

Redis全面实战教程

发布时间:2021-01-31 20:30:02⊙投诉举报

Redis全面实战教程

好书推荐

Redis实战.pdf:
http://notescloud.top/cloudSearch/detail?id=1079

Redis入门指南(第2版).pdf:
http://notescloud.top/cloudSearch/detail?id=1078

1.缓存的需求

前台页面广告位数据无需每次查询后端系统的接口,可以在前端系统增加缓存,提高访问首页的速度。

电商网站首页左侧商品类目一栏的数据也可以缓存起来,不用每次打开首页都去数据库读取数据,读取数据库IO开销大。

处理方案:使用缓存。

1.1目前缓存的主流技术

1、Redis
2、Memcached

二者谁的性能更高?
1、单纯从缓存命中的角度来说,是Memcached要高,Redis和Memcache的差距不大
2、但是,Redis提供的功能更加的强大

二者的区别是什么?
1、Memcache是多线程
2、Redis是单线程

1.2什么是缓存?

image.pngimage.png

2.Redis

2.1.NoSQL

image.png

2.2.主流的NoSQL产品

image.png

2.3.Redis简介

Redis官网: http://redis.io/

image.png

redis是Nosql数据库中使用较为广泛的非关系型内存数据库,redis内部是一个key-value存储系统。它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型,相似于Java中的map)。Redis基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为数据结构存储服务务器。

2.4.历史与发展

image.png

2.5.Redis的特性

image.png

与其余NoSQL数据库相比,Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其余数据库的进化路径。Redis的数据类型都是基于基本数据结构的,同时对程序员透明,无需进行额外的笼统。
Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,由于数据量不能大于硬件内存。内存数据库的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,由于他们并不需要进行随机访问。
Redis特性:
性能极高 -- Redis能读的速度是110000次/s,写的速度是81000次/s 。
丰富的数据类型 -- Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
原子 -- Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
其它特性 -- Redis还支持 publish/subscribe, 通知, key 过期等等特性。

2.6.Redis版本说明

image.png

2.7.下载Redis

Linux版本 2.8.11 :
http://download.redis.io/releases/redis-2.8.11.tar.gz
Linux所有版本
http://download.redis.io/releases/

Windows(64位)版本 2.8.9 :
MSOpenTech/redis/blob/2.8/bin/release/redis-2.8.9.zip?raw=true
Windows(32位)版本 2.6 :
MSOpenTech/redis/blob/2.6/bin/release/redisbin.zip?raw=true
Windows所有版本:
MicrosoftArchive/redis/releases

2.8.Redis的安装

2.8.1.安装文件

image.pngimage.png

2.8.2.安装方式一

双击打开redis-server.exe就可:

image.png

测试:
双击打开redis-cli.exe

image.png

2.8.3.安装方式二(安装到系统服务)

先删除原有的系统服务:

image.png

进到redis目录执行如下命令安装服务:

image.png

2.8.4.32位操作系统安装

只能通过双击打开redis-server.exe启动,不能安装到系统服务。

2.8.5.注意事项

image.png

因为文件系统非NTFS,导致Redis启动失败:

image.png

限制Redis的最大内存(redis.windows-service.conf):

image.png

image.png

2.9.Redis-cli使用

2.9.1.redis-cli的使用之发送命令

从windows命令行进入到redis安装目录执行如下命令:

image.png

2.9.2.redis-cli的使用之命令返回值

image.png

2.10.Redis的多数据库

image.png

FLUSHALL -- 清空所有数据库的所有数据
FLUSHDB -- 清空当前所在数据库的数据

2.10.1.配置数据库数量

image.png

2.11.Redis的基本命令

2.11.1.KEYS

image.png

2.11.2.EXISTS

image.png

2.11.3.DEL

image.png

2.11.4.TYPE

image.png

2.11.5.HELP

HELP 空格 tab键

image.png

3.Redis的字符串数据类型(String)

3.1.字符串类型

image.png

3.2.GET、SET

image.png

3.3.INCR

image.png

3.4.INCRBY

image.png

3.5.DECR、DECRBY

image.png

3.6.APPEND

image.png

3.7.STRLEN

image.png

3.8.MSET、MGET

image.png

下表列出了少量用于在Redis中管理字符串的基本命令。
编号 命令 形容说明
1 SET key value 此命令设置指定键的值。
2 GET key 获取指定键的值。
3 GETRANGE key start end 获取存储在键上的字符串的子字符串。
4 GETSET key value 设置键的字符串值并返回其旧值。
5 GETBIT key offset 返回在键处存储的字符串值中偏移处的位值。
6 MGET key1 [key2...] 获取所有给定键的值
7 SETBIT key offset value 存储在键上的字符串值中设置或者清理偏移处的位
8 SETEX key seconds value 使用键和到期时间来设置值
9 SETNX key value 设置键的值,仅当键不存在时
10 SETRANGE key offset value 在指定偏移处开始的键处覆盖字符串的一部分
11 STRLEN key 获取存储在键中的值的长度
12 MSET key value [key value ...] 为多个键分别设置它们的值
13 MSETNX key value [key value ...] 为多个键分别设置它们的值,仅当键不存在时
14 PSETEX key milliseconds value 设置键的值和到期时间(以毫秒为单位)
15 INCR key 将键的整数值添加1
16 INCRBY key increment 将键的整数值按给定的数值添加
17 INCRBYFLOAT key increment 将键的浮点值按给定的数值添加
18 DECR key 将键的整数值减1
19 DECRBY key decrement 按给定数值减少键的整数值
20 APPEND key value 将指定值附加到键

  1. 列表类型(List)

Redis列表是简单的字符串列表,按照插入顺序排序。你可以增加一个元素到列表的头部(左边)或者者尾部(右边)
一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

redis 127.0.0.1:6379> LPUSH runoobkey redis
(integer) 1
redis 127.0.0.1:6379> LPUSH runoobkey mongodb
(integer) 2
redis 127.0.0.1:6379> LPUSH runoobkey mysql
(integer) 3
redis 127.0.0.1:6379> LRANGE runoobkey 0 10

  1. "mysql"
  2. "mongodb"
  3. "redis"

Redis 列表命令
下表列出了列表相关的基本命令:
序号 命令及形容
1 BLPOP key1 [key2 ] timeout
移出并获取列表的第一个元素, 假如列表没有元素会阻塞列表直到等待超时或者发现可弹出元素为止。
2 BRPOP key1 [key2 ] timeout
移出并获取列表的最后一个元素, 假如列表没有元素会阻塞列表直到等待超时或者发现可弹出元素为止。
3 BRPOPLPUSH source destination timeout
从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 假如列表没有元素会阻塞列表直到等待超时或者发现可弹出元素为止。
4 LINDEX key index
通过索引获取列表中的元素
5 LINSERT key BEFORE|AFTER pivot value
在列表的元素前或者者后插入元素
6 LLEN key
获取列表长度
7 LPOP key
移出并获取列表的第一个元素
8 LPUSH key value1 [value2]
将一个或者多个值插入到列表头部
9 LPUSHX key value
将一个值插入到已存在的列表头部
10 LRANGE key start stop
获取列表指定范围内的元素
11 LREM key count value
移除列表元素
12 LSET key index value
通过索引设置列表元素的值
13 LTRIM key start stop
对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
14 RPOP key
移除并获取列表最后一个元素
15 RPOPLPUSH source destination
移除列表的最后一个元素,并将该元素增加到另一个列表并返回
16 RPUSH key value1 [value2]
在列表中增加一个或者多个值
17 RPUSHX key value
为已存在的列表增加值

5.Redis 集合(Set)

5.1.set

Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中 集合是通过哈希表实现的,所以增加,删除,查找的复杂度都是O(1)。
集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

实例
redis 127.0.0.1:6379> SADD runoobkey2 redis
(integer) 1
redis 127.0.0.1:6379> SADD runoobkey2 mongodb
(integer) 1
redis 127.0.0.1:6379> SADD runoobkey2 mysql
(integer) 1
redis 127.0.0.1:6379> SADD runoobkey mysql
(integer) 0
redis 127.0.0.1:6379> SMEMBERS runoobkey

  1. "mysql"
  2. "mongodb"
  3. "redis"
    在以上实例中我们通过 SADD 命令向名为 runoobkey 的集合插入的三个元素。

Redis 集合命令
下表列出了 Redis 集合基本命令:
序号 命令及形容
1 SADD key member1 [member2]
向集合增加一个或者多个成员
2 SCARD key
获取集合的成员数
3 SDIFF key1 [key2]
返回给定所有集合的差集
4 SDIFFSTORE destination key1 [key2]
返回给定所有集合的差集并存储在 destination 中
5 SINTER key1 [key2]
返回给定所有集合的交集
6 SINTERSTORE destination key1 [key2]
返回给定所有集合的交集并存储在 destination 中
7 SISMEMBER key member
判断 member 元素能否是集合 key 的成员
8 SMEMBERS key
返回集合中的所有成员
9 SMOVE source destination member
将 member 元素从 source 集合移动到 destination 集合
10 SPOP key
移除并返回集合中的一个随机元素
11 SRANDMEMBER key [count]
返回集合中一个或者多个随机数
12 SREM key member1 [member2]
移除集合中一个或者多个成员
13 SUNION key1 [key2]
返回所有给定集合的并集
14 SUNIONSTORE destination key1 [key2]
所有给定集合的并集存储在 destination 集合中
15 SSCAN key cursor [MATCH pattern] [COUNT count]
迭代集合中的元素

5.2.有序集合(sorted set)

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以增加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
实例
redis 127.0.0.1:6379> ZADD runoobkey 1 redis
(integer) 1
redis 127.0.0.1:6379> ZADD runoobkey 2 mongodb
(integer) 1
redis 127.0.0.1:6379> ZADD runoobkey 3 mysql
(integer) 1
redis 127.0.0.1:6379> ZADD runoobkey 3 mysql
(integer) 0
redis 127.0.0.1:6379> ZADD runoobkey 4 mysql
(integer) 0
redis 127.0.0.1:6379> ZRANGE runoobkey 0 10 WITHSCORES

  1. "redis"
  2. "1"
  3. "mongodb"
  4. "2"
  5. "mysql"
  6. "4"
    在以上实例中我们通过命令 ZADD 向 redis 的有序集合中增加了三个值并关联上分数。

Redis 有序集合命令
下表列出了 redis 有序集合的基本命令:
序号 命令及形容
1 ZADD key score1 member1 [score2 member2]
向有序集合增加一个或者多个成员,或者者升级已存在成员的分数
2 ZCARD key
获取有序集合的成员数
3 ZCOUNT key min max
计算在有序集合中指定区间分数的成员数
4 ZINCRBY key increment member
有序集合中对指定成员的分数加上增量 increment
5 ZINTERSTORE destination numkeys key [key ...]
计算给定的一个或者多个有序集的交集并将结果集存储在新的有序集合 key 中
6 ZLEXCOUNT key min max
在有序集合中计算指定字典区间内成员数量
7 ZRANGE key start stop [WITHSCORES]
通过索引区间返回有序集合成指定区间内的成员
8 ZRANGEBYLEX key min max [LIMIT offset count]
通过字典区间返回有序集合的成员
9 ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT]
通过分数返回有序集合指定区间内的成员
10 ZRANK key member
返回有序集合中指定成员的索引
11 ZREM key member [member ...]
移除有序集合中的一个或者多个成员
12 ZREMRANGEBYLEX key min max
移除有序集合中给定的字典区间的所有成员
13 ZREMRANGEBYRANK key start stop
移除有序集合中给定的排名区间的所有成员
14 ZREMRANGEBYSCORE key min max
移除有序集合中给定的分数区间的所有成员
15 ZREVRANGE key start stop [WITHSCORES]
返回有序集中指定区间内的成员,通过索引,分数从高究竟
16 ZREVRANGEBYSCORE key max min [WITHSCORES]
返回有序集中指定分数区间内的成员,分数从高到低排序
17 ZREVRANK key member
返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
18 ZSCORE key member
返回有序集中,成员的分数值
19 ZUNIONSTORE destination numkeys key [key ...]
计算给定的一个或者多个有序集的并集,并存储在新的 key 中
20 ZSCAN key cursor [MATCH pattern] [COUNT count]
迭代有序集合中的元素(包括元素成员和元素分值)

文章太长,简书不让发,请看源码

原文链接:http://www.notescloud.top/cloudSearch/detail?id=2374


/template/Home/Zkeys/PC/Static