已经有一段时间么有写博客了,换了家公司,最近因为项目须要,开始了解之前没有接触过的NoSql(确切的说是做为缓存使用)之一的Redis数据库,浅显的了解了一下,以为蛮有意思,遂写下笔记开始学习这个之前认为“高大上”的工具。
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中不能出现空格或者换行符。
post
关于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),这个结构适合存储对象。用图表示也许更直观一些:
从图里能够看出,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的基本命令操做暂时就记录这些,前述表中的命令不全,须要的时候能够查看文档获取更详细的信息,因为是初学,整个学习过程当中确定有遗漏,误差并不断修正,往后会对文章进行修改。