欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Redis安装及使用详解

程序员文章站 2022-06-03 09:33:17
推荐在Linux系统上安装,这里我采用CentOS6: Redis采用3.0.0版本,官网下载即可 由于Redis是C语言编写,需要安装gcc(部分Linux自带gcc) 解压安装包: 编译redis源码: 安装: 启动redis: 第一种:不推荐 第二种:使用配置文件 修改daemonize为ye ......

推荐在linux系统上安装,这里我采用centos6:

redis采用3.0.0版本,官网下载即可

由于redis是c语言编写,需要安装gcc(部分linux自带gcc)

yum install gcc-c++

解压安装包:

tar -zxvf redis-3.0.0.tar.gz

编译redis源码:

cd redis-3.0.0
make

安装:

make install prefix=/usr/local/redis

启动redis:

第一种:不推荐

cd /usr/local/redis/bin
./redis-server

第二种:使用配置文件

cd redis-3.0.0
cp redis.conf /usr/local/redis/bin
vi /usr/local/redis/bin/redis.conf

修改daemonize为yes,然后:wq保存

启动:

./redis-server redis.conf

关闭:

./redis-cli shutdown

 

连接redis:redis默认是16个数据库

第一种:直接使用自带客户端连接

./redis-cli -h 127.0.0.1 -p 6379

第二种:使用windows的图形化界面客户端连接(直观)

注意:如果有连接不到但是确定已经开启了redis的情况,需要配置防火墙

 

重点要关注的是第三点:java连接,稍后再说,先来看一看数据类型

 

在自带客户端中进行操作:选择第一个(也就是redis-0)数据库

127.0.0.1:6379> select 0
ok

 

string数据类型:

127.0.0.1:6379> set key value
ok
127.0.0.1:6379> get key
"value"
127.0.0.1:6379> 

 

多条信息存储和获取:

127.0.0.1:6379> mset k1 v1 k2 v2
ok
127.0.0.1:6379> mget k1 k2
1) "v1"
2) "v2"
127.0.0.1:6379> 

 

根据key删除信息:

127.0.0.1:6379> del k1 k2
(integer) 2

 

数值增减:

递增:

127.0.0.1:6379> incr num
(integer) 1
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> incr num
(integer) 3
127.0.0.1:6379> get num
"3"
127.0.0.1:6379> 
127.0.0.1:6379> incrby num 2
(integer) 2
127.0.0.1:6379> incrby num 2
(integer) 4
127.0.0.1:6379> incrby num 2
(integer) 6
127.0.0.1:6379> get num
"6"

递减:

127.0.0.1:6379> decr num
(integer) -1
127.0.0.1:6379> decr num
(integer) -2
127.0.0.1:6379> decr num
(integer) -3
127.0.0.1:6379> get num
"-3"
127.0.0.1:6379> decrby num 3
(integer) -3
127.0.0.1:6379> decrby num 3
(integer) -6
127.0.0.1:6379> decrby num 3
(integer) -9
127.0.0.1:6379> get num
"-9"

 

一些其他命令的示范:

127.0.0.1:6379> set str hello
ok
127.0.0.1:6379> append str " world!"
(integer) 12
127.0.0.1:6379> get str
"hello world!"

 

hash类型:可以理解为hashmap

代替hash类型的方式:将需要保存的信息转换成json字符串

hset命令,插入和更新没有区分

127.0.0.1:6379> hset user username root
(integer) 1
127.0.0.1:6379> hset user password root
(integer) 1

多条插入:

127.0.0.1:6379> hmset user username root password root
ok

当不存在时候赋值:当字段不存在时赋值,存在的话不做任何操作

127.0.0.1:6379> hset user username root
(integer) 1
127.0.0.1:6379> hsetnx user username admin
(integer) 0
127.0.0.1:6379> 

 取hash中的值:

127.0.0.1:6379> hget user username
"root"
127.0.0.1:6379> hmget user username password
1) "root"
2) "123"
127.0.0.1:6379> hgetall user
1) "username"
2) "root"
3) "password"
4) "123"

 删除hash中的字段:

127.0.0.1:6379> hdel user username
(integer) 1
127.0.0.1:6379> hgetall user
1) "password"
2) "123"

hash字段增加数字:

127.0.0.1:6379> hset user age 30
(integer) 1
127.0.0.1:6379> hincrby user age 2
(integer) 32
127.0.0.1:6379> hget user age
"32"

 判断字段是否存在:

127.0.0.1:6379> hexists user age
(integer) 1
127.0.0.1:6379> hexists user sex
(integer) 0

只获取key或者value:

127.0.0.1:6379> hkeys user
1) "password"
2) "age"
127.0.0.1:6379> hvals user
1) "123"
2) "32"

获取大小:

127.0.0.1:6379> hlen user
(integer) 2

 

在实际中的应用:比如添加商品

127.0.0.1:6379> hmset item:1001 name iphonex price 7000 id 1001 color black
ok
127.0.0.1:6379> hkeys item:1001
1) "name"
2) "price"
3) "id"
4) "color"

 

list类型:就像是java的arraylist

向左边或者右边添加元素:

127.0.0.1:6379> lpush list:1 1 2 3
(integer) 3
127.0.0.1:6379> rpush list:1 4 5 6 
(integer) 6

最终list:1是什么呢?

1->2 1-> 3 2 1->3 2 1 4->3 2 1 4 5->3 2 1 4 5 6

 

根据开始索引和结束索引查看:

127.0.0.1:6379> lrange list:1 1 3
1) "2"
2) "1"
3) "4"

如果想全部读取,设置为0到-1即可:

127.0.0.1:6379> lrange list:1 0 -1
1) "3"
2) "2"
3) "1"
4) "4"
5) "5"
6) "6"

从列表的两端弹出元素:

127.0.0.1:6379> lpop list:1
"3"
127.0.0.1:6379> rpop list:1
"6"
127.0.0.1:6379> lrange list:1 0 -1
1) "2"
2) "1"
3) "4"
4) "5"

 列表长度:

127.0.0.1:6379> llen list:1
(integer) 4

删除:-1:从右往左删除第一个5;1:从左往右删除第一个5;0:删除所有的5

127.0.0.1:6379> lrem list:1 -1 5
(integer) 0
127.0.0.1:6379> lrem list:1 1 5
(integer) 0

获取指定索引:

127.0.0.1:6379> lindex list:1 2
"4"
127.0.0.1:6379> lrange list:1 0 -1
1) "2"
2) "1"
3) "4"

设置指定索引的值:

127.0.0.1:6379> lset list:1 2 100
ok
127.0.0.1:6379> lrange list:1 0 -1
1) "2"
2) "1"
3) "100"

 只保留列表某一部分元素:

127.0.0.1:6379> ltrim list:1 0 1
ok
127.0.0.1:6379> lrange list:1 0 -1
1) "2"
2) "1"

 插入:linsert [name] [after/before] [value] [new value]

127.0.0.1:6379> lrange list:1 0 -1
1) "9"
2) "7"
3) "2"
4) "1"
127.0.0.1:6379> linsert list:1 before 2 100
(integer) 5
127.0.0.1:6379> lrange list:1 0 -1
1) "9"
2) "7"
3) "100"
4) "2"
5) "1"

 

set类型:

特点:不重复,无序

增删查:

127.0.0.1:6379> sadd set a b c d
(integer) 4
127.0.0.1:6379> sadd set a
(integer) 0
127.0.0.1:6379> srem set d
(integer) 1
127.0.0.1:6379> smembers set
1) "c"
2) "b"
3) "a"

差集运算:[1,2,3]和[2,3,4]的差集

127.0.0.1:6379> sadd set1 1 2 3 
(integer) 3
127.0.0.1:6379> sadd set2 2 3 4 
(integer) 3
127.0.0.1:6379> sdiff set1 set2
1) "1"
127.0.0.1:6379> sdiff set2 set1
1) "4"

交集运算:[1,2,3]和[2,3,4]的交集

127.0.0.1:6379> sinter set1 set2
1) "2"
2) "3"

并集运算:[1,2,3]和[2,3,4]的并集

127.0.0.1:6379> sunion set1 set2
1) "1"
2) "2"
3) "3"
4) "4"