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

入门redis必知的基础知识

2016-08-15 12:44 381 查看
网上有很多的教程,但是大多数都零零散散入门redis的同学看起来很困难,所以这里总结了一些基础知识。

 

1.redis是什么?

  Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

对的redis就是一个存键值对的数据库,它不仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。【我习惯于存简单的key-value(value都是写成需要数据结构的对象)】。

 

2.redis使用场景

  1.取最新N个数据的操作

  2.排行榜应用,取TOP N 操作

  3.需要精确设定过期时间的应用

  4.计数器应用

  由于INCR等指令本身就具有原子操作的特性,所以我们完全可以利用redis的INCR、INCRBY、DECR、DECRBY等指令来实现原子计数的
效果,假如,在某种场景下有3个

客户端同时读取了mynum的值(值为2),然后对其同时进行了加1的操作,那么,最后mynum的值一定是5。不少网站
都利用redis的这个特性来实现业务上的统计计数需求。

  5.Uniq操作,获取某段时间所有数据排重值

  6.实时系统,反垃圾系统

  7.Pub/Sub构建实时消息系统

  8.构建队列系统

  9.缓存

最多的是用做缓存。他的操作所读是mysql的10倍不止。SET操作每秒钟 110000 次,GET操作每秒钟 81000 次。

 

3.redis数据结构

上边已经说了redis是一种高级的key:value存储系统,其中value支持五种数据类型:

1.字符串(strings)

2.字符串列表(lists)

3.字符串集合(sets)

4.有序字符串集合(sorted sets)

5.哈希(hashes)

3.1.key

1.key不要太长,尽量不要超过1024字节,这不仅消耗内存,而且会降低查找的效率;

2.key也不要太短,太短的话,key的可读性会降低;

3.在一个项目中,key最好使用统一的命名模式,例如power_loginname

3.2.字符串(strings)

strings类型是一个很基础的数据类型,也是任何存储系统都必备的数据类型.

操作如下:

set myredis 'kmonkeywyl'get myredis

注:在遇到非字符串类型比如int,redis会默认转为string.

3.3.字符串列表(lists)

  redis中的lists在底层实现上并不是数组,而是链表.所以插入数据快,但定位性能操作较差。

lists的常用操作包括lpush、rpush、lpush,lrange等

操作如下:

 

//新建一个list叫做mylist,并在列表头部插入元素"1"

lpush mylist "1"

//在mylist右侧插入元素"2"

rpush mylist "2"

//在mylist左侧插入元素"0"

lpush mylist "0"

//列出mylist中从编号0到编号1的元素

lrange mylist 0 1

//列出mylist中从编号0到倒数第一个元素

lrange mylist 0 -1

 

  注:上边应用场景1,2,8都用到lists就会很方便,具体应用场景(消息队列,分页,博客评论)

3.3.字符串集合(sets)

集合对于我们来说应该不陌生,就是我们初中学的那个集合,针对于集合有几个概念不知道你还熟悉不?取交集、取并集、取差,不熟悉的自己去熟悉去吧。

操作如下:

 

//向集合myset中加入新元素"wyl"

sadd myset "wyl"

(integer) 1

sadd myset "kmonkey"

(integer) 1

//列出集合myset中的所有元素

smembers myset

1) "wyl"

2) "kmonkey"

//判断元素1是否在集合myset中,返回1表示存在

sismember myset "wyl"

(integer) 1

//判断元素是否在集合myset中,返回0表示不存在

sismember myset "wangyanling"

(integer) 0

//新建一个新的集合yourset

sadd yourset "1"

(integer) 1

sadd yourset "2"

(integer) 1

smembers yourset

1) "1"

2) "2"

//对两个集合求并集

sunion myset yourset

1) "1"

2) "wyl"

3) "2"

4) "kmonkey"

3.4.有序字符串集合(sorted sets)

和上边的无须集合唯一的差别是有序的每个元素都有一个序号score,主要是便于排序

操作如下:

 

zadd myzset 1 baidu.com

(integer) 1

//向myzset中新增一个元素360.com,赋予它的序号是3

zadd myzset 3 360.com

(integer) 1

//向myzset中新增一个元素google.com,赋予它的序号是2

 zadd myzset 2 google.com

(integer) 1

//列出myzset的所有元素,同时列出其序号,可以看出myzset已经是有序的了。

zrange myzset 0 -1 with scores

1) "baidu.com"

2) "1"

3) "google.com"

4) "2"

5) "360.com"

6) "3"

//只列出myzset的元素

 zrange myzset 0 -1

1) "baidu.com"

2) "google.com"

3) "360.com"

3.5.哈希(hashes)

这就和结构数据库类似了。我是不喜欢在redis中使用hashes的。

操作如下

 

//建立哈希,并赋值

HMSET user:001 username wylpassword 111 age 34

OK

//列出哈希的内容

127.0.0.1:6379> HGETALL user:001

1) "username"

2) "wyl"

3) "password"

4) "111"

5) "age"

6) "34"

//更改哈希中的某一个值

HSET user:001 password 12345

(integer) 0

//再次列出哈希的内容

127.0.0.1:6379> HGETALL user:001

1) "username"

2) "wyl"

3) "password"

4) "12345"

5) "age"

6) "34"

 

 

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