Redis集群介绍及五大数据类型-1

Redis介绍:

redis 是一个开源的、使用C语言编写的、支持网络交互的、可以基于内存也可以持久化的Key-Value数据库。

redis的源码非常简单,只要有时间看看谭浩强的C语言,在去看redis的源码能看懂50-60%。

redis目前最大的集群应该是新浪的应该。

redis目前是vmvaer来支持的,很多的开源软件都需要某些组织来支持的。如果一个开源软件没有金钱来支持的话很难走的持久

Redis和Memcached对比:

名词解释:

持久化:以电商举例,session用memcache来做的,购物车用redis来做的,当你退出的时候会提示你购物车里的物品会在你退出后继续保存。相对来说memcache存储更单一化!

主从复制:redis的主从复制类似mysql的主从复制但是原理是不同的

虚拟内存:说白了就是把内存里一些不用的东西放在硬盘上,最好不要用,降低效率,现在内存来说比较便宜。

一、安装:

1、检查配置环境

检查gcc是否安装,如果没有安装:yum -y install gcc

2、下载安装Redis

cd /opt/
wget http://download.redis.io/releases/redis-3.0.4.tar.gz
tar -xvf redis-3.0.4.tar.gz
make 
make install 
cd /opt/redis-3.0.4/src/ 
make test

3、配置redis

cp /opt/redis-3.0.4/utils/redis_init_script /etc/init.d/redis      #复制管理脚本
chmod +x /etc/init.d/redis
mkdir /etc/redis
cp /opt/redis-3.0.4/redis.conf /etc/redis/6379.conf
这样是启动的时候是启动在前台的,把他改为启动在后台
vim /etc/redis/6379.conf
daemonize no  改为 daemonize yes
添加至系统服务
vim /etc/init.d/redis
#chkconfig: 3595 95  #添加至文件
推出执行命令:
Chkconfig –add redis
chkconfigredis on

二、redis基础操作

set 设置Key

get 判断Key的值

exists 判断Key是否存在

keys 显示所有的Key

del 删除指定Key

type 获取Key类型

注:redis是不区分大小写的,命令最好使用大写这样能区分是命令还是参数!!!!

例子:

1、set的例子:

192.168.0.201:6379> SET hello hehe
OK
192.168.0.201:6379> GET hello
"hehe"

2、设置多个key value 然后使用使用keys * 去查看所有

192.168.0.201:6379> SET hello1 hehe1
OK
192.168.0.201:6379> SET hello2 hehe2
OK
192.168.0.201:6379> KEYS  *
1) "hello1"
2) "hello"
3) "hello

KEY匹配方式:

?匹配单个

*匹配所有

3、判断key是否存在

判断Key是否存在使用:EXISTS   他返回的是整形:0不存在,1存在

192.168.0.201:6379> EXISTS hello
(integer) 1
192.168.0.201:6379> EXISTS hehe
(integer) 0

4、删除KEY

192.168.0.201:6379> DEL hello
(integer) 1   #这里的1是数量
删除多个测试下:
192.168.0.201:6379> DEL hello1 hello2
(integer) 2

5、查看类型TYPE

只要用set类型就是字符串。查看类型命令用TYPE

192.168.0.201:6379> TYPE hello
string

6、Keyspace

redis是支持多个实例的默认最多16个,可以修改配置文件来支持更多!

使用INFO命令查看!

# Keyspace
db0:keys=1,expires=0,avg_ttl=0
db0 :这个可以理解为命名空间。最多支持16个,使用SELECT 去切换
192.168.0.201:6379> SELECT 1
OK
尝试添加一个key-value
SET db1 hehe
然后在使用INFO看下
# Keyspacedb0:keys=1,expires=0,avg_ttl=0
db1:keys=1,expires=0,avg_ttl=0

7、配置redis配置文件

logfile "/var/log/redis.log"  指定日志文件如果不指定就会在控制台输出

port 6379

databases 16  默认支持的最多16个database可以修改

dir ./   这个是指默认的持久化配置文件放在那里!建议修改下!

pidfile /var/run/redis_6379.pid     #如果起多个实例的话上面的都需要改

保存退出停止服务

[[email protected]]$ /etc/init.d/redis stop

/var/run/redis_6379.pid does not exist, process is not running

这个是应为6379.conf的配置文件里指定的配置文件是不对,和/etc/init.d/redis不同修需要修改下!

pidfile /var/run/redis_6379.pid

vim /etc/redis/6379.conf

然后kill掉redis进程测试下!start | stop

三、redis的5大数据类型

他用不同的命令来区分你要操作什么数据类型

类型不能嵌套,不能混! 但是有个王炸:set能把所有的类型都改为字符串类型

1、字符串类型

SET

GET

DEL

APPEND  在值的后面追加

set能重新设置但是要追加的话使用APPEND最好比如:

192.168.0.201:6379> SET hehe hello
OK
192.168.0.201:6379> GET hehe
"hello"
192.168.0.201:6379> APPEND hehe ,world
(integer) 11
192.168.0.201:6379> GET hehe
"hello,world"

可以同时设置多个值和查询值用MSET 和MSET

192.168.0.201:6379> MSET key1 v1 key2 v2 key3 v3
OK
192.168.0.201:6379> MGET key1 key2 key3
1) "v1"
2) "v2"
3) "v3"

获取字符串长度

192.168.0.201:6379> STRLEN hehe
(integer) 11

如果字符串是中文的他会按照UTF-8格式的来输出1个字等3个字符串来算的

192.168.0.201:6379> SET key "呵呵"
OK
192.168.0.201:6379> GET key
"\xe5\x91\xb5\xe5\x91\xb5"

2、自增类型

比如说投票点下+1 ,如果说用set每点一次修改set下那就不太现实。所有redis有个自增类型:INCR

192.168.0.201:6379> INCR num           #默认如果没有这个值的话,INCR就会自动创建一个值默认为零,当你没执行一次他就会+1
(integer) 1
192.168.0.201:6379> INCR num
(integer) 2
192.168.0.201:6379> INCR num
(integer) 3
192.168.0.201:6379> INCR num
(integer) 4
192.168.0.201:6379> INCR num
(integer) 5
192.168.0.201:6379> INCR num
(integer) 6

如果想加多个呢:INCRBY

192.168.0.201:6379> INCRBY num 10
(integer) 57
192.168.0.201:6379> INCRBY num 10
(integer) 67
192.168.0.201:6379> INCRBY num 10
(integer) 77
192.168.0.201:6379> INCRBY num 10
(integer) 87
192.168.0.201:6379> INCRBY num 10
(integer) 97
192.168.0.201:6379> INCRBY num 10
(integer) 107

减呢? DECR

192.168.0.201:6379> DECR num
(integer) 106
192.168.0.201:6379> DECR num
(integer) 105
192.168.0.201:6379> DECR num
(integer) 104

如果要是减多个呢:DECRBY

192.168.0.201:6379> DECRBY num 5
(integer) 97
192.168.0.201:6379> DECRBY num 5
(integer) 92
192.168.0.201:6379> DECRBY num 5
(integer) 87
192.168.0.201:6379> DECRBY num 5
(integer) 82

想支持小数点:

INCRBYFLOAT key 0.1
192.168.0.201:6379> INCRBYFLOAT key 0.1
"0.1"
192.168.0.201:6379> INCRBYFLOAT key 0.1
"0.2"
192.168.0.201:6379> INCRBYFLOAT key 0.1
"0.3"
192.168.0.201:6379> INCRBYFLOAT key 0.1
"0.4"

3、散列类型

哈希

和数据库存的表似的,表不是的有字段吧,可以给每个字段设置个值

HSET Key field value

HGET Key field

HMSET Key field value [field value....]

HMGET Key field [field ...]

HGETALL Key

HDEL

设置散列类型:

192.168.0.201:6379> HSET shouji name iphone
(integer) 1
192.168.0.201:6379> HSET shouji co red
(integer) 1
192.168.0.201:6379> HSET shouji price 8888
(integer) 1

查询:

192.168.0.201:6379> HGET shouji name
"iphone"
192.168.0.201:6379> HGET shouji co
"red"
192.168.0.201:6379> HGET shouji price
"8888"
192.168.0.201:6379> HGETALL shouji
1) "name"
2) "iphone"
3) "co"
4) "red"
5) "price"
6) "8888"

其实现在看着不是好看的但是他通过一些API调用到网页上,通过排版取出来的值就好看了

192.168.0.201:6379> HMSET diannao name thinkpad co black price 30
OK
192.168.0.201:6379> HMGET diannao name co price
1) "thinkpad"
2) "black"
3) "30"

4、列表类型

列表类型:他是存储一个有序的字符串列表   这个“有序”是什么时候进来的!

列表你向左边添加和右边添加他的时间复杂度是一样的!O1(时间复杂度)

可以理解为:我这个速度不随着数量的增加而增加!比如1000行和1万行他的时间开销是一样的!    大学数据结构里学的

时间复杂度:

同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。

计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。

但是他有个缺点,比如说里面有1万个key你想找到第999个这就比较劲了他从1开始数数到999

优点,你读前100个,卡直接读头部就非常快了

LPUSH key value [value ...]

RPUSH key value [value ...]

LPOP key

RPOP key

LRANGE key start stop

LREM key count value

从左边添加key

192.168.0.201:6379> LPUSH num 0
(integer) 1
192.168.0.201:6379> LPUSH num 1
(integer) 2
192.168.0.201:6379> LPUSH num 2
(integer) 3

现在是从左边加

2 1 0

从右边开始加

192.168.0.201:6379> RPUSH num 3
(integer) 4
2 1 0
3

192.168.0.201:6379> RPUSH num 5
(integer) 5
2 1 0 3 5

如果想获取长度就使用LNE 吗!获取列表类型长度就是:LLEN

192.168.0.201:6379> LLEN num
(integer) 5

从左边拿key

从列表类型里拿出这个key来(拿出来就没有了),从左边拿左边第一个

192.168.0.201:6379> LPOP num
"2"

左边第一个是2那么拿出来之后这个key这个key就变成

1 0 3 5

从右边拿key,从右边拿右边第一个   (这个5就被拿出来了)

192.168.0.201:6379> RPOP num
"5"

现在在看下这个key的长度

192.168.0.201:6379> LLEN num
(integer) 3

获取列表的某一个范围:

现在是这个值

1 0
3

192.168.0.201:6379> LRANGE num 0 1              #取0 - 1 的值1) "1"
2) "0"

###这个值的输出结果是这样的:默认你是从左边取值的,那么0-1的值是这样的,左边的第一个元素是1(对应0这个标识位),左边的第二个元素是0(对应1这个标识位)

这个不太好理解有点绕,那么在添加两个值来更详细的说明

192.168.0.201:6379> LPUSH num 2
(integer) 4
192.168.0.201:6379> RPUSH num 4
(integer) 5
192.168.0.201:6379> LRANGE num 0 -1     #这里的(-1)表示左边第一个
1) "2"
2) "1"
3) "0"
4) "3"
5) "4"

获取指定元素的值:

获取右边的第一个值:

192.168.0.201:6379> LINDEX num -1
"4"

获取左边边的第二个值:

192.168.0.201:6379> LINDEX num -2
"3"

那-3呢?

192.168.0.201:6379> LINDEX num -3
"0"

这个就是从右边数的第3个值!!!!!

从左边获取值

192.168.0.201:6379> LINDEX num 0
"2"
192.168.0.201:6379> LINDEX num 1
"1"

只保留指定数据

只保留0到2的数据

192.168.0.201:6379> LTRIM num 0 2
OK
看下结果:
192.168.0.201:6379> LRANGE num 0 -11) "2"2) "1"
3) "0"

这个有什么用呢:

写日志的时候,我这个缓冲区,只保留最近100条日志!

比如:

192.168.0.201:6379> LPUSH logs newloghehe
(integer) 1
192.168.0.201:6379> LTRIM num 0 99
OK

这样的话我的列表永远只有100条,我只看最近100条的日志!!

5、集合类型

集合是高一学的,第一个学期就是学的集合

交集∩、并集∪、合集、等 0 0 !

集合的元素是没有类型的!

用到集合类型的应用有:(新浪微博分享了很多的redis应用)

比如:关注微博,比如咱俩是否共同关注了某一个人等。

添加集合

192.168.0.201:6379> SADD jihe1 a b c
(integer) 3

查看集合内容

192.168.0.201:6379> SMEMBERS jihe1
1) "c"
2) "a"
3) "b"

判断集合元素是否存在

192.168.0.201:6379> SISMEMBER jihe1 d
(integer) 0
192.168.0.201:6379> SISMEMBER jihe1 a
(integer) 1
返回0 说明不存在返回1说明存存在

集合间运算

支持:交集、差集、并集

差集运算:

192.168.0.201:6379> SDIFF jihe1 jihe2
1) "a"
jihe1 a b c
jihe2 c d

jihe1 减去jihe2 减去相同的b c  ,  jihe1 还剩下a

同理:

jihe2 减去jihe1

192.168.0.201:6379> SDIFF jihe2 jihe1
1) "d"

差集运算可以设置多个

交集运算:

 192.168.0.201:6379> SINTER jihe1 jihe2
1) "c"
2) "b"
交集可以设置多个:
在添加一个jihe3
192.168.0.201:6379> SADD jihe3 d e f
(integer) 3
192.168.0.201:6379> SINTER jihe1 jihe2 jihe3
(empty list or set)

#这个是因为他是jihe1和jihe2先做交集运算,然后在和jihe3做交集运算

并集运算

192.168.0.201:6379> SUNION jihe1 jihe2
1) "a"
2) "c"
3) "b"
4) "d"

同样也可以设置多个

以上的集合是无序的,redis支持有序的集合他的名如下

ZADD key score member 增加元素

ZSCORE key member 获取元素的分数

ZRANGE key start stop [WITHSCORES]

ZRANGEBYSCORE key min max

添加有序集合

192.168.0.201:6379> ZSCORE youxu 80 a
(nil)
192.168.0.201:6379> ZADD youxu 81 b
(integer) 1
可以添加多个
192.168.0.201:6379> ZADD youxu 82 c 83 d
(integer) 2

获取分数

192.168.0.201:6379> ZSCORE youxu a
"80"
192.168.0.201:6379> ZSCORE youxu b
"81"
192.168.0.201:6379> ZSCORE youxu c
"82"
192.168.0.201:6379> ZSCORE youxu d
"83"

获取有序集合范围

192.168.0.201:6379> ZRANGE youxu 0 3   #参考列表集合的0 3  从0到3的元素
1) "a"
2) "b"
3) "c"
4) "d"

在举个例子:

192.168.0.201:6379> ZADD youxu 79 e
(integer) 1

192.168.0.201:6379> ZRANGE youxu 0 4
1) "e"
2) "a"
3) "b"
4) "c"
5) "d

######e在前面因为他的score小!

热门文章,可以用这个来排序,我可以给他设置一个分数!

时间: 2024-08-08 22:03:56

Redis集群介绍及五大数据类型-1的相关文章

Redis 集群介绍

Redis 集群介绍 开源键值对存储数据库Redis在4月1日发布了3.0.0版.主要新特性包括:Redis Cluster,Redis子集的分布式实现:新的"嵌套字符串"对象编码减少缓存遗漏,大幅提高某些工作负荷的速度:等等.开发者Salvatore Sanfilippo表示,Redis 3.0.0是第一个原生支持集群的稳定版本,可能需要1到2年才能成熟,它对Redis生态系统具有重要意义,Redis Cluster将向用户提供某种程度的自动伸缩和容错能力,将改变用户看待Redis的

1.22 redis集群介绍21.23/21.24 redis集群搭建配置21.25 redis集群

21.22 redis集群介绍多个redis节点网络互联,数据共享所有的节点都是一主一从(可以是多个从),其中从不提供服务,仅作为备用不支持同时处理多个键(如mset/mget),因为redis需要把键均匀分布在各个节点上,并发量很高的情况下同时创建键值会降低性能并导致不可预测的行为.支持在线增加.删除节点客户端可以连任何一个主节点进行读写 21.23/21.24 redis集群搭建配置场景设置:两台机器,分别开启三个Redis服务(端口)A机器上三个端口7000,7002,7004,全部为主B

redis集群介绍、redis集群搭建配置、redis集群操作

一:redis集群介绍 多个redis节点网络互联,数据共享所有的节点都是一主一从(可以是多个从),其中从不提供服务,仅作为备用不支持同时处理多个键(如mset/mget),因为redis需要把键均匀分布在各个节点上,并发量很高的情况下同时创建键值会降低性能并导致不可预测的行为.支持在线增加.删除节点客户端可以连任何一个主节点进行读写 二:redis集群搭建配置 场景设置:两台机器,分别开启三个Redis服务(端口)A机器上三个端口7000,7002,7004,全部为主B机器上三个端口7001,

Redis集群部署(一)

一.Redis集群介绍 Redis 集群是一个提供在多个Redis间节点间共享数据的程序集. Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误. Redis 集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下继续处理命令. Redis 集群的优势: 自动分割数据到不同的节点上. 整个集群的部分节点失败或者不可达的情况下能够继续处理命令. Redis 集群的数据分

Redis的安装和使用之四------Redis集群

一.Redis集群介绍 Redis 集群是一个提供在多个Redis间节点间共享数据的程序集. Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误. Redis 集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下继续处理命令. Redis 集群的优势: 自动分割数据到不同的节点上: 整个集群的部分节点失败或者不可达的情况下能够继续处理命令. Redis集群的数据分片

Redis → Windows下搭建redis集群

一,redis集群介绍 Redis cluster(redis集群)是在版本3.0后才支持的架构,和其他集群一样,都是为了解决单台服务器不够用的情况,也防止了主服务器宕机无备用服务器,多个节点网络互联数据共享,所有节点都是一主一从(也可以一主多从),其中不提供服务,只做为备份,emmm我就不多说废话了,直接进入主题. 没有多的服务器就只能单机搭建集群了 原文地址:https://www.cnblogs.com/BalmyLee/p/12019398.html

Redis集群搭建完整流程演示

Redis集群搭建完整流程演示 前言 ? 前面讲述了有关redis的编译安装流程以及其配置优化的部分内容,本文旨在本地模拟redis服务器集群搭建的流程演示. Redis集群的作用是什么? ? 在实验部署开始前,我们需要明白为什么需要搭建Redis集群,其解决了什么样的问题?又有哪些优势.我们可以从单一的Redis服务器来探究这个问题. 单一Redis服务器存在的问题 ? 如果部署过MySQL主从复制读写分离以及MHA高可用的话,这里就非常容易想到单一Redis服务器所存在的问题,主要有以下几点

Redis 集群方案介绍

由于Redis出众的性能,其在众多的移动互联网企业中得到广泛的应用.Redis在3.0版本前只支持单实例模式,虽然现在的服务器内存可以到100GB.200GB的规模,但是单实例模式限制了Redis没法满足业务的需求(例如新浪微博就曾经用Redis存储了超过1TB的数据).Redis的开发者Antirez早在博客上就提出在Redis 3.0版本中加入集群的功能,但3.0版本等到2015年才发布正式版.各大企业在3.0版本还没发布前为了解决Redis的存储瓶颈,纷纷推出了各自的Redis集群方案.这

Redis集群方案介绍

由于Redis出众的性能,其在众多的移动互联网企业中得到广泛的应用.Redis在3.0版本前只支持单实例模式,虽然现在的服务器内存可以到100GB.200GB的规模,但是单实例模式限制了Redis没法满足业务的需求(例如新浪微博就曾经用Redis存储了超过1TB的数据).Redis的开发者Antirez早在博客上就提出在Redis 3.0版本中加入集群的功能,但3.0版本等到2015年才发布正式版.各大企业在3.0版本还没发布前为了解决Redis的存储瓶颈,纷纷推出了各自的Redis集群方案.这