编译:make
安装:make install

启动redis服务:

1)前台启动:在任何目录下执行 redis-server
2)后台启动:在任何目录下执行 redis-server &
3)启动redis服务时,指定配置文件:redis-server redis.conf &

关闭redis服务:

1)通过kill命令
        ps-ef|grep redis查看pid
        kill -9 pid
2)通过redis-cli命令关闭:
        redis-cli shutdown
redis的客户端:用来连接redis服务,向redis服务端发送命令,并且显示redis服务处理结果。
redis-cli:是redis自带客户端,使用命令redis-cli就可以启动redis的客户端程序

redis-cli:默认连接127.0.0.1(本机)的6379端口上的redis服务
redis-cli -p 端口号:连接127.0.0.1(本机)的指定端口上的redis服务
redis-cli -h ip地址 -p 端口:连接指定ip主机上的指定端口的redis服务

退出客户端

:在客户端执行命令:exit或者quit

redis的基本知识

1)测试redis服务的性能:
        redis-benchmark
2)查看redis服务是否正常运行:
        ping     如果正常---pong
3)查看redis服务器的统计信息:
        info 查看redis服务的所有统计信息
        info [信息段] 查看redis服务器的指定的统计信息 如:info Replication
4)redis的数据库实例:作用类似于mysql的数据库实例,redis中的数据库实例只能由redis服务来创建和维护,开发人员不能修改和自行创建数据库实例;默认情况下,redis会自动创建16个数据库实例,并且给这些数据库实例进行编号,从0到15,使用时通过编号使用数据库;可以通过配置文件,指定redis自动创建的数据库个数;redis的每一个数据库实例本身占用的存储空间很少,所以也不会造成存储空间的太多浪费。
默认情况下,redis客户端连接的是0的数据库实例;可以使用select index切换数据库实例
5)查看当前数据库实例中所有key的数量:dbsize
6)查看当前数据库中实例中所有的key:keys *
7)清空数据库实例:flushdb
8)清空所有数据库实例:flushall
9)查看redis中的配置信息:config get *
        查看redis中的指定的配置信息:config get parameter

Redis的五种数据结构:

程序是用来处理数据的,Redis是用来存储数据的,程序处理完的数据要存储到redis中,不同特点的数据要存储在Redis中不同类型的数据结构中。
  字符串: String    单key:单value
   list列表:list    单key:多有序value
   set集合:set    单key:多无序value
   pojo:      hash    单key:对象(属性:值)
                    zset    单key:多有序value

redis中的操作命令:

1)redis中有关key的操作命令:
        a)查看数据库中的key:keys pattern |->*:匹配0个或者多个字符;|->?:匹配1个字符; |->[]:匹配[]里边的一个字符
            keys *:查看数据库中所有的key
            keys k*:查看数据库中所有以k开头的
            keys h*o:查看数据库中所有以h开头、以o结尾的key
            keys h[abc]llo:查看数据库中所有以h开头以llo结尾,并且h后边只能取abc中的一个字符的key
        b)判断key在数据库中是否存在:exists key 如果存在,则返回1;如果不存在,则返回0	exists key [key key ....]返回值是存在key的数量
            exists k1   
            exists k1 k2 k3 hello
        c)移动指定key到指定的数据库实例:move key index
            move k 1
        d)查看指定的 key的胜率生存时间    :ttl key ;|->如果key没有设置生存时间,返回-1;|->如果key不存在,返回-2
            ttl k1
        e)设置key的最大生存时间:expire key seconds
                expire k2 20
        f)查看指定key的数据类型:type key
            type k1
        g)重命名key:rename key newkey
            rename hello k2
        h)删除key:del key     删除指定的key, |->返回值是实际删除的key的数量
2)redis中有关String类型数据的操作命令:
		a)将string类型的数据保存到redis中:set 键 值
        set zsname zhangsan
		b)从redis中获取string类型的数据:get 键
        get zsname
		c)追加字符串:append key value;|->返回追加之后的字符串长度;|->如果key不存在,则新创建一个key,并且把value值设置为value
        set phone 138999
        append phone 8888
		d)获取字符串数据的长度:strlen key
    strlen phone
		e)将字符串数值进行加1运算:incr key ;|->返回加1运算之后的数据;|->如果key不存在,首先设置一个key,值初始化为0,然后进行incr运算;|->要求key所表示value必须是数值,否则,报错
    incr zsage
    incr age
 	f)将字符串数值进行减1运算:decr key; |->返回减1运算之后的数据;|->如果key不存在,首先设置一个key,值初始化为0,然后进行decr运算 ;|->要求key所表示value必须是数值,否则,报错
	g)将字符串数值进行offset运算:incrby key offset;|->返回加offset运算之后的数据 ;|->如果key不存在,首先设置一个key,值初始化为0,然后进行incrby运算;|->要求key所表示value必须是数值,否则,报错
    incrby zsage 10
	h)将字符串数值进行减offset运算:decrby key offset; |->返回减offset运算之后的数据;|->如果key不存在,首先设置一个key,值初始化为0,然后进行incrby运算;|->要求key所表示value必须是数值,否则,报错

	i)获取字符串key中的子字符串:getrange key startIndex endIndex; |->下标自左至右,从0开始,以后往后,最后一个字符的下标是字符串长度-1;闭区间截取;|->字符串中                                                                                                                                                                            每一个下标也可以是负数 负下标表示自右至左,从-1开始依次往前,最右边 一个字符的下标是-1
    getrange zsname  2    5    angs
    j)用value覆盖从下标为startIndex开始的字符串,能覆盖几个字符就覆盖几个字符:setrange key                             startIndex value
        setrange zsname 5 xiaosan
    k)设置字符串数据的同时,设置它最大生命周期setex key second value
        setex k1 20 v1
    l)设置string类型的数据value到redis数据库中,当key不存在时设置成功,否则,则放弃设置setnx 
    m)批量将string类型的数据设置到redis中:mset 键1 值1 键2 值2.。。
    n)批量从redis中获取string类型的数据:mget 键1 键2 键3
    o)批量设置string类型的数据value到redis数据库中,当所有key都不存在时设置成功,否则全部放弃设置 msetnx 键1 值1 键2 值2.。
    3)redis中有关list类型数据的操作命令:单key-多有序value
    一个key对应多个value:多个value之间有顺序,最左侧是表头,最右侧是表尾;多个value之间有顺序,最左侧是表头,最右侧是表尾
    每一个元素都有下标,表头元素的下标是0,依次往后排序,最后一个元素下标是列表长度-1
    每一个元素的下标可以用负数表示,负下标表示从表尾计算,最后一个元素下标用-1表示
    元素在列表中的顺序或者下标由放入的顺序来决定
	a)将一个或者多个值依次插入到列表的表头(左侧):lpush key value    [value value...]
        lpush list01 1 2 3 4
    b)获取指定列表中的元素:lrange key startIndex endIndex
	c)将一个或者多个值一次插入到列表的表尾(右侧):rpush key value [value value ...]
	d)从指定列表中移除并且返回表头元素:lpop key
	e)从指定列表中移除并返回表尾元素:rpop key
	f)获取指定列表中指定下标的元素:lindex key index
    lindex list01 2 
	g)获取指定列表的长度:llen key
	h)移根据count值除指定1列表中跟value相等的数据:lrem key count value; |->count>0:从列表的左侧移除count跟value相等的数据;|->count<0:从列表的右侧移除count跟value相等的数据;|->count=0:从列表中移除所有跟value相同数据

        lpush list03 a a b c a d  e a b b 结果: b b a e d a c b a a
        lrem list03 2 a 结果: b b e d c b a a
	i)截取指定列表中指定下标区间的元素组成新的列表,并且赋值给key:ltrim key startIndex endIndex

 	j)将指定列表中指定下标的元素设置为指定值:lset key index value
	l)将 value插入到指定列表中位于pivot元素之前/之后的位置 :insert key before/after pivot vlaue
4)redis中有关set类型数据的操作命令:单key-多无序value,一个key对应多个value,value之间没有顺序,并且不能重复,通过业务数据直接操作集合
	a)将一个或者多个元素添加到指定的集合中:sadd key value [value value...]
    *如果元素已经存在,则会忽略
    *返回成功加入的元素的个数
    sadd set 01 a b c
	 b)获取指定集合中所有的元素:smembers key
        smemebers set01
	c)判断指定元素在集合中是否存在:sismember key member
    *存在,返回1
    *不存在,返回0
    sismember set01 f
	d)获取指定集合的长度:scard key
    scard set01
	e)移除指定集合中一个或者多个元素:srem key member [member ...]
    *不存在的元素会被忽略
    *返回成功成功移除的个数
    srem set01 b d m
	f)随机获取指定集合中的一个元素:srandmember key [count] |->count>0:随机获取的多个元素之间不能重复; |->count<0:随机获取的多个元素之间可能重复
	g)从指定集合中随机移除一个或者多个元素:spop key [count]
	h)将指定集合中的指定元素移动到另一个元素:smove source dest member
	i)获取一个集合中有、但是其他集合都没有的元素组成的新集合 sdiff  key key key...
	j)获取所有指定集合中都有的元素组成的新集合 (交集):sinter key key ....
	k)获取所有指定集合中所有元素组成的大集合(并集):sunion key key [key key ...]
	5)redis中有关hash类型的操作命令:单key:field-value,field-value 。。。
	a)将一个或者多个field-value键值对设置到哈希表中:hset key filed value1 [field2 value2   ....]
        *如果key field已经存在,value会把以前的值覆盖
    hset stu1001 id 1001 name zhangsan address qinglianwan
	b)获取指定哈希表中指定field的值:hget key field
    hget stu1001 id
    hget stu1001 name
c)批量将多个field-value对设置到哈希表中:hmset key filed1 value1 [fild2 value2....]
d)批量获取指定哈希表中的field的值:hmget key field1[field2 field3  ...]
e)获取指定哈希表中所有的field和value:hgetall key
        hgetall stu1001
f)从指定哈希表中删除一个或者多个field:hdel key field1 [field2 field3 ...]
    hdel stu1001 name age
g)获取指定哈希表中所有的filed个数:hlen key
    hlen stu1001
    hlen stu1002
h)判断指定哈希表中是否存在某一个field:hexists key field
        *有返回1
        *无返回0
    hexists stu1001 name
i)获取指定哈希表中所有的field列表:hkeys key
    hkeys stu1001
    hkeys stu1002
j)获取指定哈希表中所有的value列表:hvals key
    hvals stu1001
k)对指定哈希表中指定field值进行整数加法运算:hincrby key field int
    hincrby stu1001 age 5    
l)对指定哈希表中指定field值进行浮点数加法运算:hincrbyfloat key field float
    hset stu1001 score 80.5
m)将一个field-value对设置到哈希表中,当key-field已经存在时,则放弃设置;否则,设置file-valuehsetnx key field value
    field value
        hsetnx stu1001 age 30
        6)redis中有关zset类型数据的操作命令:有序集合;本质上是集合,所有元素不能重复;每一个元素都关联一个分数,redis会根据分数对元素进行自动排序;分数可以重复;既然有序集合中每一个元素都有顺序,那么也都有下标;有序集合中元素的排序规则与列表中中元素的排序规则不一样
a)将一个或者多个member及其score值加入有序集合:`zadd key score member    [score member ...]`
zadd zset01 88 z1 86 z2 20 z3
b)获取指定有序集合中指定下标区间的元素:`zrange key startIndex endIndex [withscore]`
zrange zset01 0 -1
c)获取指定有序集合指定分数区间(闭区间)的元素:`zrangebyscore key min max [withscores]`
d)删除指定有序集合中一个或者多个元素:`zrem key member [member...]`
zrem zset01 z3 z4
e)获取指定有序集合中所有元素的个数:`zcard key`
f)获取指定有序集合中分数在指定区间内的元素的个数:`zcount key min max`
g)获取指定有序集合中指定元素的排名(排名从0开始):`zrank key member`
h)获取指定有序集合中指定元素的分数:`zscore key member`
zscore zset01 z4
i)获取指定有序集合中指定元素的排名(按照分数从大到小的排名):`zrevrank key member`