2.1 Redis是什么
REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。Redis提供了一些丰富的数据结构,包括 lists, sets, ordered sets 以及 hashes ,当然还有和Memcached一样的 strings结构. Redis当然还包括了对这些数据结构的丰富操作。
Redis常被称作是一款数据结构服务器(data structure server)。Redis的键值可以包括字符串(strings)类型,同时它还包括哈希(hashes)、列表(lists)、集合(sets)和 有序集合(sorted sets)等数据类型。 对于这些数据类型,你可以执行原子操作。例如:对字符串进行附加操作(append);递增哈希中的值;向列表中增加元素;计算集合的交集、并集与差集等。
2.2 Redis的优点
性能极高 – Redis能支持超过 100K+ 每秒的读写频率。
丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
前期准备!!!!!
设置root密码
$ sudo passwd (输入shiyanlou用户密码,并设置root密码)
$ su (输入root密码,进入root权限)
操作截图:
Redis 安装!!!!!!!!!
a. 进入root目录,并下载Redis的安装包
$ cd
$ wget http://labfile.oss.aliyuncs.com/files0422/redis-2.8.9.tar.gz
操作截图:
b. 在目录下,解压安装包,生成新的目录redis-2.8.9
$ tar -xzvf redis-2.8.9.tar.gz
c. 进入解压之后的目录,进行编译
$ cd redis-2.8.9
$ make
说明: 如果没有明显的错误,则表示编译成功
操作截图:
e. 在安装成功之后,可以运行测试,确认Redis的功能是否正常
$ make test
操作截图:
Redis 启动!!!!!
在 Redis 安装完成后,注意一些重要的文件,可用 ls 命令查看。服务端:src/redis-server,客户端:src/redis-cli,默认配置文件:redis.conf
$ ls
$ cd src
$ ls
操作截图:
将可执行文件放置在$PATH环境目录下 以便于以后执行程序时可以不用 输入完整的 路径
启动Redis-server!!
说明: 从以上的截图中,可以发现启动的端口为缺省的6379. 用户可以在启动的时候,指定具体的配置文件,并在其中指定启动的端口。
保持此终端的运行,Ctrl+shift+t 重开一个终端tab。
查看Redis
$ ps -ef | grep redis
操作截图:
# 通过端口号检查Redis服务器状态
$ netstat -nlt|grep 6379
操作截图:
启动 Redis-client
$ su ( 输入root密码,进入root目录)
$ cd
$ redis-cli
操作截图:
至此,redis安装完成。
=======================================================================
下一次 Redis数据类型
1.1 实验内容
Redis不仅仅是简单的key-value 存储器,同时也是一种data structures server。传统的key-value是指支持使用一个key字符串来索引value字符串的存储,而Redis中,value不仅仅支持字符串,还支持更多的复杂结构,包括列表,集合,哈希表等。现在我们一一讲解:Redis keys是采用二进制安全,这就意味着你可以使用任何二进制序列作为重点,从像"foo"可以联系一个 JPEG 文件。空字符串也是一个有效的密钥。
1.2 实验知识点
- Redis strings
- Redis Lists
- Redis Hashes
- Redis有序集合
1.3 实验环境
- Xfce终端
1.4 适合人群
本课程难度属于容易,属于初级级别课程。
Redis strings
字符串是一种最基本的Redis值类型。Redis字符串是二进制安全的,这意味着一个Redis字符串能包含任意类型的数据,例如: 一张JPEG格式的图片或者一个序列化的Ruby对象。一个字符串类型的值最多能存储512M字节的内容。
我们继续上一个实验,启动redis-cli来看看Redis strings数据类型。
$ sudo service redis-server start
$ redis-cli
> set mykey somevalue
> get mykey
操作截图:
如上例所示,可以SET和GET命令来创建和检索strings。
注意,set命令将取代现有的任何已经存在的key。SET命令还有一个提供附加参数的选项,我们能够让SET命令只有在没有相同key的情况下成功,反之亦然,可以让SET命令在有相同key值得情况下成功。
> set mykey newval nx
> set mykey newval xx
操作截图;
即使string是Redis的基本类型,也可以对其进行一些有趣的操作,例如加法器:
> set counter 100
> incr counter
> incr counter
> incrby counter 50
操作截图:
INCR命令让the value 成为一个整数,运行一次INCR便+1。 INCRBY命令便是一个加法运算。类似的命令如减法运算为: DECR and DECRBY。
Redis可以运用MSET and MGET 命令完成一次性的完成多个key-value的对应关系,使用MGET命令,Redis返回一个value数组。
> mset a 10 b 20 c 30
> mget a b c
操作截图:
redis list
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
LPUSH 命令插入一个新的元素到头部, 而 RPUSH插入一个新元素到尾部. 当一个这两个操作在一个空的Key上被执行的时候一个新的列表被创建。相似的,如果一个列表操作清空一个列表那么对应的key将被从key空间删除。这是非常方便的语义,因为他们被调用使用一个空列表完全就像他们被调用时使用一个不存在的键值(可以)做为参数。
PUSH一类的命令的返回值为list的长度。一些类表操作和结果的例子:
> rpush mylist A
> rpush mylist B
> lpush mylist first
> lrange mylist 0 -1
操作截图:
注意:LRANGE 利用了两个检索值,0表示list的开头第一个,-1表示list的倒数第一个,即最后一个。-2则便是list的倒数第二个,以此类推。
这些命令都是可变的命令,也就是说你可以一次加入多个元素放入list。
> rpush mylist 1 2 3 4 5 "foo bar"
> lrange mylist 0 -1
操作截图:
在Redis的命令操作中,还有一类重要的操作:POP,取出list元素。和PUSH操作类似,POP命令可以选择不同的方向取出元素.POP命令返回值为取出的元素。
> del mylist
> rpush mylist a b c
> rpop mylist
> lrange mylist 0 -1
> lpop mylist
> lrange mylist 0 -1
操作截图:
在Redis list中还有很多有用的命令,此处限于篇幅便不在赘述。
Redis hashes
Redis Hashes是字符串字段和字符串值之间的映射,因此他们是展现对象的完美数据类型。 (例如:一个有名,姓,年龄等等属性的用户):一个带有一些字段的hash仅仅需要一块很小的空间存储,因此你可以存储数以百万计的对象在一个小的Redis实例中。 哈希主要用来表现对象,他们有能力存储很多对象,因此你可以将哈希用于许多其他的任务。
> hmset user:1000 username antirez birthyear 1977 verified 1
> hget user:1000 username
> hget user:1000 birthyea
> hgetall user:1000
操作截图:
HMSET命令设置一个多域的hash表,HGET命令获取指定的单域,HGETALL命令获取指定key的所有信息。HMGET类似于HGET,只是返回一个value数组。
> hmget user:1000 username birthyear no-such-field
操作截图:
同样可以根据需要对hash表的表项进行单独的操作,例如 HINCRBY, (原本birthyear 为1977,见上一图)
> hincrby user:1000 birthyear 10
> hincrby user:1000 birthyear 10
操作截图:
Redis 无序集合
Redis 集合(Set)是一个无序的字符串集合. 你可以以O(1)的时间复杂度 (无论集合中有多少元素时间复杂度都是常量)完成添加,删除,以及测试元素是否存在。 Redis 集合拥有令人满意的不允许包含相同成员的属性。多次添加相同的元素,最终在集合里只会有一个元素。 实际上说这些就是意味着在添加元素的时候无须检测元素是否存在。 一个Redis集合的非常有趣的事情是他支持一些服务端的命令从现有的集合出发去进行集合运算,因此你可以在非常短的时间内进行合并(unions), 求交集(intersections),找出不同的元素(differences of sets)。
> sadd myset 1 2 3
> smembers myset
SADD命令产生一个无序集合,返回集合的元素个数。 SMEMBERS用于查看集合。
操作截图:
SISMEMBER用于查看集合是否存在,匹配项 包括集合名和元素个数。匹配成功返回1,匹配失败返回0.
> sismember myset 3
> sismember myset 30
> sismember mys 3
操作截图:
有序集合
Redis有序集合与普通集合非常相似,是一个没有重复元素的字符串集合。
不同之处是有序集合的每一个成员都关联了一个评分,这个评分被用来按照从最低分到最高分的方式排序集合中的成员。 集合的成员是唯一的,但是评分可以是重复了。 使用有序集合你可以以非常快的速度(O(log(N)))添加,删除和更新元素。因为元素是有序的, 所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列表。在有序集合中,你可以很快捷的访问一切你需要的东西:有序的元素,快速的存在性测试,快速访问集合的中间元素! 简而言之使用有序集合你可以做完成许多对性能有极端要求的任务,而那些任务使用其他类型的数据库真的是很难完成的。
ZADD与SADD类似,但是在元素之前多了一个参数,这个参数便是用于排序的。形成一个有序的集合。
> zadd hackers 1940 "Alan Kay"
> zadd hackers 1957 "Sophie Wilson"
> zadd hackers 1953 "Richard Stallman"
> zadd hackers 1949 "Anita Borg"
> zadd hackers 1965 "Yukihiro Matsumoto"
> zadd hackers 1914 "Hedy Lamarr"
> zadd hackers 1916 "Claude Shannon"
> zadd hackers 1969 "Linus Torvalds"
> zadd hackers 1912 "Alan Turing"
查看集合ZRANGE是查看正序的集合,ZREVRANGE是查看反序的集合。0表示集合第一个元素,-1表示集合的倒数第一个元素。
> zrange hackers 0 -1
> zrevrange hackers 0 -1
操作截图:
使用WITHSCORES 参数返回记录值。
> zrange hackers 0 -1 withscores
操截图:
================================redis系统管理 回顾下前面的 启动redis 就可以调试学习了