Redis学习笔记1

    已经有一段时间么有写博客了,换了家公司,最近由于项目需要,开始了解以前没有接触过的NoSql(确切的说是作为缓存使用)之一的Redis数据库,浅显的了解了一下,觉得蛮有意思,遂写下笔记开始学习这个以前认为“高大上”的工具。


一.Redis简介

    Redis是一个开源的,使用C语言编写的,基于内存的Key-Value型数据库,由于是基于内存操作,因此其性能非常出色,每秒钟可以处理10W次以上的读写操作。

    根据官方网站,Redis有许多优点,包括丰富的数据类型(个人认为这里应该用数据结构更合适)、数据持久化(与memcache不同)、支持主从复制。

    Redis的安装和配置在本次记录中就不写了,对于Redis的初步学习,主要是通过熟悉基本操作命令来知道Redis可以干什么,这里推荐Redis官方网站上的互动学习窗口,用它来学习Redis的基本命令真的很方便,不需要自己再安装Redis了,让初学者把注意力集中在使用上,而不至于因为安装过程的繁琐导致挫败感。


二.Redis对于key的操作

    既然是一个K-V型的数据库,那么少不了key和value的概念,key可以看做是需要存储数据的一个标识,是一个字符串(唯一),它用来指向/映射所存储的值(value),而Redis的值(value),也是字符串,但是Redis本身提供了多种数据结构来存储值(有的书上说是数据类型),这就使得Redis相比memcache而言,有着更为强大的存储能力,字符串的key多对应的值不仅仅可以是单一的string类型了,还可以是集合(set),队列(list),哈希表(hash)等结构。

    Redis的key使用字符串存储,但是key中不能出现空格或者换行符。

    关于key的基本操作命令,如下所示,只给出基本的几个,其他的可以参考手册。

    

命令 描述
exists   key
测试制定的key是否存在
del    key1  key2........keyn 删除给定的key
type  key 返回指定的key的数据结构类型(list,set....)
expire key seconds 设定指定的key的过期时间(seconds)
rename oldkey   newkey 重命名oldkey为newkey


三.Redis支持的value数据结构

    Redis支持多种数据存储结构,每种结构都有其各自的特点和针对性的操作。


    1.String类型

    String类型是二进制安全的。也就是一个key对应一个String类型的字符串,其所支持的命令如表所示:

命令 描述
set  key value 设置某个key所对应的string值
get  key 获取key对应的string值
mset   key1  value1    key2  value2 ...... 设置多个key及其对应的string值
mget  key1  key2  ......... 获取多个key的string值


     2.List类型

    List类型表示key对应的value是一个双向链表结构,所以如果学过数据结构的链表,就容易理解List的相关操作。

    以下命令中,key表示其对应的数据结构

命令 描述
lpush    key   string  向key对应的列表的头部添加一个元素
rpush   key   string 向key对应的列表的尾部添加一个元素
llen      key   返回key对应的列表的长度
lrange  key  start end  返回指定区域(start~end,0开始)的元素
lset      key  index   value 设置key对应的列表中指定下标(index)的值
lpop     key 从key对应的列表的头部删除并返回删除的元素
rpop    key 从key对应的列表的尾部删除并返回删除的元素

    

    3.Set类型

    这里的Set其实和数学概念上的Set(集合)是类似的,都有集合的特性,即无序性、互异性(即一个集合中不能有重复的元素)。

    Set类型的优点是快速查找元素是否存在,可以用来记录一些不能重复的数据。

    

命令 描述
sadd   key    member 向给定集合key中添加元素member
srem     key      member 将元素member从给定集合key中删除
scard    key 返回集合key中元素的个数
sismember  key member 判断元素member是否在给定集合key中
sinter  key1   key2 ...... 返回给定集合的交集
sunion key1   key2 ...... 返回给定集合的并集
sdiff    key1  key2 ....... 返回所有给定集合的差集
smembers  key 返回给定集合key中所有的元素


    4.Sorted Set类型

   SortedSet类型顾名思义,就是有序集合类型,和集合类型所不同的是,SortedSet中每个元素有一个score作为权值,使得Sorted Set以此为依据进行排序。下表中只列出SortedSet特色命令   

命令 描述
zadd  key score   member 将给定元素member加入到集合key中,权值为score
zincrby key incr member 将给定集合key中的元素member的score增加incr,并重新排序。
zrangebyscore key min  max 返回集合key中给定score区间(min  max)的元素
zscore   key element 返回给定元素对应的score



5.Hash类型

    Hash类型比较特别,每一个key对应一个HashTable,增删改查的时间复杂度都是O(1),这个结构适合存储对象。用图表示也许更直观一些:

    

Redis学习笔记1


    从图里可以看出,Hash的存储是一个key对应一个HashTable,而在HashTable中,又包括字段和值得映射,很像面向对象编程中对象的引用指向对象,而对象本身包括字段和值一样。所以说HashTable适合存储对象。

    基本命令如表所示:

    

命令 描述
hset   key  field  value 设置Hash表key中field字段的值
hget  key  field 获取Hash表key中field字段的值
hmget  key  field1   field2 ....... 获取多个字段
hmset   key  field1  value1    field2   value2  .... 设置多个字段
hgetall   key
返回Hash表key中所有字段及其值

    关于Redis的基本命令操作暂时就记录这些,前述表中的命令不全,需要的时候可以查看文档获取更详细的信息,由于是初学,整个学习过程中肯定有遗漏,偏差并不断修正,日后会对文章进行修改。









你可能感兴趣的:(redis,PHP,NoSQL)