在接下来的一段时间里面我要将自己学习的redis整理一遍,下面是我整理的一些资料:
Redis是一款依据BSD开源协议发行的高性能Key-Value存储系统(cache and store),所以redis是可以查看源代码https://github.com/MSOpenTech/redis/tree/3.0 。
它是通常被称为数据结构服务器,因为值(value)可以使字符串(string)、哈希(hashes)、列表(list)、集合(sets),和有序集合(sorted sets)类型。
在将redis类型以前我们先在自己的电脑上安装一下redis,打开这个链接选择2.8.2400这个版本,下载msi。msi是安装版本,zip是免安装版本。区别在于msi安装版本安装后可以以服务的形式存在。需要注意的是redis安装包没有32位系统的只有64位的
安装到D盘中,如下
接下来再看看我们的服务有一个redis的服务,而且该服务已经启动。
然后我就使用(redis-cli.exe)客户端连接redis服务。连接redis服务器的命令为redis-cli.exe -h 127.0.0.1 -p 6379 -auth 密码
先开打运行程序输入“cmd”然后如下:
因为默认端口为6379所有可以不用-p 6379 ,同时刚安装默认情况下没有密码,所以不需要密码。
然后我在命令行输入"echo "hello redis" ",如果返回"hello redis" 说明连接成功,这样我们就完成了redis安装,也知道如何连接redis服务。
下面开始简单介绍字符串(string)、哈希(hashes)、列表(list)、集合(sets),和有序集合(sorted sets)类型。
字符串(string)
String类型是最常用的一种数据类型,普通的Key/value存储都可以归为此类。一个Key对应一个Value,String类型是二进制安全的。Redis的String可以包含任何数据,可以存放json数据,图像数据等等。value存储最大数据量为512M。
主要命令有
set key value #将字符串值value关联到key
get key #返回key所关联的字符串值
decr key #将key中储存的数字值减一
incr key #将key中存储的数字值加一
哈希(hashes)
redis hash是一个string类型的field和value的映射表。它的添加,删除操作都是O(1)(平均)。hash特别适合用于存储对象。
在上面服务器配置文件中包含
hash-max-zipmap-entries 64 #配置字段最多64个。
hash-max-zipmap-value 512 #配置value最大为512字节。
主要命令有
hset key field #将哈希表key中的域field的值设为value
hget key field #返回哈希表key中给定域field的值。
以及hdel、hgetall、hkeys、hvals等
列表(list)
redis的list类型其实就是一个每个子元素都是string类型的双向链表。所以[lr]push和[lr]pop命令的算法时间复杂度都是O(1),另外list会记录链表的长度。所以llen操作也是O(1).链表的最大长度是(2的32次方-1)。我们可以通过push,pop操作从链表的头部或者尾部添加删除元素。这使得list既可以用作栈,也可以用作队列。
主要命令有
lset key index value #将列表key下标为index的元素的值设置为value。当然不可以直接使用
要先使用命令 lpush kye value #将一个或多个value插入到列表key的表头
然后我们再lpush几个值
lrange key start stop #返回列表key中指定区间内的元素,区间以偏移量start和stop指定。 lrange listkey 0 -1 表示显示所有数据 lrange listkey 0 0 表示显示第一个元素
以及llen、rpop、lpop等
集合(sets)
redis的set是string类型的无序集合。set元素最大可以包含(2的32次方-1)个元素。set的是通过hash table实现的,所以添加,删除,查找的复杂度都是O(1)。
主要命令有
sadd key member #将一个或多个member元素加入到集合key当中,已经存在于集合的member元素将被忽略。
smembers key #返回集合key中的所有成员。
以及sdiff、sinter、sunion、scard等
有序集合(sorted sets)
和set一样sorted set也是string类型元素的集合,不同的是每个元素都会关联一个double类型的score。sorted set的实现是skip list和hash table的混合体当元素被添加到集合中时,一个元素到score的映射被添加到hash table中,所以给定一个元素获取score的开销是O(1),另一个score到元素的映射被添加到skip list并按照score排序,所以就可以有序的获取集合中的元素。添加,删除操作开销都是O(log(N))和skip list的开销一致,redis的skip list实现用的是双向链表,这样就可以逆序从尾部取元素。
主要命令有
zadd key score member #将一个或多个member元素及其score值加入到有序集key当中。
zrange key start stop [withscores] #返回有序集key中,指定区间内的成员。其中成员的位置按score值递增(从小到大)来排序。还有一个可选分值
以及zcard、zcount、zrank、zrem、zscore等