一 、redis的安装

1、查看是否有安装gcc tcl 编译环境

Linux系统下的Gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一。gcc是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%~30%。
Gcc编译器能将C、C++语言源程序、汇程式化序和目标程序编译、连接成可执行文件,如果没有给出可执行文件的名字,gcc将生成一个名为a.out的文件。在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。而gcc则通过后缀来区别输入文件的类别,下面我们来介绍gcc所遵循的部分约定规则。

TCL(Tool Command Language)工具脚本语言,是Linux内的一种语言包。

查看安装命令: whereis gcc tcl

安装命令: yum -y install gcc tcl

2、上传redis安装包,并进行解压

3、手动对安装包进行编译安装  make && make PREFIX=/opt/xxx/redis install (安装的目录可以随意指定)

4、配置可执行文件的脚本目录,保证执行脚本可以在任意的目录之下执行

vi + /etc/profile

配置完环境变量之后, 读取配置文件(就是一个对配置文件进行编译的过程) source /etc/profile

5、安装redis内存服务器数据库,并执行 在/software/redis-2.8.18/utils目录下找到 install-server.sh

./install-server.sh   执行这个命令

在安装的过程中可以设置redis对外通讯的端口 ,默认是6379

/etc/redis/6379.conf  redis是一个内存数据库,有自己的实例,每一个端口代表了当前数据库服务器的一个实例,有自己的配置文件 /etc/redis/6379.conf ,实例与端口号是一一对应的,当在安装一个实例之后,端口号就需要发生变化 ,可以允许创建多个实例

/var/log/redis_6379.log redis日志的存放目录

/var/lib/redis/6379: redis持久化数据的存放目录

/opt/xxx/redis/bin/redis-server 可执行文件的安装目录 (环境变量配置之后才能找到这个目录)

#----¥以上步骤安装了redis的服务器¥---#

查看服务器启动的运行命令: redis-server -h 

查看redis客户端启动的相关命令: redis-cli -h

 

创建redis客户端的命令:

redis-cli  

redis 支持的数据类型: 字符串、列表、散列、集合、有序集合、HyperLogLog ,所有的数据都是按照k-v键值对的数据类型来进行存储的

string支持的数据方式: a、基本操作时字符串操作,追加,截取    set、get、append、、、

b、数值类型的计算

c、位图计算

nx --not exists 

xx --只有存在的时候才进行操作

一次性的设置多个键值对组合:

mset k1 a k2 b k3 c

mget ....

设置一个键的存活时间:

expire key seconds

查看剩余的时间:

TTL key

PTTL key

key存在但没有设置TTL,返回-1   key存在,但还在生存期内,返回剩余的秒或者毫秒  key曾今存在,但已经消亡,返回-2

查看一个键的长度: STRLEN key

查看一个键的数据类型:type key     OBJECT encoding key (查看底层存储的数据结构)

对key值进行数据运算:INCR k3     INCRBY key number (指定增长的步长)

返回旧值并设置新值:GETSET KEY VALUE

对key值进行位图计算: SETBIT key offset value 

.offset 偏移量。从0开始

查看某个值在key中第一次出现的位置: BITPOS  key value

bit位进行运算: BITOP and k3 k1 k2 (对k1,k2进行与运算,然后将运算的结果放置到k3中 )

统计字符串之上所有bit位为1的个数:

注意:在redis数据库中可以创建无数个实例,但每个实例可以操作的数据库数量是16个 

FLUSHALL:该命令会清空当前实例下数据库下面的所有的数据

FLUSHDB:只清空当前数据库中所有的数据

登录不同的数据库: redis-cli -n 2

 

List 列表、数组

1、基于Linked list 实现  2、元素是字符串类型的 3、列表头尾增删快,中间增删慢,增删元素是常态

4、元素可以重复的出现    5、最多可以包含2^32 -1 个元素

命令:

命令流程:

B block块,阻塞   Lleft 左  R right 右  X exists: 存在才执行

左右或者头尾压入元素: String set key "abc"

LPUSH key value  [value.......]

LPUSHX key value 

RPUSH key value [value.....]

RPUSHX key value

list 同时具备了队列、栈、数组、阻塞队列的所有特点

获取指定位置的元素: LINDEX key index

设置指定位置的元素: LSETkey index value

列表长度、元素个数: LLEN key LRANGE key 0 -1 

 

从列表头部开始删除等于value的元素count次,LIST可以重复出现 : LREM key count value 

count>0 : 从表头开始向表尾搜索,移除与value相等的元素,数量为count

count<0: 从表头开始向表尾搜索,移除与value相等的元素,数量为count 的绝对值

去除指定范围外的元素:LTRIM key start stop 

在指定的位置插入一条数据: LINSERT key before/after value1 value2 

阻塞: 如果弹出的列表不存在或者为空,就会阻塞 

超时时间设置为0,就是永久阻塞,知道有数据可以弹出

如果多个客户端阻塞到同一个列表之上,使用FIRST IN FIRSY SERVICE原则,先到先服务

左右或者头尾阻塞或者弹出元素 :

BLPOP key [key....] timeout

BRPOP key [key....] timeout

从一个列表尾部阻塞弹出元素压入到另一个列表的头部:

BRPOPLPUSH source destination timeout

 

hash 散列:

由field和关联的value组成的map键值对,field和value是字符串类型的数据

一个hash最多包含2^32-1键值对

设置单个字段: HSET key field value 

设置多个字段: HMSET key field value 

返回字段个数:HLEN key

判断字段是否存在: HEXISTS key exists 

hash用途:  节约内存空间   每创建一个键,他都会为这个键创建一些附加管理的信息(比如这个键的类型,这个键最后一次呗访问的时间等等)

所以数据库有里面的键越多,redis数据库服务器在存储附加管理信息方面耗费的内存就会越多,花在管理数据库键上的CPU也会越多在字段的值上进行浮点数的增量计算 

set集合:无序的,去重的,元素是字符串类型

增加一个或者多个元素: SADD key  number (如果元素已经存在,则自动进行忽略)

移除一个元素: SREM key member (元素不存在的时候,进行自动的忽略)

返回结合包含的所有元素: SMEMBERS key  (如果集合元素过多,例如有百万个,需要遍历,可能会造成服务器的阻塞,生产坏境应避免使用)

检查给定元素是否存在于集合之中: SISMEMBER key member 

随机返回集合中指定个数的元素:  SRANDMEMBER key [count]

如果count为正数,且小于集合基数,那么命令返回一个包含count个元素的数组,数组中的元素各不相同。如果count大于等于集合基数,那么返回整个集合

返回集合中元素的个数: SCARD key   键的结果会保存信息,集合长度就记录在里面,所以不需要遍历

随机从集合中移除并返回这个被移除的元素: SPOP key

把元素从源集合移动到目标集合:   SMOVE source destination member

set 集合的操作 

差集   SDIFF key [key ...]  从第一个集合中去除其他集合中与自己有交集的部分

SDIFFSTORE destination key[key......] ,将差集结果存储在目标key中 

交集: SINTER key [key.....],取所有集合交集部分 

SINTERSTORE destination key[key....]

并集: SUNION key [key....]

sortedSet 有序集合:

类似于set集合,有序的、去重的,元素是字符串类型,每一个元素都关联着一个浮点数分值(score),并按照分值从小到大的顺序进行排列 ,分值可以相同

增加一个或者多个元素:ZADD key score member [score member....]

移除一个或多个元素:ZREM key member [member.....]

显示分值: ZSCORE key member 

增加或者减少分值:ZINCRBY key increment member 

increment为负数就是减少 

返回元素的排名(索引)

ZRANK key member

返回元素的逆序排名:ZREVRANK key member

返回指定索引区间元素:ZRANGE key start stop [WITHSCORES],如果score相同,则按照字典序排序

默认按照score从小到大,如果需要score从大到小,使用ZREVRANGE 

返回指定索引区间元素:ZREVRANGE key start stop

返回指定分值区间元素: ZRANGEBYSCORE key min max [withscores] [limit offset count]

返回score默认属于【min,max】之间,元素按照score升序排列,score相同字典序

LIMIT中offset代表跳过多少个元素,count是返回几个,类似于mysql

使用小括号,修改区间为开区间

返回指定分值区间元素: ZREVRANGEBYSCORE key  min max [withscores] [limit offset count]

移除指定排名范围的元素: ZREMRANGEBYRANK key start stop 

移除指定分值范围元素:ZREMRANGEBYSCORE key min max 

返回集合中元素个数: ZCARD key

并集:

ZUNIONSTORE destination numkeys key [key...] [WEIGHTS weight] [aggregate sum|min|max]

numkeys:指定key的数量,必须

weights选项,与前面设定的key对应,对应key中每一个score都要乘以这个权重

AGGREGATE选项,指定并集结果的聚合方式

sum:将所有集合中某一个元素的score值之和作为结果集中该成员的score值 

交集: ZINTERSTORE destination numbers key [key....] [weights weight]