redis

来源:互联网 发布:用vb设计计算机程序 编辑:程序博客网 时间:2024/05/19 16:07

Redis

进入redis命令:redis -cli -h localhost

一、什么是redis

Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如下:

1、字符串类型

2、散列类型

3、列表类型

4、集合类型

5、有序集合类型。

 

二、redis应用场景

 

缓存

分布式集群架构中的session分离

聊天室的在线好友列表

任务队列。(秒杀、抢购、12306等等)

应用排行榜

网站访问统计

数据过期处理(可以精确到毫秒)

 

三、redismemcache的优缺点

1 Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

2 Redis不仅仅支持简单的string类型的数据,同时还提供listsethash等数据结构的存储。

3 Redis支持数据的备份,即master-slave模式的数据备份。

4、内存超出时redis将不常用缓存swap到 磁盘。

5redis支持集群,添加节点删除节点不丢数据

6redis是单线程

 

四、服务器端常用命令

命令

描述

例子

ping

检查链接是否存活 

ping,返回pong,则存活

echo

在命令行打印内容

echo  context

info

获取服务器上的信息和统计

info

quit

退出客户端

quit

select

选择数据库

select   dbno

dbsize

返回当前数据库中key的数目

dbsize

flushdb

删除当前数据库中的所有key

flushdb

flushall

删除所有数据库中的所有key

flushall

 

 

 

.redis的数据类型

一、string类型

 

命令

描述

例子

set

赋值

set key value

get

获取值

get key

append

追加字符串

append key value

incr

自增(+1

incr key

decr

自减(-1

decr key

incrby

自增,增加指定步长

incrby key increment

decrby

自减,减少指定步长

decrby key decrement

getset

先获取元素再赋值

getset key value

setex

赋值并指定key的存活时间

setex key second value

 

命令

描述

例子

setnx

key不存在就赋值,否则不做操作

setnx key value

strlen

返回key的值的长度

strlen key

setrange

字符串替换(包含start)

setrange key start value

getrange

获取指定位置字符串

getrange key start end

mset

同时设置多个key value

mset key value [key2 value2...]

mget

同时获取多个key的值

mget key [key2...]

msetnx

key不存在同时设置多个key value,否则不设置

msetnx key value [key2 value2]

setbit

设置二进制的值

setbit key offset value

getbit

获取二进制的值

getbit key offset

 

 

二、hash类型

命令

描述

例子

hset

key中的filed字段赋值

hset key field value

hget 

获取可以中filed字段的值

hget key field

hexists

判断key中是否存在filed

hexists key field

hlen

获取keyfiled的数量

hlen key 

hdel

删除key中的filed字段

hdel key field [field2..]

hgetall

获取key中所有的fieldvalue

hgetall key

hmset

同时设置多个fieldvalue

hmset key field value [field2 value2..]

hmget

同时获取多个field的值

hmget key field [field2..]

hsetnx

如果field不存在赋值,否则不操作

hsetnx key field value

hincrby

field的值增加指定的步长

hincrby key  field increment

hkeys

获取所有的key

hkeys key

hvals

获取所有的value

hvals key

三、list类型

命令

描述

例子

lpush

list头部添加值

lpush key value [value2..]

rpush

list尾部添加值

rpush key value [value2..]

lrange

获取指定位置的数据

lrange key start end

lpop

从头部弹出key的值(删除)

lpop key

rpop

从尾部弹出key的值(删除)

rpop key

rpoplpush

从一个list的尾部弹出插入到另一个list的头部

rpoplpush source destnation

llen

返回key的长度

llen key

lrem

删除前面几个值为value的元素

lrem key count value

lset

按下标赋值

lset key index value

lindex

返回下标的值

lindex key index

ltrim

截取list 指定位置的值

ltrim key start end

linsert

在某个元素的前面或后面插入值

linsert key before|after pivot value

lpushx

key存在头部添加,否则不做操作

lpushx key value

rpushx

key存在在尾部添加,否则不做操作

rpushx key value

四、set类型

命令

描述

例子

sadd

添加值

sadd key member [member2]

smembers

遍历集合

smembers key

scard

获取key的成员数量

scard key

srem

删除指定成员

srem key member [member2..]

sismember

判断成员是否存在

sismember key member

spop

随机弹出一个值(删除)

spop key

命令

描述

例子

srandmember

随机弹出一个成员(不删除)

srandmember key

smove

移动一个集合的成员到另一个集合

smove source destination member

sdiff

求集合的差集

sdiff key [key2..]

sdiffstore

求集合的差集并存到新集合中

sdiffstore destination key [key2..]

sinter

求集合交集

sinter key [key2..]

sinterstore

求集合交集并存到新集合中

sinterstore destination key [key2..]

sunion

求集合并集

suion key [key2..]

sunionstore

求集合并集并存到新集合中

suionstore destination key [key2..]

五、sorted set类型

1、在集合类型的基础上有序集合类型为集合中的每个元素都关联一个分数,这使得我们不仅可以完成插入、删除和判断元素是否存在在集合中,还能够获得分数最高或最低的前N个元素、获取指定分数范围内的元素等与分数有关的操作。

2有序集合和list类型二者有着很大区别:

1)列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多后, 访问中间数据的速度会变慢。

2)有序集合类型使用散列表实现,所有即使读取位于中间部分的数据也很快。

3)列表中不能简单的调整某个元素的位置,但是有序集合可以

4)有序集合要比列表类型更耗内存。

命令

描述

例子

zadd

添加成员

zadd key score member [score member..]

zcard

获取成员数量

zcard key

zcount

获取指定分数之间的成员数量

zcount key min max

zincrby

给成员增加指定分数

zincrby key increment member

zrange

遍历指定下标之间的成员[及分数](分数从小到大排列)

zrange key start end [withscores]

zrangebyscore

遍历指定分数之间的成员(及分数)

zrangebyscore key min max [withscores]

zrank

返回成员的下标(分数从小到大排列)

zrank key member

zrem

删除指定成员

zrem key member [member2..]

zrevrange

遍历指定成员[及分数](分数从大到小排列)

zrevrange key start end [withscores]

六、key命令

命令

描述

例子

keys

获取所有的key

keys  pattern

del

删除指定key

del key [key2..]

exists

判断key是否存在

exists key

move

移动一个key到另一个库中

move key db

rename

key重新命名

rename key newkey

renamenx

key重新命名,当newkey存在是不操作

renamenx key newkey

persist

key持久化

persist key

命令

描述

例子

expire

设置key的存活时间

expire key sexonds

expireat

设置key的存活时间(年月日}时间戳

expireat key timestamp

ttl

实时查看key的剩余存活时间

ttl key

pttl

查看key的剩余存活时间(毫秒)

pttl key

randomkey

随机返回一个key

randomkey

type

返回key中的value的类型

type key

select

 

 

 

 

.redis的持久化

Redis的高性能是由于其将所有数据都存储在了内存中,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化。

Redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式。可以单独使用其中一种或将二者结合使用。

RDB

RDB方式的持久化是通过快照(snapshotting)完成的,当符合一定条件时Redis会自动将内存中的数据进行快照并持久化到硬盘。

RDBRedis默认采用的持久化方式,在redis.conf配置文件中默认有此下配置:

save 900 1

save 300 10

save 60 10000

 

AOF

以日志形式记录服务器每一个操作,在Redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的。

默认情况下Redis没有开启AOFappend only file)方式的持久化,可以通过appendonly参数开启:

appendonly yes

七、RDB持久化方式优劣势:

优势:

1RDB 是一个非常紧凑(compact)的文件,它保存了Redis在某个时间点上的数据集。这种文件非常适合用于进行备份:可以自己设置保存频率。

2RDB 非常适用于灾难恢复(disaster recovery):它只有一个文件,并且内容都非常紧凑,可以(在加

密后)将它传送到别的数据中心,或者亚马逊S3 中。

3RDB 可以最大化Redis 的性能:父进程在保存RDB文件时唯一要做的就是fork出一个子进程,然

后这个子进程就会处理接下来的所有保存工作,父进程无须执行任何磁盘I/O 操作。

4RDB 在恢复大数据集时的速度比AOF的恢复速度要快。

劣势:rdb是以每隔一段时间进行一次快照进行的数据持久,如果一旦在这一时间段出现服务器故障,将会灾难性的。

 

八.AOF持久化方式优劣势

优势:

1、使用AOF 持久化会让Redis 变得非常耐久(much more durable):你可以设置不同的fsync策略,比如无fsync,每秒钟一次fsync,或者每次执行写入命令时fsync

2Redis 可以在AOF 文件体积变得过大时,自动地在后台对AOF进行重写

3AOF 文件有序地保存了对数据库执行的所有写入操作,这些写入操作以Redis协议的格式保存,因此AOF文件的内容非常容易被人读懂,对文件进行分析(parse)也很轻松。

劣势:

1、对于相同数量的数据集而言,AOF文件通常要大于RDB文件

2、根据所使用的fsync策略,AOF的速度可能会慢于RDB

.发布与订阅

发布订阅是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息

SUBSCPIBE:订阅给定一个或多个频道信息(接受)

PUBLISH: 将信息发送到指定的频道(发送)

PUBSUB: 查看订阅与发布系统状态

PUNSUBCRIBE:退订所有给定模式的频道

UNSUBSCRIBE:指退订给定的频道

PSUBSCRIBE: 订阅一个或多个符合给定模式的频道

十.备份与恢复

Config get sace   获取save的值

Config set save  10 4 设置save

Bgsave 后台备份

十一.安全

默认 requirepass参数是空的

Config set requirepass 密码      设置密码

Config get  requirepass         查看密码

AUTH  password              设置密码后连接

 

十二.性能测试

-h  指定服务主机名

-p  指定服务端口

语法  redis-benchmark  [option]  [option value]

 

十三.分区

比如多台redis同时用于缓存数据时  怎么确定set的键值对 写哪一台服务器

Hash 取余法

Pushd:改到指定目录

运行jarJava -Djava.ext.dirs=.\lib -jar testjar

十四.有序集合和list类型

有序集合类型在某些方面和列表类型有些相似。
1)二者都是有序的。
2)二者都可以获得某一范围的元素。
但是二者有着很大的区别,这使得它们的应用场景也是不同的。
1)列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问中间数据的速度会较慢,所以它更加适合实现如“新鲜事”或“日志”这样很少访问中间元素的应用。
2)有序集合类型是使用散列表和跳跃表(Skip list)实现的,所以即使读取位于中间部分的数据速度也很快(时间复杂度是O(log(N)))。
3)列表中不能简单地调整某个元素的位置,但是有序集合可以(通过更改这个元素的分数)。
4)有序集合要比列表类型更耗费内存。有序集合类型算得上是 Redis的5种数据类型中最高级的类型了,在学习时可以与列表类
型和集合类型对照理解。

原创粉丝点击