基本操作

文章目录
  1. 1. 安装步骤
  2. 2. 服务启动与关闭
  3. 3. cluster集群搭建
  4. 4. string基本操作
  5. 5. list基本操作
  6. 6. hash基本操作
  7. 7. set基本操作
  8. 8. zset基本操作
  9. 9. sort命令
  10. 10. scan命令
安装步骤
1.安装相关库gcc  
# yum install gcc
2.下载安装包
# wget http://download.redis.io/releases/redis-3.0.0.tar.gz
3.解压安装包
# tar zxvf redis-3.0.0.tar.gz
4.执行make命令
# cd redis-3.0.0/src
# make
5.将src目录下的相关文件拷贝到/usr/redis文件夹下
# mkdir /usr/redis
# cp redis-server /usr/redis
# cp redis-benchmark /usr/redis
# cp redis-cli /usr/redis
# cp redis.conf /usr/redis
6.为redis-server和redis-cli创建软链接
# ln -s /usr/redis/redis-server /usr/bin/redis-server
# ln -s /usr/redis/redis-cli /usr/bin/redis-cli
服务启动与关闭
# 服务启动
1.启动redis
# redis-server /usr/redis/redis.conf
2.若是需要在后台启动,可以修改redis.conf文件中的daemonize为yes

# 服务关闭
1. 强制结束程序。使用kill -9 进程的pid,强行终止Redis进程可能会导致redis持久化丢失。
2. 正确停止redis的方式是向redis发送shutdown命令(关闭默认端口)。 # redis-cli shutdown
cluster集群搭建
开启集群
修改配置文件redis.conf中的cluster-enabled yes
加入到集群
127.0.0.1:6379> cluster meet 192.168.25.150 6379
分配hash槽
[root@localhost redis]# redis-cli -h 192.168.25.147 -p 6379 cluster addslots {0..5000}
string基本操作
#单个操作   
set name value(设置某个key-value)
get name(获取某个key)
exists name(判断某个key是否存在)
del name(删除某个key)
expire name seconds(给某个key设置expire)
setex name seconds value(设置key的时候同时设置expire)
setnx name value(不存在存储,存在不存储)
#批量操作
mset name1 value1 name2 value2(批量插入)
mget name1 name2(批量获取)
#特殊操作
incr key(针对值为整数的情况,value加1)
incrby key 5(针对值为整数的情况,value加5)

# 使用场景
保存一些JSON序列化的用户对象信息,使用时通过JSON反序列化,一次性的获取一整个用户对象,消耗网络流量。优点是存储消耗低于hash。
list基本操作
#基本操作(普通操作)
rpush key value1 value2 value3(存储元素)
llen key(获取列表元素个数)
lpop key(从左边弹出,非阻塞)
rpop key(从右边弹出,非阻塞)
blpop key timeout(从左边弹出,阻塞,timeout单位为秒)
brpop key timeout(从右边弹出,阻塞,timeout单位为秒)
# 基本操作(慢操作)
lindex key index(获取某个位置上的value)
ltrim key start_index end_index(保留start_index到end_index区间内的值,index可为负数,-1表示最后一个)
lrange key start_index end_index(返回start_index到end_index区间内的值)

# 使用场景
异步队列(rpush lpop)
栈(rpush rpop)
hash基本操作
#基本操作
hset key filed value(给某个key的字典中存储一个key-value)
hgetall key(查看key-value,key和value间隔出现)
hlen books(查看key中存储的key-value个数)
hget key filed(获取某个key下filed的value值)
hmset key filed1 value1 filed2 value2(批量设置key-value)
hincrby key filed 1(给某个key的field字段的value加1)

#使用场景
存储用户信息->针对用户信息中的每个字段单独存储,获取用户信息时可以对部分字段单独获取,节省网络流量。但是缺点是存储消耗要高于字符串。
set基本操作
#基本操作
sadd key value(集合中添加一个元素)
sadd key value1 value2(集合中添加多个元素)
smembers key(列出key下面的value列表)
sismember key value(查询key下面是否存在value)
scard key(获取key的长度)
spop key(弹出一个元素)

#使用场景
可以用来存储中将用户的id,因为有去重功能,所以可以保证同一个用户不会中将两次。
zset基本操作
#基本操作
zadd key score value(添加一个value)
zrange key 0 -1(获取key元素列表,按照score排序列出)
zrevrange key 0 -1(获取key元素列表,按照score逆序列出)
zcard key(返回key中元素个数)
zscore key value(返回某个key的score)
zrangebyscore key score1 score2(根据分值区间遍历zset)
zrangebyscore key -inf score withscore (根据分值区间 (-∞, score] 遍历 zset,同时返回分值。inf 代表 infinite,无穷大的意思。)

#使用场景
可以用来存储粉丝列表,value值是粉丝的用户id,score是关注时间。可以对粉丝列表按照关注时间进行排序。
可以用来存储学生的成绩,value值是学生的id, score是考试成绩。可以对成绩按照分数进行排序,就可以获取到它的名次。
sort命令
# redis的sort命令可以对列表键 集合键或者有序集合键的值进行排序

############## 最简单的排序 sort #########
# 插入元素
redis> rpush numbers 5 3 1 4 2
(integer) 5

# 按照插入顺序排列的列表元素
redis>lrange numbers 0 -1
# 元素的输出顺序为 "5" "3" "1" "4" "2"

# 按值从小到大有序排列的列表元素(默认升序排列asc)
redis> sort numbers
# 元素的输出顺序为 "1" "2" "3" "4" "5"

# 按值从大到小有序排列的列表元素
redis> sort numbers desc
# 元素的输出顺序为 "5" "4" "3" "2" "1"

############ 使用 sort和alpha选项对字符串进行排序########
# 插入元素
reids> sadd alphabet a b c d e f g

# 乱序排列的集合元素
redis> smembers alphabet
# 输出顺序为 "d" "a" "c" "b" "g" "e" "f"

# 集合元素排序,使用alpha,asc升序排列
redis> sort alphabet alpha
# 输出顺序为 "a" "b" "c" "d" "e" "f" "g"

# 集合元素排序,使用alpha,desc降序排列
redis> sort alphabet alpha desc
# 输出顺序为 "g" "f" "e" "d" "c" "b" "a"

############ 使用sort和by选项对元素排序 ############
# 插入元素
redis> zadd test-result 3.0 jack 3.5 peter 4.0 tom
(integer) 3

# 普通输出,按照元素的分值排序
redis> zrange test-result 0 -1
# 输出顺序为 "jack" "peter" "tom"

# 为各个元素设置序号
redis> mset peter_number 1 tom_number 2 jack_number 3
ok

# 以序号为权重,对集合中的元素进行排序
redis> sort test-result by *_number
# 输出顺序为 "peter" "tom" "jack"
scan命令
// scan命令的使用
// scan命令提供了三个参数,第一个参数是cursor整数值,第二个是key的正则模式,第三个是遍历的limit hint。第一次遍历时,cursor值为0,然后将返回结果中第一个整数值作为下一次遍历的cursor。一直遍历到返回的cursor值为0时结束。

// 可以同过java的jedis客户端插入一些key
int count = 10000;
Jedis jedis = new Jedis("192.168.25.150", 6379);
for (int i = 0; i < count; i++) {
jedis.set("key" + i, i + "");
}

// 下面是redis-cli操作
127.0.0.1:6379> scan 0 match key99* count 1000
1) "10904"
2) 1) "key9987"
2) "key9924"
3) "key9992"
4) "key9941"
5) "key9901"
6) "key9945"
7) "key9984"
8) "key9903"
127.0.0.1:6379> scan 10904 match key99* count 1000
1) "14028"
2) 1) "key9989"
2) "key992"
3) "key9997"
4) "key9968"
5) "key996"
6) "key9958"

//下面是java客户端操作代码段
String cursor = "0";
ScanParams scanParams = new ScanParams();
scanParams.match("key99*");
scanParams.count(1000);
while (true) {
ScanResult<String> result = jedis.scan(cursor, scanParams);
List<String> resultList = result.getResult();
for (String resultStr : resultList) {
System.out.print(resultStr + "\t");
}
System.out.println("\n--------------");
String stringCursor = result.getStringCursor();
// 当游标为再次为0时,表示已经遍历完毕,直接跳出循环
if (stringCursor.equals("0")) {
break;
} else {
cursor = stringCursor;
}
}