Redis的基本使用

来源:互联网 发布:军事理论刷课软件 编辑:程序博客网 时间:2024/06/10 09:15

本文目录:

1.NOSQL简介

2.Redis的简介

3.Redis的安装与配置

4.Redis基本操作

5.Redis高级操作(发布订阅,主从配置)





1.NOSQL简介


百度百科:点击打开链接

NoSQL,全名为Not Only SQL,指的是非关系型的数据库
随着访问量的上升,网站的数据库性能出现了问题,于是nosql被设计出来

优点:
高可扩展性
分布式计算
低成本
架构的灵活性,半结构化数据
没有复杂的关系
缺点:
没有标准化
有限的查询功能(到目前为止)
最终一致是不直观的程序

分类

类型部分代表

特点列存储

Hbase

Cassandra

Hypertable

顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。

文档存储

MongoDB

CouchDB

文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有有机会对某些字段建立索引,实现关系数据库的某些功能。

key-value存储

Tokyo Cabinet / Tyrant

Berkeley DB

MemcacheDB

Redis

可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能)

图存储

Neo4J

FlockDB

图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。

对象存储

db4o

Versant

通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。

xml数据库

Berkeley DB XML

BaseX

高效的存储XML数据,并支持XML的内部查询语法,比如XQuery,Xpath。




2.Redis的简介


Redis官网:点击打开链接

Redis百度百科:点击打开链接

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。


它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。


redis是key-value的数据,所以每个数据都是一个键值对
键的类型是字符串
值的类型分为五种:
字符串string
哈希hash
列表list
集合set
有序集合zset

数据操作的全部命令,可以查看中文网站



3.Redis的安装与配置


ubuntu 安装redis

sudo apt-get update(可选)sudo apt-get install redis-server

1.启动Redis:

redis-server
按ctrl+c停止


2.启动客户端:

redis-cli
运行命令:

127.0.0.1:6379> pingPONG
则说明redis安装成功

3.测试添加数据:

set 'a' '123'

当添加键值后,发现在当前运行的目录下,创建了一个文件:dump.rdb,这个文件用于将数据持久化存储


基本配置

在源文件/usr/local/redis目录下,文件redis.conf为配置文件
绑定地址:如果需要远程访问,可将此行注释

bind 127.0.0.1

端口,默认为6379
port 6379
是否以守护进程运行
如果以守护进程运行,则不会在命令行阻塞,类似于服务
如果以非守护进程运行,则当前终端被阻塞,无法使用
推荐改为yes,以守护进程运行
daemonize no|yes

数据文件

dbfilename dump.rdb

数据文件存储路径
dir的默认值为./,表示当前目录
推荐改为:dir /var/lib/redis


使用配置文件方式启动

直接运行redis-server会直接运行,阻塞当前终端
一般配置文件都放在/etc/目录下

sudo cp /usr/local/redis/redis.conf /etc/redis/

推荐指定配置文件启动

sudo redis-server /etc/redis/redis.conf

停止redis服务

ps ajx|grep redis

sudo kill -9 redis的进程id

4.Redis基本操作


string

string是redis最基本的类型

最大能存储512MB数据
string类型是二进制安全的,即可以为任何数据,比如数字、图片、序列化对象等

设置

设置键值

set key value
设置键值及过期时间,以秒为单位

SETEX key seconds value
设置多个键值

MSET key value [key value ...]

获取
根据键获取值,如果不存在此键则返回nil

GET key
根据多个键获取多个值

MGET key [key ...]


运算
要求:值是数字
将key对应的value加1

INCR key
将key对应的value加整数

INCRBY key increment
将key对应的value减1

DECR key
将key对应的value减整数

DECRBY key decrement


其它
追加值

APPEND key value
获取值长度

STRLEN key

键的命令
查找键,参数支持正则

KEYS pattern
判断键是否存在,如果存在返回1,不存在返回0

EXISTS key [key ...]
查看键对应的value的类型

TYPE key

删除键及对应的值

DEL key [key ...]
设置过期时间,以秒为单位
创建时没有设置过期时间则一直存在,直到使用使用DEL移除
EXPIRE key seconds

查看有效时间,以秒为单位

TTL key



hash
hash用于存储对象,对象的格式为键值对

命令

设置
设置单个属性

HSET key field value

设置多个属性

HMSET key field value [field value ...]


获取获取一个属性的值

HGET key field

获取多个属性的值

HMGET key field [field ...]

获取所有属性和值

HGETALL key
获取所有的属性

HKEYS key

返回包含属性的个数

HLEN key

获取所有值

HVALS key


其它

判断属性是否存在

HEXISTS key field
删除属性及值

HDEL key field [field ...]

返回值的字符串长度

HSTRLEN key field


list
列表的元素类型为string
按照插入顺序排序
在列表的头部或者尾部添加元素
命令

设置
在头部插入数据

LPUSH key value [value ...]

在尾部插入数据

RPUSH key value [value ...]
在一个元素的前|后插入新元素

LINSERT key BEFORE|AFTER pivot value
设置指定索引的元素值

索引是基于0的下标
索引可以是负数,表示偏移量是从list尾部开始计数,如-1表示列表的最后一个元素

LSET key index value


获取
移除并且返回 key 对应的 list 的第一个元素

LPOP key
移除并返回存于 key 的 list 的最后一个元素

RPOP key

返回存储在 key 的列表里指定范围内的元素

start 和 end 偏移量都是基于0的下标
偏移量也可以是负数,表示偏移量是从list尾部开始计数,如-1表示列表的最后一个元素
LRANGE key start stop

其它

裁剪列表,改为原集合的一个子集
start 和 end 偏移量都是基于0的下标
偏移量也可以是负数,表示偏移量是从list尾部开始计数,如-1表示列表的最后一个元素

LTRIM key start stop
返回存储在 key 里的list的长度
LLEN key
返回列表里索引对应的元素

LINDEX key index

set
无序集合
元素为string类型
元素具有唯一性,不重复
命令

设置
添加元素

SADD key member [member ...]


获取

返回key集合所有的元素

SMEMBERS key
返回集合元素个数

SCARD key


其它

求多个集合的交集

SINTER key [key ...]

求某集合与其它集合的差集

SDIFF key [key ...]

求多个集合的合集

SUNION key [key ...]

判断元素是否在集合中

SISMEMBER key member


zset

sorted set,有序集合

元素为string类型
元素具有唯一性,不重复
每个元素都会关联一个double类型的score,表示权重,通过权重将元素从小到大排序
元素的score可以相同
命令
设置

添加

ZADD key score member [score member ...]

获取
返回指定范围内的元素

ZRANGE key start stop

返回元素个数

ZCARD key

返回有序集key中,score值在min和max之间的成员

ZCOUNT key min max

返回有序集key中,成员member的score值

ZSCORE key member

5.Redis高级操作(发布订阅,主从配置)


发布订阅
发布者不是计划发送消息给特定的接收者(订阅者),而是发布的消息分到不同的频道,不需要知道什么样的订阅者订阅
订阅者对一个或多个频道感兴趣,只需接收感兴趣的消息,不需要知道什么样的发布者发布的
发布者和订阅者的解耦合可以带来更大的扩展性和更加动态的网络拓扑
客户端发到频道的消息,将会被推送到所有订阅此频道的客户端
客户端不需要主动去获取消息,只需要订阅频道,这个频道的内容就会被推送过来
消息的格式


推送消息的格式包含三部分
part1:消息类型,包含三种类型
subscribe,表示订阅成功
unsubscribe,表示取消订阅成功
message,表示其它终端发布消息
如果第一部分的值为subscribe,则第二部分是频道,第三部分是现在订阅的频道的数量
如果第一部分的值为unsubscribe,则第二部分是频道,第三部分是现在订阅的频道的数量,如果为0则表示当前没有订阅任何频道,当在Pub/Sub以外状态,客户端可以发出任何redis命令
如果第一部分的值为message,则第二部分是来源频道的名称,第三部分是消息的内容
命令
订阅

SUBSCRIBE 频道名称 [频道名称 ...]


取消订阅

如果不写参数,表示取消所有订阅

UNSUBSCRIBE 频道名称 [频道名称 ...]


发布

PUBLISH 频道 消息



主从配置
一个master可以拥有多个slave,一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构
比如,将ip为192.168.1.10的机器作为主服务器,将ip为192.168.1.11的机器作为从服务器
设置主服务器的配置

bind 192.168.1.10


设置从服务器的配置
注意:在slaveof后面写主机ip,再写端口,而且端口必须写

bind 192.168.1.11slaveof 192.168.1.10 6379


在master和slave分别执行info命令,查看输出信息
在master上写数据

set hello world
在slave上读数据

get hello