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
A)set 键 "值" 设置键值 若键已经存在会覆盖
127.0.0.1:6379> set name machong
OK
127.0.0.1:6379>
B)get 键 得到键值
127.0.0.1:6379> get name
"machong"
127.0.0.1:6379>
C)setnx 键 值 当该键不存在时设置值,若键存在返回0表示失败(防止覆盖)
127.0.0.1:6379> setnx name ma
(integer) 0
127.0.0.1:6379> setnx name1 ma
(integer) 1
D)setex 键 [有效时间] 值
设置一个指定有效期的键和值(单位秒)。不写有效时间则表示永久有效,等价于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功能。集合不允许有重复值。
A) sadd 键 值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部署与基本操作的主要内容,如果未能解决你的问题,请参考以下文章