Redis 教程入门详解

  • 一、Redis简介
    • 1.1 redis的特点
    • 1.2 Redis 优势
    • 1.3 Redis与其他key-value存储有什么不同?
    • 1.4 Redis 数据类型
      • 1.4.1 String (字符串类型)
      • 1.4.2 Hash(哈希,类似 Java里的Map)
      • 1.4.3 List(列表)
      • 1.4.4 Set(集合)
      • 1.4.5 Zset(sorted set:有序集合)
    • 1.5、redis的启动运行
  • 二、Redis数据类型
    • 2.1 redis键(key)
    • 2.2 字符串 String
    • 2.3 列表 List
    • 2.4 哈希 Hash
    • 2.5 集合 Set
    • 2.6 有序集合(sorted set)

一、Redis简介

REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。
Redis是一个开源的使用ANSIC语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

Redis 最好的学习网站 ,链接直达 Redis中文网
Redis 教程-编程之家

1.1 redis的特点

Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库
Redis 与其他 key – value 缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。

1.2 Redis 优势

  1. 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  2. 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  3. 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
  4. 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

1.3 Redis与其他key-value存储有什么不同?

  • Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象

  • Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

1.4 Redis 数据类型

Redis支持五种常见数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)

1.4.1 String (字符串类型)

  • String是redis最基本的类型,你可以理解成Memcached一模一样的类型,一个key对应一个value。
  • String类型是二进制安全的,意思是redis的string可以包含任何数据,比如jpg图片或者序列化的对象。
  • String类型是redis最基本的数据类型,一个redis中字符串value最多可以是512M

1.4.2 Hash(哈希,类似 Java里的Map)

  • Redis hash 是一个键值对集合。 Redis hash是一个String类型的field和value的映射表,hash特别适合用于存储对象。
  • 类似Java里面的Map<String,Object>

1.4.3 List(列表)

Redis列表是简单的字符串列表,按照插入顺序排序,你可以添加一个元素到列表的头部(左边)或者尾 部(右边)。 它的底层实际是个链表 !

1.4.4 Set(集合)

Redis的Set是String类型的无序集合,它是通过HashTable实现的 !

1.4.5 Zset(sorted set:有序集合)

  • Redis zset 和 set 一样,也是String类型元素的集合,且不允许重复的成员。
  • 不同的是每个元素都会关联一个double类型的分数。
  • Redis正是通过分数来为集合中的成员进行从小到大的排序,zset的成员是唯一的,但是分数(Score) 却可以重复。

1.5、redis的启动运行

Redis 的安装教程就不在这里介绍,如有需要可访问windows版本、Linux版本

因为本人采用的是Win版本,所以这里只介绍Windows系统的启动方式。
Redis 可分为redis-server服务 和 redis-cli客户端,在运行客户端之前先需要启动服务。

Redis 教程-编程之家Redis-server服务启动方式
方式一:

  1. 双击redis-server即可启动
  2. 然后双击redis-cli启动运行Redis
    (左图启动redis服务,右图客户端输入redis-cli 连接,输入ping 如果返回PONG则说明redis连接成功)
    Redis 教程-编程之家
    通过方式一即可启动服务,不过在关掉该窗口后redis服务就会关闭,我们也可以选择一直开启服务。

方法二 redis作为windows服务启动方式

  • 启动服务:redis-server –service-start
  • 停止服务:redis-server –service-stop

在输入命令后,我们可以在任务管理器中看到redis的进程,然后dos窗口下输入redis-cli 就可以连接成功。(如果需要在任意目录启动服务,可以自行配置redis的环境变量)
Redis 教程-编程之家

二、Redis数据类型

2.1 redis键(key)

Redis 键命令用于管理 redis 的键。

命令 描述
DEL key 如果key 存在则删除 key
keys * 查看所有的key
select db 选择转换数据库
flushdb 删除当前数据库里的文件
flushall 删除所有数据库文件
exists key 判断某个key是否存在
move key db 将该关键字从库中移除
expire key second 为当前key设置生存时间
ttl key 查看当前key还有多少秒过期
TYPE key 返回 key 所储存的值的类型
rename key newkey 修改 key 的名称

Redis 教程-编程之家

如果需要了解更多命令请参考:Redis教程

2.2 字符串 String

Redis 教程-编程之家

	127.0.0.1:6379[1]> set name zhangsan  # 设置k-vOK127.0.0.1:6379[1]> get name  	#根据key获取value"zhangsan"127.0.0.1:6379[1]> keys *  		#查看当前库有多少key1) "name"127.0.0.1:6379[1]> exists name	#查看是否存在当前key(integer) 1127.0.0.1:6379[1]> append name Love_lisi	#如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾(integer) 17127.0.0.1:6379[1]> strlen name   #返回回 key 所储存的字符串值的长度(integer) 17127.0.0.1:6379[1]> get name"zhangsanLove_lisi"127.0.0.1:6379[1]> getrange name 0 5  #获取部分字符串"zhangs"127.0.0.1:6379[1]> getrange name 0 -1 #获取所有字符串"zhangsanLove_lisi"127.0.0.1:6379[1]> 127.0.0.1:6379[1]> set age 20OK127.0.0.1:6379[1]> incr age  	# 将key所对应的v+1(integer) 21127.0.0.1:6379[1]> incr age (integer) 22127.0.0.1:6379[1]> get age"22"127.0.0.1:6379[1]> decr age		# 将key所对应的v-1(integer) 21127.0.0.1:6379[1]> decr age		(integer) 20127.0.0.1:6379[1]> get age"20"127.0.0.1:6379[1]> incrby age 5 	# 将key所对应的v+指定数值(integer) 25127.0.0.1:6379[1]> get age"25"127.0.0.1:6379[1]> decrby age 10	# 将key所对应的v-指定数值(integer) 15127.0.0.1:6379[1]> get age"15"127.0.0.1:6379[1]> .....

2.3 列表 List

  • Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

  • 一个列表最多可以包含 232 – 1 个元素 (4294967295, 每个列表超过40亿个元素)。

Redis 教程-编程之家

127.0.0.1:6379[1]> lpush list 1  	#将一个值插入到列表(左)头部。
(integer) 1
127.0.0.1:6379[1]> lpush list 2
(integer) 2
127.0.0.1:6379[1]> lpush list 3
(integer) 3
127.0.0.1:6379[1]> lrange list 0 -1		#lrange:返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。# 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素。# 也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素
1) "3"
2) "2"
3) "1"127.0.0.1:6379[1]> rpush list a		#将一个=值插入到列表尾(右)部。(integer) 4127.0.0.1:6379[1]> rpush list b(integer) 5127.0.0.1:6379[1]> rpush list c(integer) 6127.0.0.1:6379[1]> lrange list 0 -1		#查看列表全部元素1) "3"2) "2"3) "1"4) "a"5) "b"6) "c"127.0.0.1:6379[1]> 
127.0.0.1:6379[1]> lpop list  	#移除并返回列表的第一个元素。当列表 key 不存在时,返回 nil
"3"
127.0.0.1:6379[1]> rpop list	#移除列表的最后一个元素,返回值为移除的元素。
"c"
127.0.0.1:6379[1]> lrange list 0 -1	#查看列表全部元素,会发现第一个元素3和最后一个元素c都删除了
1) "2"
2) "1"
3) "a"
4) "b"
127.0.0.1:6379[1]> lindex list 0	#Lindex,按照索引下标获得元素(-1代表最后一个,0代表是第一个)
"2"
127.0.0.1:6379[1]> lindex list 1
"1"
127.0.0.1:6379[1]> lindex list 5
(nil)	#没有该元素则返回null
127.0.0.1:6379[1]> lindex list -1
"b"127.0.0.1:6379[1]> lrange list 0 -1		#查看列表所有元素1) "2"2) "1"3) "a"4) "b"127.0.0.1:6379[1]> llen list	# 返回列表的长度(integer) 4127.0.0.1:6379[1]> lrem list 1 a	#根据参数 count 的值,移除列表中与参数 value 相等的元素(integer) 1127.0.0.1:6379[1]> lrange list 0 -1		#查看列表所有元素,可以看到元素a被移出了1) "2"2) "1"3) "b"#lset key index value 将列表 key 下标为 index 的元素的值设置为 value
127.0.0.1:6379[1]> lset list 0 22 		#将第一个元素值2改为22
OK
127.0.0.1:6379[1]> lrange list 0 -1 	
1) "22"
2) "1"
3) "b"
127.0.0.1:6379[1]> .....

2.4 哈希 Hash

  • Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。

  • Redis 中每个 hash 可以存储 232 – 1 键值对(40多亿)。

Redis 教程-编程之家

2.5 集合 Set

  • Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

  • Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

  • 集合中最大的成员数为 232 – 1 (4294967295, 每个集合可存储40多亿个成员)。

Redis 教程-编程之家

2.6 有序集合(sorted set)

  • Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

  • 不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

  • 有序集合的成员是唯一的,但分数(score)却可以重复。

  • 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 – 1 (4294967295,每个集合可存储40多亿个成员)。

Redis 教程-编程之家