Redis-cluster集群【第一篇】:redis安装及redis数据类型

Redis介绍:

一、介绍
redis 是一个开源的、使用C语言编写的、支持网络交互的、可以基于内存也可以持久化的Key-Value数据库。
redis的源码非常简单,只要有时间看看谭浩强的C语言,在去看redis的源码能看懂50-60%。
redis目前最大的集群应该是新浪的应该。
redis目前是vmvaer来支持的,很多的开源软件都需要某些组织来支持的。如果一个开源软件没有金钱来支持的话很难走的持久
二、Redis和Memcache对比

持久化:以电商举例,session用memcache来做的,购物车用redis来做的,当你退出的时候会提示你购物车里的物品会在你退出后继续保存。相对来说memcache存储更单一化!
主从复制:redis的主从复制类似mysql的主从复制但是原理是不同的!
虚拟内存:说白了就是把内存里一些不用的东西放在硬盘上,最好不要用,降低效率,现在内存来说比较便宜。

 Redis安装&基本操作:

一、Redis安装

 

1、检查配置环境
检查gcc是否安装,如果没有安装:yum -y install gcc2、下载安装Redis
cd /opt/
wget http://download.redis.io/releases/redis-3.0.4.tar.gz
#这里下载可以登录官网查看最新的Redis
tar -xvf redis-3.0.4.tar.gz
make
make install
cd /opt/redis-3.0.4/src/
make test安装中可能遇到的问题:
zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory
zmalloc.h:55:2: error: #error "Newer version of jemalloc required"Allocator
---------------------------------------------------------------------------------------------------------
Selecting a non-default memory allocator when building Redis is done by setting
the `MALLOC` environment variable. Redis is compiled and linked against libc
malloc by default, with the exception of jemalloc being the default on Linux
systems. This default was picked because jemalloc has proven to have fewer
fragmentation problems than libc malloc.
To force compiling against libc malloc, use:
% make MALLOC=libc
To compile against jemalloc on Mac OS X systems, use:
% make MALLOC=jemallocallocator(分配算符),如果有MALLOC这个环境变量,会有用这个环境变量的 去建立Redis。
而且libc 并不是默认的分配器,默认的是jemalloc!
因为jemalloc被证明有更少的fragmentation problems比libc。但是如果你又没有jemalloc 而只有 libc 当然 make 出错。 所以加这么一个参数。
make MALLOC=libc
---------------------------------------------------------------------------------------------------------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.conf4、修改redis启动模式
默认Redis启动的时候是启动在前台的,把他改为启动在后台
vim /etc/redis/6379.conf
daemonize no  改为 daemonize yes5、Redis加入到系统服务并设置为开机启动
首先修改Redis启动脚本:
vim /etc/init.d/redis
#chkconfig: 35 95 95  在第三行加上即可添加系统服务:chkconfig --add redis
设置开机启动:chkconfig redis on
检查服务状态:chkconfig --list redis6、指定日志存放位置&PID文件&数据库文件存放位置(下一边写持久化)
vim /etc/redis/6379.conflogfile "/var/log/redis.log"  指定日志文件如果不指定就会在控制台输出
pidfile /var/run/redis_6379.pid 
dir ./   这个是指默认的持久化配置文件放在那里!建议修改下!pidfile如果不修改使用默认的话就会报错:
原因是在/etc/init.d/redis里指定的默认PID是:PIDFILE=/var/run/redis_${REDISPORT}.pid  
但是默认配置文件:/etc/redis/6379.conf(咱们自己从解压包里复制的里的默认是:pidfile /var/run/redis.pid) 

 

 二、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
OK192.168.0.201:6379> KEYS  *
1) "hello1"
2) "hello"
3) "hello2"KEY匹配方式:
?匹配单个*匹配所有3、判断key是否存在
判断Key是否存在使用:EXISTS   他返回的是整形:0不存在,1存在
192.168.0.201:6379> EXISTS hello
(integer) 1
192.168.0.201:6379> EXISTS hehe
(integer) 04、删除KEY
192.168.0.201:6379> DEL hello
(integer) 1   #这里的1是数量
删除多个测试下:
192.168.0.201:6379> DEL hello1 hello2
(integer) 25、查看类型TYPE
只要用set类型就是字符串。查看类型命令用TYPE
192.168.0.201:6379> TYPE hello
string6、Keyspace
redis是支持多个实例的默认最多16个,可以修改配置文件来支持更多!
使用INFO命令查看!
# Keyspace
db0:keys=1,expires=0,avg_ttl=0db0 :这个可以理解为命名空间。最多支持16个,使用SELECT 去切换
192.168.0.201:6379> SELECT 1
OK
尝试添加一个key-value
SET db1 hehe
然后在使用INFO看下
# Keyspace
db0:keys=1,expires=0,avg_ttl=0
db1:keys=1,expires=0,avg_ttl=0

 Redis数据类型:

他用不同的命令来区分你要操作什么数据类型
类型不能嵌套,不能混! 但是有个王炸: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如果想加多个呢: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减呢? 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想支持小数点:
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、散列类型(hash)

和数据库存的表似的,表不是的有字段吧,可以给每个字段设置个值
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) 1192.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你想找到第98个这就费老劲了他从1开始数数到98优点,你读前100个,卡直接读头部就非常快了命令:
LPUSH key value [value ...]
RPUSH key value [value ...]LPOP keyRPOP keyLRANGE key start stopLREM key count value
4.1、
从左边添加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  3192.168.0.201:6379> RPUSH num 5
(integer) 52  1  0  3  5  5如果想获取长度就使用LNE 吗!获取列表类型长度就是:LLEN
192.168.0.201:6379> LLEN num
(integer) 54.2、从左边拿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) 34.3、
获取列表的某一个范围:
现在是这个值
1  0  3192.168.0.201:6379> LRANGE num 0 1              #取0 - 1 的值
1) "1"
2) "0"###这个列表和python中列表中差不多,0 -1 相当于列表中的下标。192.168.0.201:6379> LPUSH num 2
(integer) 4
192.168.0.201:6379> RPUSH num 4
(integer) 5192.168.0.201:6379> LRANGE num 0 -1     #这里的(-1)表示左边第一个
1) "2"
2) "1"
3) "0"
4) "3"
5) "4"4.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"他是两边的第一次接触有点乱!他是两边的需要注意!!!4.5、只保留指定数据只保留0到2的数据
192.168.0.201:6379> LTRIM num 0 2
OK
看下结果:
192.168.0.201:6379> LRANGE num 0 -1
1) "2"
2) "1"
3) "0"这个有什么用呢:
写日志的时候,我这个缓冲区,只保留最近100条日志!
比如:
192.168.0.201:6379> LPUSH logs newloghehe
(integer) 1192.168.0.201:6379> LTRIM num 0 99
OK这样的话我的列表永远只有100条,我只看最近100条的日志!!

 5、集合类型

集合是高一学的,第一个学期就是学的集合
交集∩、并集∪、合集、等 0 0 !集合的元素是没有类型的!
用到集合类型的应用有:(新浪微博分享了很多的redis应用)
比如:关注微博,比如咱俩是否共同关注了某一个人等。5.1、
添加集合
192.168.0.201:6379> SADD jihe1 a b c
(integer) 35.2、
查看集合内容
192.168.0.201:6379> SMEMBERS jihe1
1) "c"
2) "a"
3) "b"
5.3、判断集合元素是否存在
192.168.0.201:6379> SISMEMBER jihe1 d
(integer) 0
192.168.0.201:6379> SISMEMBER jihe1 a
(integer) 1
返回0 说明不存在返回1说明存存在5.4、集合间运算
支持:交集、差集、并集差集运算:
192.168.0.201:6379> SDIFF jihe1 jihe2
1) "a"
jihe1abcjihe2b cdjihe1 减去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) 3192.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"
同样也可以设置多个5.4、以上的集合是无序的,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) 1192.168.0.201:6379> ZRANGE youxu 0 4
1) "e"
2) "a"
3) "b"
4) "c"
5) "d
######e在前面因为他的score小!
热门文章,可以用这个来排序,我可以给他设置一个分数!!!!!

 

转载于:https://www.cnblogs.com/luotianshuai/p/4968959.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358021.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ad10怎么挖铺的铜_黄金怎么验真假,简单易行方法多。

在当今社会,随着人们生活水平的提高,大家越来越追求生活的质量。也就形成了我们在生活中想通过各种细节丰富我们的生活,提升我们的生活情趣。导致我们对物质的追求也上了一个台阶,相比之下黄金市场的需求也大大增加。而我们大家的…

CMD启动mysql服务“发生系统错误 5”的解决办法

背景:cmd进入,启动mysql报:发生系统错误 5 问题: 解决办法: 找到cmd.exe的位置,不好找请使用以下命令。 找到文件,右键以管理员身份运行即可。

jQuery.extend 函数详解

JQuery的extend扩展方法:Jquery的扩展方法extend是我们在写插件的过程中常用的方法,该方法有一些重载原型,在此,我们一起去了解了解。一、Jquery的扩展方法原型是:   extend(dest,src1,src2,src3...);它的含义是将src1,src2,sr…

roads 构筑极致用户体验_坚持用户思维 推动领克汽车逆势突围

【2020年7月9日,杭州】近日,全球新高端品牌—领克公布了2020年6月销量数据。领克汽车6月实现月销量达13214辆,环比增长约2%,同比增长约53%,连续三个月获得双增长,并创下过去七个月以来最高月销量表现。2020…

通过示例Hibernate–第2部分(DetachedCriteria)

所以上次我们帮助正义联盟有效地管理了他们的超级英雄。 今天,我们集中讨论“复仇者联盟”将如何使用冬眠的“分离标准”找出每个超级英雄的敌人,以保护他们的超级英雄。 您可以从此处下载工作示例。 在此示例中,我们仅考虑两个实体。 复仇者…

微信小程序【WXSS 文件编译错误】unexpected “?“at pos 1的解决办法。

问题: 解决办法: 在控制台输入 openVendor() ,清除里面的 wcsc wcsc.exe 然后重启工具。 如果涉及编码格式乱码的,请手动改为uft-8. 问题: 解决办法:

常见的一些威胁情报分析平台

在进行渗透过程中,也可以借助一些商用或者非商业平台来进行信息搜索及验证,主要针对邮箱、IP、域名、文件md5、apk文件等进行搜索,整理和完善线索信息。为了大家方便, 对目前公开的威胁情报平台进行搜集,在实际使用过…

ARM的编程模式和7种模式

ARM采用的是32位架构 ARM阅读 --Byte: 8 bits --Halfword: 16 bits(2 byte) 半字 --Word: 32 bits(4 byte) 大部分ARM core提供: core(核心) --ARM指令集(32 bit) (有些占内存、时间快) --…

CSDN博客专家申请的条件及规则

“博客专家”是CSDN给予质量较高、影响力较大的IT类博客的荣誉称号,代表了CSDN官方对其博客的肯定,同时博客专家也需要承担一定的社区责任。 申请规则:http://blog.csdn.net/experts/rule.html 申请地址:https://blog.csdn.net/experts/apply 申请条件: 注意事项: 专属福…

Java编译器API

本文是我们名为“ 高级Java ”的学院课程的一部分。 本课程旨在帮助您最有效地使用Java。 它讨论了高级主题,包括对象创建,并发,序列化,反射等。 它将指导您完成Java掌握的过程! 在这里查看 ! 目录 1.简…

easyswoole数据库连接池_如何在 Swoole 中优雅的实现 MySQL 连接池

如何在 Swoole 中优雅的实现 MySQL 连接池一、为什么需要连接池 ?数据库连接池指的是程序和数据库之间保持一定数量的连接不断开,并且各个请求的连接可以相互复用,减少重复连接数据库带来的资源消耗,一定程度上提高了程序的并发性…

CVE-2022-22965:Spring Framework远程代码执行漏洞

CVE-2022-22965:Spring Framework远程代码执行漏洞 本文仅为验证漏洞,在本地环境测试验证,无其它目的 漏洞编号: CVE-2022-22965 漏洞说明: Spring framework 是Spring 里面的一个基础开源框架,其目的是…

js中四种创建对象的方式

一、 1 var user new Object(); 2 user.first"Brad"; 3 user.last"Dayley"; 4 user.getName function( ) { return this.first " " this.last; } 二、 1 var user { 2 first: Brad, 3 last: Dayley, 4 getName: function( ) { return…

CSS系列讲解-总目录

总目录: 欢迎来到孙叫兽的《CSS系列讲解》,蓝色字体为传送门,点击进入即可。本专栏已完结,大前端专栏支持更新。 玩转CSS系列: 什么是CSS?你真的理解? CSS页面DEMO CSS基本语法? 如何玩转CSS的Id 和 Class选择器? 怎么玩转CSS内部样式表与外部样式表? 怎么样才…

红队信息收集自动化工具-水泽(ShuiZe)

红队信息收集自动化工具-水泽(ShuiZe) 文章目录 红队信息收集自动化工具-水泽(ShuiZe)0x01 介绍0x02 安装0x03 效果展示0x04 POC编写0x05 使用方法0x06 实现原理Web -> 存活探测0x07 项目地址 0x01 介绍 定位:协助…

注释不好吗?

前几天,我在有关Spring XML与注释的文章中运用了自己的原则,轻松进入了这个主题。 对于我目前正在编写此新应用程序的团队来说,这种简单的输入方式也是我不会使事情复杂化的方式,该应用程序的生产寿命可能为3-5年(如果…

前端工程师应该达到什么水平,找工作薪资才比较高?

当然是水平越高,越容易找到工作,薪资越高在竞争这么激烈的2020年,就需要更加的努力,充实自己,让自己不被代替!两条路:自学或者找培训班,找培训班的话,我推荐达内和传智播…

【转】使用JMeter对数据库做压力测试

作为一名开发人员,大多情况下都会认真的做好功能测试,但是却常常忽略了软件开发之后的压力测试,尤其是在面向大量用户同时使用的Web应用系统的开发过程,压力测试往往是不够充分的。近期我在一个求职招聘型的网站项目中就对压力测试…

python中的大数据品牌运营专业公司_国内最好的专业数据分析公司有哪些?

说说我知道的几家,都是在各自领域最好的。大数据平台星环,做Hadoop生态系列的大数据底层平台公司。也是国内唯一入选过Gartner魔力象限的大数据平台公司。Hadoop是开源的,星环主要做的是把Hadoop不稳定的部分优化,功能细化&#x…

POC以及day下载链接地址

POC以及day下载链接地址 https://github.com/Threekiii/Awesome-POC https://github.com/coffeehb/Some-PoC-oR-ExP https://github.com/PeiQi0/PeiQi-WIKI-Book https://github.com/luck-ying/Library-POC https://github.com/helloexp/0day https://github.com/BaizeSec/byl…