内存数据库redis-redis简单介绍

来源:互联网 发布:网络加速器免费 编辑:程序博客网 时间:2024/05/21 09:24

一.Redis介绍

1. 简述

Redis是一个高性能的kv对缓存和内存数据库(存的不像mysql那样的表)

Redis的存储结构就是key-value,形式如下:


 

注: redis中的value内部可以支持各种数据结构类型,比如可以存入一个普通的string,还可以存listsethashmapsortedSet(有序的set

2.redis应用场景

A、用来做缓存(ehcache/memcached)——redis的所有数据是放在内存中的(内存数据库)

B、可以在某些特定应用场景下替代传统数据库——比如社交类的应用

C、在一些大型系统中,巧妙地实现一些特定的功能:session共享、购物车

只要你有丰富的想象力,redis可以用在可以给你无限的惊喜…….

3. redis的特性

1/redis数据访问速度快(数据在内存中)

2/redis有数据持久化机制(持久化机制有两种:1、定期将内存数据dump到磁盘;2aof(append only file)持久化机制——用记日志的方式记录每一条数据更新操作,一旦出现灾难事件,可以通过日志重放来恢复整个数据库)

3/redis支持集群模式(容量可以线性扩展)

4/redis相比其他缓存工具(ehcach/memcached),有一个鲜明的优势:支持丰富的数据结构

 

二.Redis的数据功能

1.String类型的数据

1/插入和读取一条string类型的数据

redis notrue-centos:6379> set sessionid-0001 "zhangsan"

OK

redis notrue-centos:6379> get sessionid-0001

"zhangsan"

2/string类型数据进行增减(前提是这条数据的value可以看成数字)

DECR key

INCR key

 

DECRBY key decrement

INCRBY key increment

3/一次性插入或者获取多条数据

MGET  key1  key2

MSET  key1  value1   key2  value2  ..

4/在插入一条string类型数据的同时为它指定一个存活期限

setex  bancao  10  weige

### bancao这条数据就只会存活10秒钟,过期会被redis自动清除

2.List数据结构

1/ List图示


 

2/ List功能演示

#从头部(左边)插入数据

redis>LPUSH  key  value1  value2  value3    

#从尾部(右边)插入数据

redis>RPUSH  key  value1  value2  value3   

#读取list中指定范围的values

redis>LRANGE  key  start   end

redis> lrange  task-queue  0  -1      读取整个list

#从头部弹出一个元素

LPOP  key

#从尾部弹出一个元素

RPOP  key

#从一个list的尾部弹出一个元素插入到另一个list

RPOPLPUSH   key1    key2     ## 这是一个原子性操作

 

3. Hash数据结构

1/ Hash图示

Redis中的Hashes类型可以看成具有String KeyString Valuemap容器


 

2/ Hash功能演示

1、往redis库中插入一条hash类型的数据

redis> HSET  key  field  value

举例:

redis 127.0.0.1:6379> hset user001:zhangsan  iphone 6

(integer) 1

redis 127.0.0.1:6379> hset user001:zhangsan   xiaomi 7

(integer) 1

redis 127.0.0.1:6379> hset user001:zhangsan   meizu 8

(integer) 1

redis库中就形成了这样一条数据:


 

2、从redis库中获取一条hash类型数据的value

取出一条hash类型数据中所有field-value

redis 127.0.0.1:6379> hgetall user001:zhangsan

1) "iphone"

2) "6"

3) "xiaomi"

4) "7"

5) "meizu"

6) "8"

取出hash数据中所有fields

redis 127.0.0.1:6379> HKEYS user001:zhangsan

1) "iphone"

2) "xiaomi"

3) "meizu"

取出hash数据中所有的value

redis 127.0.0.1:6379> hvals user001:zhangsan

1) "6"

2) "7"

3) "8"

取出hash数据中一个指定field的值

redis 127.0.0.1:6379> hget user001:zhangsan xiaomi

"8"

hash数据中指定的一个field的值进行增减

redis 127.0.0.1:6379> HINCRBY user001:zhangsan xiaomi 1

(integer) 8

hash数据中删除一个字段field及其值

redis 127.0.0.1:6379> hgetall user001:zhangsan

1) "iphone"

2) "6"

3) "xiaomi"

4) "7"

5) "meizu"

6) "8"

redis 127.0.0.1:6379> HDEL user001:zhangsan iphone

(integer) 1

redis 127.0.0.1:6379> hgetall user001:zhangsan

1) "xiaomi"

2) "7"

3) "meizu"

4) "8"

4. Set数据结构功能

集合的特点:无序、无重复元素

1/插入一条set数据

redis 127.0.0.1:6379> sadd frieds:zhangsan  bingbing baby fengjie furong ruhua tingting

(integer) 6

redis 127.0.0.1:6379> scard frieds:zhangsan

(integer) 6

redis 127.0.0.1:6379>

 

2/获取一条set数据的所有members

redis 127.0.0.1:6379> smembers frieds:zhangsan

1) "fengjie"

2) "baby"

3) "furong"

4) "bingbing"

5) "tingting"

6) "ruhua"

 

3/判断一个成员是否属于某条指定的set数据

redis 127.0.0.1:6379> sismember frieds:zhangsan liuyifei     #如果不是,则返回0

(integer) 0

redis 127.0.0.1:6379> sismember frieds:zhangsan baby       #如果是,则返回1

(integer) 1

4/求两个set数据的差集

#求差集

redis 127.0.0.1:6379> sdiff  frieds:zhangsan  friends:xiaotao

1) "furong"

2) "fengjie"

3) "ruhua"

4) "feifei"

#求差集,并将结果存入到另一个set

redis 127.0.0.1:6379> sdiffstore zhangsan-xiaotao frieds:zhangsan friends:xiaotao

(integer) 4

#查看差集结果

redis 127.0.0.1:6379> smembers zhangsan-xiaotao

1) "furong"

2) "fengjie"

3) "ruhua"

4) "feifei"

求交集,求并集

#求交集

redis 127.0.0.1:6379> sinterstore zhangsan:xiaotao frieds:zhangsan friends:xiaotao

(integer) 2

redis 127.0.0.1:6379> smembers zhangsan:xiaotao

1) "bingbing"

2) "baby"

 

#求并集

redis 127.0.0.1:6379> sunion  frieds:zhangsan friends:xiaotao

 1) "fengjie"

 2) "tangwei"

 3) "liuyifei"

 4) "bingbing"

 5) "ruhua"

 6) "feifei"

 7) "baby"

 8) "songhuiqiao"

 9) "furong"

10) "yangmi"

 

5. sortedSet(有序集合)数据结构

1/ sortedSet图示

sortedset中存储的成员都有一个附带的分数值

redis就可以根据分数来对成员进行各种排序(正序、倒序)

sortedSet存储内容示意图:


 

2/ SortedSet功能演示

1、往redis库中插入一条sortedset数据

redis 127.0.0.1:6379> zadd nansheng:yanzhi:bang  70 liudehua  90 huangbo  

100 weixiaobao  250 yangwei  59 xiaotao

(integer) 5

 

2.sortedset中查询有序结果

#正序结果

redis 127.0.0.1:6379> zrange nanshen:yanzhi:bang  0  4

1) "xiaotao"

2) "liudehua"

3) "huangbo"

4) "weixiaobao"

5) "yangwei"

#倒序结果

redis 127.0.0.1:6379> zrevrange nanshen:yanzhi:bang 0 4

1) "yangwei"

2) "weixiaobao"

3) "huangbo"

4) "liudehua"

5) "xiaotao"

3.查询某个成员的名次

#在正序榜中的名次

redis 127.0.0.1:6379> zrank nanshen:yanzhi:bang  xiaotao

(integer) 0

 

#在倒序榜中的名次

redis 127.0.0.1:6379> zrevrank nanshen:yanzhi:bang xiaotao

(integer) 4

4修改成员的分数

redis 127.0.0.1:6379> zincrby nanshen:yanzhi:bang  300  xiaotao

"359"

redis 127.0.0.1:6379> zrevrank nanshen:yanzhi:bang xiaotao

(integer) 0