Redis部署与基本操作

Posted 马冲的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis部署与基本操作相关的知识,希望对你有一定的参考价值。

1.安装

1)不指定安装位置,则会把redis的可执行文件安装到  redis-2.8.6/src/目录下

[[email protected] ~]# ls

anaconda-ks.cfg  httpd-2.2.9     install.log         redis-2.8.6.tar.gz  

[[email protected] ~]# tar xzf redis-2.8.6.tar.gz && cd redis-2.8.6 && make

[[email protected] ~]# make PREFIX=/usr/local/redis install

#指定安装位置,如果没有指定安装位置PREFIX=/usr/local/redis,则make install会把redis 安装到/usr/local/bin/目录下

[[email protected] ~]# mkdir /usr/local/redis/etc

[[email protected] ~]# cp /root/redis-2.8.6/redis.conf /usr/local/redis/etc/

 

2)修改配置文件

[[email protected] redis]# vi /usr/local/redis/etc/redis.conf

daemonize no 改为   daemonize yes     #后台启动

端口 6379

3)启动时要指定配置文件才可以正常启动-------路径/redis-server  配置文件

[[email protected] bin]# cd /usr/local/redis/bin/ &&

 ./redis-server  /usr/local/redis/etc/redis.conf

4)关闭redis

A)[[email protected] ~]# /usr/local/redis/bin/redis-cli shutdown

B)[[email protected] ~]# pkill  -9 redis

5)#客户端连接

A)

-h  IP 连接指定的redis服务器

-p  6379: 指定redis服务器的端口

-a  密码: 使用密码登录

-n 数据库号: 指定连接哪个数据库

B)启动客户端连接[[email protected] redis]# /usr/local/redis/bin/redis-cli      

C)退出 quit

D)连接库启动-------默认16个库0-15

[[email protected] bin]# /usr/local/redis/bin/redis-cli -n 1

127.0.0.1:6379[1]>

 

2.配置文件

1)[[email protected] redis]# vi /usr/local/redis/etc/redis.conf

2)如果以后台进程运行的话,就需要指定pid,你可以在此自定义redis.pid文件的位置。

    pidfile /var/run/redis.pid    ----通过进程id判断服务是否启动运行

  3)#接受连接的端口号,如果端口是0则redis将不会监听TCP socket连接

port 6379

  4)#连接超时时间,单位秒。(0 to disable)?

timeout 300 ----默认是0

 

 

5)#日志级别,默认是verbose(详细),各种日志级别:

#notice:比较适合生产环境

6)日志位置

# Specify the log file name. Also the empty string can be used to force

# Redis to log on the standard output. Note that if you use standard

# output for logging but daemonize, logs will be sent to /dev/null

logfile "/usr/local/redis/redis.log" 日志保存位置

 

7)设置数据库数目。默认的数据库是DB 0。------默认启用了16个库 0-15

databases 16

 

3.Redis的数据类型

1共计5种类型:string(字符串)、hash(哈希表) list(双向队列)、set(集合)和zset(有序集合)

2 String(子串类型)----一个Key对应一个Value

   Aset 键  ""   设置键值 若键已经存在会覆盖

127.0.0.1:6379> set name machong

OK

127.0.0.1:6379>

   Bget 键 得到键值

127.0.0.1:6379> get name

"machong"

127.0.0.1:6379>

   Csetnx 键 值 当该键不存在时设置值,若键存在返回0表示失败(防止覆盖

127.0.0.1:6379> setnx name ma

(integer) 0

127.0.0.1:6379> setnx name1 ma

(integer) 1

   Dsetex 键 [有效时间] 值

 设置一个指定有效期的键和值(单位秒)。不写有效时间则表示永久有效,等价于set

127.0.0.1:6379> setex test 30 11111

OK

127.0.0.1:6379> ttl test  ttl 键--以秒为单位,返回给定 key 的剩余生存时间

(integer) 13--------------以秒为单位,返回 key 的剩余生存时间

127.0.0.1:6379> ttl test---当 key 不存在时,返回 -2

(integer) -2

127.0.0.1:6379>

127.0.0.1:6379> get test

(nil)

127.0.0.1:6379> ttl name

(integer) -1----------------当 key 存在但没有设置剩余生存时间时,返回 -1 

127.0.0.1:6379>

    E) setrange 键 位置 子字串   替换子字符串 (替换长度由子子串长度决定)

127.0.0.1:6379> set str abcdef

OK

127.0.0.1:6379> setrange str 5 a

(integer) 6

127.0.0.1:6379> get str

"abcdea"

127.0.0.1:6379>

#将str键对应值的第5个位置开始替换(字符串位置从0开始计算)

    F) mset 键1 值1 键2 值2 键3 值3 ....

批量设置键和值,成功则返回ok

127.0.0.1:6379> mset name machong age 23 sex man

OK

127.0.0.1:6379>

    G) mget 键1 键2 键3....

批量获取值

127.0.0.1:6379> mget name age sex

1) "machong"

2) "23"

3) "man"

127.0.0.1:6379>

    H) msetnx 键1 值1 键2 值2 键3 值3 ....

批量设置不存在的键和值,成功则返回ok

127.0.0.1:6379> msetnx name xiaofei age 20 sex nv

(integer) 0

127.0.0.1:6379>

127.0.0.1:6379> msetnx name2 xiaofei age2 20 sex2 nv

(integer) 1

127.0.0.1:6379>

127.0.0.1:6379> mget name2 age2 sex2

1) "xiaofei"

2) "20"

3) "nv"

127.0.0.1:6379>

    I) getset 键 新值

获取原值,并设置新值

127.0.0.1:6379> getset name2 xiaofeifei

"xiaofei"

127.0.0.1:6379> get name2

"xiaofeifei"

127.0.0.1:6379>

   J) getrange 键 0 4  

获取指定范围的值(获取指定0到4位置上的值,字符串位置从0开始计算)

127.0.0.1:6379> getrange name2 4 6

"fei"

127.0.0.1:6379>    

   K) incr 键  

指定键的值做加1操作,返回加后的结果(只能加数字)。

127.0.0.1:6379> incr age

(integer) 24

127.0.0.1:6379> incr age

(integer) 25

127.0.0.1:6379>

   L) incrby 键 m    

//其中m可以是正整数或负整数

加指定值,键不存在时候会设置键

127.0.0.1:6379> incrby age 10

(integer) 35

127.0.0.1:6379>

127.0.0.1:6379> incrby age -15

(integer) 20

127.0.0.1:6379>

   M) decr 键

指定键的值做减1操作,返回减后的结果。

127.0.0.1:6379> decr age

(integer) 19

127.0.0.1:6379>

   N) decrby 键 n

//其中n可以是正整数或负整数

设置某个键减上指定值

127.0.0.1:6379> decrby age 4

(integer) 15

127.0.0.1:6379> decrby age -5

(integer) 20

127.0.0.1:6379>

   0)append  键 追加字串

给指定key的字符串追加value,返回新字符串值的长度

127.0.0.1:6379> append name2 " have a hot body!"

(integer) 27

127.0.0.1:6379> get name2

"xiaofeifei have a hot body!"

127.0.0.1:6379>   

   P) strlen 键名

strlen求一个键长度

127.0.0.1:6379> strlen name2

(integer) 27

127.0.0.1:6379>

Q)del命令:删除一个键

127.0.0.1:6379> set test aaaa

OK

127.0.0.1:6379> get test

"aaaa"

127.0.0.1:6379> del test

(integer) 1

127.0.0.1:6379> keys *

1) "age2"

2) "name1"

3) "str"

4) "sex2"

5) "name2"

6) "name"

7) "sex"

8) "age"

127.0.0.1:6379>

3) hashs类型

#注意:redis中没有表概念,所有的数据都存入键中。

string键类型:所有的值(可以是任何数据类型)都保存在一个键当中,放在一个内存块中

hashs键类型:所有的值也都保存在一个键当中,只是放在不同的内存块中,每个块称作字段

 

  A)hset key field value

设置一个键,在键中保存字段和值

    hset 哈希集(键) 字段 值

127.0.0.1:6379> hset user1 name xiaoqiang

(integer) 1

127.0.0.1:6379> keys *

1) "age2"

2) "name1"

3) "str"

4) "sex2"

5) "name2"

6) "name"

7) "user1"

8) "sex"

9) "age"

127.0.0.1:6379>

  B)>hsetnx  键  字段  值

设置一个键中,不存在的字段和值。如果字段存在则报错(成功返回1,失败返回0)  

   hget 键 字段  获取键中的一个指定字段的值

127.0.0.1:6379> hsetnx user1 name xiaoyou

(integer) 0

127.0.0.1:6379> hget user1 name

"xiaoqiang"

127.0.0.1:6379>

 

  C)hmset  键  字段1  值1  字段2  值2   在一个键中,批量设置字段

hmget 键 字段1 [字段2]  获取键中一个或多个字段的值

127.0.0.1:6379> hmset user2 name youyou age 23 sex man

OK

127.0.0.1:6379> hmget user2 name age sex

1) "youyou"

2) "23"

3) "man"

127.0.0.1:6379>

 

   D) hexists :判断指定的字段是否存在于键中

127.0.0.1:6379> HEXISTS user2 nam

(integer) 0---------------------------不存在

127.0.0.1:6379> HEXISTS user2 name

(integer) 1---------------------------存在

127.0.0.1:6379>

   E) hlen :获取键中的字段数量

127.0.0.1:6379> hlen user2

(integer) 3

127.0.0.1:6379>

   F)hkeys :获取键中的所有字段名

127.0.0.1:6379> hkeys user2

1) "name"

2) "age"

3) "sex"

127.0.0.1:6379>

   G)hvals:获取键中所有字段的值

127.0.0.1:6379> HVALS user2

1) "youyou"

2) "23"

3) "man"

127.0.0.1:6379>

   H) hgetall :获取键中的所有字段和值

127.0.0.1:6379> hgetall user2

1) "name"

2) "youyou"

3) "age"

4) "23"

5) "sex"

6) "man"

127.0.0.1:6379>

   I)hincrby:将键中指定字段的值,增加指定的数字

127.0.0.1:6379> hincrby user2 age 5 ----只有数字的值才可增加

(integer) 28

127.0.0.1:6379>

 

             J)hdel 键 字段1 字段2

  删除键中的一个或多个字段

127.0.0.1:6379> hdel user2 age sex

(integer) 2

127.0.0.1:6379> HGETALL user2

1) "name"

2) "youyou"

127.0.0.1:6379>

K)删除一个键,还是要使用del命令

127.0.0.1:6379> del user2

(integer) 1

127.0.0.1:6379> HGETALL user2

(empty list or set)

127.0.0.1:6379>

4) list类型(双向链表结构)

List是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等,操作中key理解为链表的名字。Redis的list类型其实就是一个每个子元素都是string类型的双向链表。列表允许有重复值

 

A)lpush 键 值1 [值2]

从队列左边向队列写入一个或多个值(认为队列的左面为队列头,右边为队列尾)

 

lrange 键 起始下标 终止下标

从队列中获取指定的返回值(从队列左边向右获取)

 

下标:0代表队列中第一个元素,1代表第二个元素,依次类推

-1代表队列中最后一个元素,-2代表倒数第二个元素

127.0.0.1:6379> lpush list 1 2 3 4 5 6

(integer) 6

127.0.0.1:6379> LRANGE list 0 -1

1) "6"----------是从左面写入队列的最后一个值,所以在队列的开头

2) "5"

3) "4"

4) "3"

5) "2"

6) "1"-----------是从左面写入队列的第一个值,所以直接放到了队列尾

127.0.0.1:6379>

 

127.0.0.1:6379> LRANGE list -5 3

1) "5"----------从后面数第5个元素

2) "4"

3) "3"---------从左边数下标为3的元素

127.0.0.1:6379>

B)rpush 键 值1 [值2]

从队列右边向队列写入一个或多个值

127.0.0.1:6379> rpush list1 1 2 3 4 5 6

(integer) 6

127.0.0.1:6379> LRANGE list1 0 -1

1) "1"

2) "2"

3) "3"

4) "4"

5) "5"

6) "6"

127.0.0.1:6379>

C)linsert  键  before|after  原值  新值

在队列中指定元素之前或之后插入新值

127.0.0.1:6379> linsert list1 before 3 abc

(integer) 7

127.0.0.1:6379> LRANGE list1 0 -1

1) "1"

2) "2"

3) "abc"

4) "3"

5) "4"

6) "5"

7) "6"

127.0.0.1:6379>

 

D)lset  键  下标  新值

给队列中指定元素设定新值

127.0.0.1:6379> lset list1 0 11

OK

127.0.0.1:6379> LRANGE list1 0 -1

1) "11"

2) "2"

3) "abc"

4) "3"

5) "4"

6) "5"

7) "6"

127.0.0.1:6379>

E)lrem  键  n  指定值

从队列中删除n个值为“指定值”的元素

n > 0 从队列头向尾删除n个元素

n < 0 从队列尾向头删除n个元素

n = 0 删除所有值为“指定值”的元素

127.0.0.1:6379> rpush list3 a 1 a 2 a 3 a 4 a 5 a 6

(integer) 12

127.0.0.1:6379> LRANGE list3 0 -1

 1) "a"

 2) "1"

 3) "a"

 4) "2"

 5) "a"

 6) "3"

 7) "a"

 8) "4"

 9) "a"

10) "5"

11) "a"

12) "6"

127.0.0.1:6379> lrem list3 -2 a

(integer) 2

127.0.0.1:6379> LRANGE list3 0 -1

 1) "a"

 2) "1"

 3) "a"

 4) "2"

 5) "a"

 6) "3"

 7) "a"

 8) "4"

 9) "5"

10) "6"

127.0.0.1:6379>

 

127.0.0.1:6379> lrem list3 0 a

(integer) 4

127.0.0.1:6379> LRANGE list3 0 -1

1) "1"

2) "2"

3) "3"

4) "4"

5) "5"

6) "6"

127.0.0.1:6379>

F)ltrim  键  起始下标  结束下标

修剪队列,让队列只保留指定指定范围内的元素

127.0.0.1:6379> rpush list4 1 2 3 4

(integer) 4

127.0.0.1:6379> LRANGE list4 0 -1

1) "1"

2) "2"

3) "3"

4) "4"

127.0.0.1:6379> ltrim list4 1 2

OK

127.0.0.1:6379> LRANGE list4 0 -1

1) "2"

2) "3"

127.0.0.1:6379>

G)lpop  键

从指定的队列左面移除一个值

127.0.0.1:6379> LRANGE list1 0 -1

1) "11"

2) "2"

3) "abc"

4) "3"

5) "4"

6) "5"

7) "6"

127.0.0.1:6379> lpop list1

"11"

127.0.0.1:6379> LRANGE list1 0 -1

1) "2"

2) "abc"

3) "3"

4) "4"

5) "5"

6) "6"

127.0.0.1:6379>

H)rpop  键

从指定队列的右边移除一个值

127.0.0.1:6379> rpop list1

"6"

127.0.0.1:6379> LRANGE list1 0 -1

1) "2"

2) "abc"

3) "3"

4) "4"

5) "5"

127.0.0.1:6379>

I)rpoplpush  源队列  目标队列

移除源队列的最后一个元素,并把该元素写入目标队列

127.0.0.1:6379> LRANGE list1 0 -1

1) "2"

2) "abc"

3) "3"

4) "4"

5) "5"

127.0.0.1:6379> LRANGE list2 0 -1

(empty list or set)

127.0.0.1:6379> LRANGE list3 0 -1

1) "1"

2) "2"

3) "3"

4) "4"

5) "5"

6) "6"

127.0.0.1:6379> RPOPLPUSH list1 list3

"5"

127.0.0.1:6379> LRANGE list3 0 -1

1) "5"

2) "1"

3) "2"

4) "3"

5) "4"

6) "5"

7) "6"

127.0.0.1:6379>

J)lindex  键  下标 获取队列中指定下标元素的值

127.0.0.1:6379> LRANGE list3 0 -1

1) "5"

2) "1"

3) "2"

4) "3"

5) "4"

6) "5"

7) "6"

127.0.0.1:6379> lindex list3 0

"5"

127.0.0.1:6379>

K)llen  键   获得队列的长度

127.0.0.1:6379> llen list3

(integer) 7

127.0.0.1:6379>

 

 

  5) sets类型和操作

Set是集合,它是string类型的无序集合。对集合我们可以取并集、交集、差集。通过这些操作我们可以实现社交网站中的好友推荐和blog的tag功能。集合不允许有重复值。

 

Asadd  键  值1[值2]

添加一个或多个元素到集合中

127.0.0.1:6379> sadd jihe aa bb cc dd

(integer) 4

127.0.0.1:6379>

B) smembers  键    获取集合里面所有的元素

127.0.0.1:6379> smembers jihe

1) "dd"

2) "bb"

3) "aa"

4) "cc"

127.0.0.1:6379>

C) srem  键  值1[值2]   从集合中删除指定的一个或多个元素

(删除键,依然使用“del 键” 命令)

127.0.0.1:6379> srem jihe aa bb

(integer) 2

127.0.0.1:6379> smembers jihe

1) "dd"

2) "cc"

127.0.0.1:6379>

 

D) spop  键   随机从集合中删除一个元素,并返回

127.0.0.1:6379> smembers jihe

1) "cc"

2) "ff"

3) "dd"

4) "gg"

5) "ee"

6) "tt"

7) "rr"

127.0.0.1:6379> spop jihe

"ee"

127.0.0.1:6379> spop jihe

"rr"

127.0.0.1:6379>

E) srandmember  键  值 随机返回集合中一个元素,但不删除

127.0.0.1:6379> SRANDMEMBER jihe

"gg"

127.0.0.1:6379> SRANDMEMBER jihe

"ff"

F) scard  键 获取集合里面元素个数

127.0.0.1:6379> scard jihe

(integer) 5

127.0.0.1:6379>

G) sismember  键  值

确定一个指定的值是否是集合中的元素

127.0.0.1:6379> smembers jihe

1) "ff"

2) "dd"

3) "gg"

4) "cc"

5) "tt"

127.0.0.1:6379> SISMEMBER jihe ii

(integer) 0

127.0.0.1:6379> SISMEMBER jihe tt

(integer) 1

127.0.0.1:6379>

H) sdiff  集合1  集合2         返回集合1与集合2的差集。以集合1为主

127.0.0.1:6379> sadd jihe1 1 2 3 4

(integer) 4

127.0.0.1:6379> sadd jihe2  2 3 4 5

(integer) 4

127.0.0.1:6379> sdiff jihe1 jihe2

1) "1"

127.0.0.1:6379>

I) sdiffstore  新集合  集合1  集合2 

返回集合1和集合2的差集,并把结果存入新集合

127.0.0.1:6379> sdiffstore xinjihe jihe1 jihe2

(integer) 1

127.0.0.1:6379> SMEMBERS xinjihe

1) "1"

127.0.0.1:6379>

J) sinter  集合1  集合2(jihe1:1 2 3 4;jihe2:2 3 4 5)

获得两个集合的交集

127.0.0.1:6379> sinter jihe1 jihe2

1) "2"

2) "3"

3) "4"

127.0.0.1:6379>

K) sinterstore  新集合  集合1  集合2

获得集合1和集合2的交集,并把结果存入新集合

127.0.0.1:6379> SINTERSTORE xinjihe1 jihe1 jihe2

(integer) 3

127.0.0.1:6379> SMEMBERS xinjihe1

1) "2"

2) "3"

3) "4"

127.0.0.1:6379>

12) sunion  集合1  集合2

获得指定集合的并集

127.0.0.1:6379> sunion jihe1 jihe2

1) "1"

2) "2"

3) "3"

4) "4"

5) "5"

127.0.0.1:6379>

13) sunionstore  新集合  集合1  集合2

获得指定集合的并集,并把结果保存如新集合

127.0.0.1:6379> sunionstore xinjihe3 jihe1 jihe2

(integer) 5

127.0.0.1:6379> SMEMBERS xinjihe3

1) "1"

2) "2"

3) "3"

4) "4"

5) "5"

127.0.0.1:6379>

14) smove  源集合  目标集合  值

将指定的值从源集合移动到目标集合

127.0.0.1:6379> SMOVE jihe1 jihe2 1

(integer) 1

127.0.0.1:6379> SMEMBERS jihe2

1) "1"

2) "2"

3) "3"

4) "4"

5) "5"

127.0.0.1:6379> SMEMBERS jihe1

1) "2"

2) "3"

3) "4"

     127.0.0.1:6379>

 

 

以上是关于Redis部署与基本操作的主要内容,如果未能解决你的问题,请参考以下文章

docker 容器操作应用部署mysql,redis,nginx迁移与备份Dockerfile

运维实战 Redis安装部署与高可用主从切换

Linux安装Redis与部署

Redis 开发与运维Redis Sentinel 哨兵

Redis 开发与运维Redis Sentinel 哨兵

Redis 主从+哨兵安装与部署