您的位置:首页 > 数据库 > Redis

Redis学习笔记

2016-02-22 20:00 519 查看

1 redis下载

http://redis.io/



下载好后用tar命令解压,这里不详细说明了。我是解压在/usr/local/redis里面。

2 安装,编译redis

进入redis文件夹内,输入make,如下图:



再输入make install,操作结果如下图:



再进行测试:

输入make test,结果如下为正确,我在编译中前几次都失败,在进入src目录里又make test了3遍才成功,也不知道为什么。如果有error,建议多试几次。



3 Redis启动

3.1 查看重要文件

在 Redis 安装完成后,注意一些重要的文件,可用ls 命令查看。服务端:src/redis-server,客户端:src/redis-cls,默认配置文件:redis.conf

3.2启动redis服务器



从以上的截图中,可以发现启动的端口为缺省的6379. 用户可以在启动的时候,指定具体的配置文件,并在其中指定启动的端口。

保持此终端的运行,Ctrl+shift+t 重开一个终端tab。

3.3查看redis



3.4启动redis客户端



至此,redis安装启动完成。

4 redis数据类型

Redis不仅仅是简单的key-value 存储器,同时也是一种data structures server。传统的key-value是指支持使用一个key字符串来索引value字符串的存储,而Redis中,value不仅仅支持字符串,还支持更多的复杂结构,包括列表,集合,哈希表等。

4.1 Redis strings



如图中所示,set和get命令可以用来创建和检索strings。SET命令还有一个提供附加参数的选项,参数nx,我们能够让SET命令只有在没有相同key的情况下成功,参数xx,可以让SET命令在有相同key值得情况下成功。



如图上所示,加了参数nx,当key值前面已经有值somevale了,所以不能成功。加了参数xx,key虽然已经有值了,但是还是可以重新赋值。默认不加参数的情况下,相当于xx参数。

还可以对string进行一定的操作。如加法器:



如上incr是加一操作,incrby是可以传入参数。注意,虽然是看起来像数字在加,实际这里的100,20等都是string。类似的命令如减法运算为: DECR and DECRBY。

Redis可以运用MSET and MGET 命令完成一次性的完成多个key-value的对应关系,使用MGET命令,Redis返回一个value数组。



4.2 redis lists

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边) LPUSH 命令插入一个新的元素导头部, 而 RPUSH插入一个新元素导尾部.当一个这两个操作在一个空的Key上被执行的时候一个新的列表被创建。相似的,如果一个列表操作清空一个列表那么对应的key将被从key空间删除。

PUSH一类的命令的返回值为list的长度。一些类表操作和结果的例子:



LRANGE 利用了两个检索值,0表示list的开头第一个,-1表示list的倒数第一个,即最后一个。-2则便是list的倒数第二个,以此类推。

还可以一次将多个元素放到list中





在Redis的命令操作中,还有一类重要的操作:POP,取出list元素。和PUSH操作类似,POP命令可以选择不同的方向取出元素.POP命令返回值为取出的元素。





4.3 redis hashes

Redis Hashes是字符串字段和字符串值之间的映射,因此他们是展现对象的完美数据类型。 (例如:一个有名,姓,年龄等等属性的用户):一个带有一些字段的hash仅仅需要一块很小的空间存储,因此你可以存储数以百万计的对象在一个小的Redis实例中。 哈希主要用来表现对象,他们有能力存储很多对象,因此你可以将哈希用于许多其他的任务。



HMSET命令设置一个多域的hash表,HGET命令获取指定的单域,HGETALL命令获取指定key的所有信息。HMGET类似于HGET,只是返回一个value数组。



也可以对一个参数进行搜索。

4.4 redis无序集合

Redis 集合拥有令人满意的不允许包含相同成员的属性。多次添加相同的元素,最终在集合里只会有一个元素。 实际上说这些就是意味着在添加元素的时候无须检测元素是否存在。 一个Redis集合的非常有趣的事情是他支持一些服务端的命令从现有的集合出发去进行集合运算,因此你可以在非常短的时间内进行合并(unions), 求交集(intersections),找出不同的元素(differences of sets)

SADD命令产生一个无序集合,返回集合的元素个数。SMEMBER用于查看集合。



SISMEMBER用于查看集合是否存在,匹配项包括集合名和元素个数。匹配成功返回1,匹配失败返回0.



4.5 redis有序集合

Redis有序集合与普通集合非常相似,是一个没有重复元素的字符串集合。不同处是有序集合的没有成员都关联了一个评分,这个评分被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了。

ZADD与SADD类似,但是在元素之前多了一个参数,这个参数便是用于排序的。形成一个有序的集合。

查看集合ZRANGE是查看正序的集合,ZREVRANGE是查看反序的集合。0表示集合第一个元素,-1表示集合的倒数第一个元素。



使用WITHSCORES 参数返回记录值。



5 redis系统管理

5.1 适合全体类型的常用命令

(1)EXISTS and DEL

EXISTS key 判断一个key是否存在;存在返回 1;否则返回0; DEL key 删除某个key,或是一系列key;DEL key1 key2 key3 key4。成功返回1,失败返回0(key值不存在)。



(2)TYPE and KEYS

TYPE key:返回某个key元素的数据类型 ( none:不存在,string:字符,list,set,zset,hash),key不存在返回空。 KEYS key—pattern :返回匹配的key列表 (KEYS foo*:查找foo开头的keys)



(3)RANDOMKEY and CLEAR

RANDOMKEY : 随机获得一个已经存在的key,如果当前数据库为空,则返回空字符串



(4)RENAME and RENAMENX

RENAME oldname newname:改key的名字,新键如果存在将被覆盖 RENAMENX oldname newname:更改key的名字,如果名字存在则更改失败

笔者randomkey结果为mylist,将此key值更名为newlist。



(5) DBSIZE

DBSIZE :返回当前数据库的key的总数



5.2 Redis 时间相关命令

(1)限定key生存时间

这同样是一个无视数据类型的命令,对于临时存储很有用处。避免进行大量的DEL操作。

EXPIRE:设置某个key的过期时间(秒),(EXPIRE bruce 1000:设置bruce这个key1000秒后系统自动删除)注意:如果在还没有过期的时候,对值进行了改变,那么那个值会被清除。



(2)查询key剩余生存时间

限时操作可以再SET命令中实现,并且可用TTL命令查询key剩余生存时间。 TTL:查找某个key还有多长时间过期,返回时间秒



(3)清除key

FLUSHDB:清空当前数据库中的所有键

FLUSHALL:清空所有数据库中的所有键



5.3 Redis设置相关命令

Redis有其配置文件,可以通过client-command窗口查看或者更改相关配置。相关命令介绍如下:

(1)CONFIG GET and CONFIG SET

CONFIG GET:用来读取运行Redis服务器的配置参数。 CONFIG SET:用于更改运行Redis服务器的配置参数。 AUTH : 认证密码 下面针对Redis密码的示例:





由结果可知,刚开始时Reids并未设置密码,密码查询结果为空。然后设置密码为123456,再次查询报错。经过auth命令认证后,可正常查询。

可以经过修改Redis的配置文件redis.conf修改密码。

(2)重置报告

CONFIG RESETSTAT:重置数据统计报告,通常返回值为’OK”。



5.4 查询信息

INFO [section] :查询Redis相关信息。 INFO命令可以查询Redis几乎所有的信息,其命令选项有如下:

server: Redis server的常规信息

clients: Client的连接选项

memory: 存储占用相关信息

persistence: RDB and AOF 相关信息

stats: 常规统计

replication: Master/slave请求信息

cpu: CPU 占用信息统计

cluster: Redis 集群信息

keyspace: 数据库信息统计

all: 返回所有信息

default: 返回常规设置信息

若命令参数为空,info命令返回所有信息。



6 Redis的高级应用

6.1 事务处理

Redis的事务处理比较简单。只能保证client发起的事务中的命令可以连续的执行,而且不会插入其他的client命令,当一个client在连接中发出multi命令时,这个连接就进入一个事务的上下文,该连接后续的命令不会执行,而是存放到一个队列中,当执行exec命令时,redis会顺序的执行队列中的所有命令。如果其中执行出现错误,执行正确的不会回滚,不同于关系型数据库的事务。





6.2 其他

高级应用还有主从复制持久化处理虚拟内存等的使用,这里由于篇幅不多介绍。(也是博主还没学到内容,先知道他们的存在,用到时再去学了)

参考内容:

http://redis.io/topics/data-types-intro /article/4789549.html

http://www.linuxidc.com/Linux/2014-05/101544p2.htm

http://m.blog.csdn.net/blog/fengshizty/42936073#

XianMing
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: