redis

redis

需要c环境
yum install gcc-c++
# wget http://download.redis.io/releases/redis-6.0.8.tar.gz
# tar xzf redis-6.0.8.tar.gz
# cd redis-6.0.8
# make

执行完 make 命令后,redis-6.0.8 的 src 目录下会出现编译后的 redis 服务程序 redis-server,还有用于测试的客户端程序 redis-cli:

下面启动 redis 服务:
# cd src
# ./redis-server



注意这种方式启动 redis 使用的是默认配置。也可以通过启动参数告诉 redis 使用指定配置文件使用下面命令启动。

# cd src
# ./redis-server ../redis.conf


redis.conf 是一个默认的配置文件。我们可以根据需要使用自己的配置文件。

启动 redis 服务进程后,就可以使用测试客户端程序 redis-cli 和 redis 服务交互了。 比如:

# cd src
# ./redis-cli
redis> set foo bar
OK
redis> get foo
"bar"

一、另一种方式安装

1.1 编译
接上面一步安装后再执行 make install
redis默认安装路径:会在/usr/local/bin下
在bin下创建一个conf目录
[root@server-200 bin]# cp /opt/soft/redis-6.0.8/redis.conf /usr/local/bin/conf/
这个文件作为启动用
1.2 后台启动
vim /usr/local/bin/redis.conf
把daemonize no 改为yes

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-16AmiJwR-1620627538667)(image/image-20210505174912743.png)]

1.3 通过指定配置文件启动
[root@server-200 bin]# redis-server /usr/local/bin/conf/redis.conf 
[root@server-200 bin]# ps -axu|grep redis
root      50827  0.2  0.2 162208  7856 ?        Ssl  17:51   0:00 redis-server 127.0.0.1:6379
root      51193  0.0  0.0 112668   952 pts/2    S+   17:51   0:00 grep --color=auto redis

1.4 连接redis
[root@server-200 yum.repos.d]# redis-cli -a 123
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> set a 123
OK
127.0.0.1:6379> get a
"123"
127.0.0.1:6379> shutdown #关闭redis也就是杀手redis进程
not connected> exit
[root@server-200 yum.repos.d]# ps -aux|grep redis
root      58215  0.0  0.0 112668   956 pts/0    R+   17:54   0:00 grep --color=auto redis
[root@server-200 yum.repos.d]# 
1.5 测试性能工具
redis-benchmark 是一个redis自带的压力测试工具
redis-benchmark 命令参数
redis-benchmark -h localhost -p 6379 -c 100 -n 100000
简单测试:
测试:100个并发连接 100000请求

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lytsffS0-1620627538670)(image/image-20210505175731442.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TQpHQ8dd-1620627538673)(image/image-20210505180403162.png)]

1.6 基础的知识
默认有16个数据库
默认使用的是第0个
可以使用select进行切换数据库

127.0.0.1:6379> select 3 #切换数据库
OK
127.0.0.1:6379[3]> dbsize #查看db大小 为0
(integer) 0
127.0.0.1:6379[3]> 

127.0.0.1:6379[3]> set a 12
OK
127.0.0.1:6379[3]> dbsize
(integer) 1
127.0.0.1:6379[3]> 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9Kwv5QZE-1620627538677)(image/image-20210505180651719.png)]

1.7 查看所有的key
127.0.0.1:6379[3]> keys *
1) "a"
127.0.0.1:6379[3]> 

1.8 清除当前数据库
flushdb 
---------
127.0.0.1:6379[3]> keys *
1) "a"
127.0.0.1:6379[3]> flushdb #清空当前数据库
OK
127.0.0.1:6379[3]> keys *
(empty array)
127.0.0.1:6379[3]> 

1.9清空所有数据库
flushall
---------------
127.0.0.1:6379[3]> select 0
OK
127.0.0.1:6379> keys *
1) "a"
127.0.0.1:6379> select 3
OK
127.0.0.1:6379[3]> set a 3
OK
127.0.0.1:6379[3]> keys *
1) "a"
127.0.0.1:6379[3]> flushall #清空所有数据库
OK
127.0.0.1:6379[3]> keys *
(empty array)
127.0.0.1:6379[3]> select 0
OK
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> 

2.0 redis是单线程
明白reids是很快的 官方表示,redis是基于内存操作,cpu不是redis性能瓶颈,redis的瓶颈是根据机器的内存和网络带宽,既然可以使用单线程来实现,就使用单线程了

二、五大数据类型

1.1 redis-key
exists name #判断name这个键是否存在 存在返回1
move name 1 # 移除key 1代表1号数据库
expire name 10 #设置10秒过期
ttl name #查看过期时间
127.0.0.1:6379> set name 1
OK
127.0.0.1:6379> get name
"1"
127.0.0.1:6379> expire name 10
(integer) 1
127.0.0.1:6379> ttl name
(integer) 7
127.0.0.1:6379> expire name 10
(integer) 1
127.0.0.1:6379> 

#查看数据类型:type
127.0.0.1:6379> set a 11
OK
127.0.0.1:6379> set name wang
OK
127.0.0.1:6379> type a
string
127.0.0.1:6379> type name
string
127.0.0.1:6379> set b '123'
OK
127.0.0.1:6379> type b
string
127.0.0.1:6379> 

1.2 string(字符串)
# 追加key的值:append
127.0.0.1:6379> set yes hello 
OK
127.0.0.1:6379> get yes
"hello"
127.0.0.1:6379> APPEND yes "word"
(integer) 9
127.0.0.1:6379> get yes
"hello"
127.0.0.1:6379> 

#查看key的长度:strlen
127.0.0.1:6379> STRLEN yes
(integer) 9

#i++
#步长 i+=
# incr:加1   decr:减1   incrby:自定义加多少 
127.0.0.1:6379> set a 0
OK
127.0.0.1:6379> get a
"0"
127.0.0.1:6379> incr a
(integer) 1
127.0.0.1:6379> incr a
(integer) 2
127.0.0.1:6379> incr a
(integer) 3
127.0.0.1:6379> get a
"3"
127.0.0.1:6379> decr a
(integer) 2
127.0.0.1:6379> decr a
(integer) 1
127.0.0.1:6379> decr a
(integer) 0
127.0.0.1:6379> get a
"0"
127.0.0.1:6379> INCRBY a 10
(integer) 10
127.0.0.1:6379> get a
"10"
127.0.0.1:6379> 

1.2.1字符串范围
getrange
------------
127.0.0.1:6379> set a "hello worlld"
OK
127.0.0.1:6379> get a
"hello worlld"
127.0.0.1:6379> GETRANGE a 0 3  #截取字符串【0,3】
"hell"
127.0.0.1:6379> GETRANGE a 0 -1 #获取所有字符串
"hello worlld"
127.0.0.1:6379> 

1.2.2 字符串替换
setrange
---------------
127.0.0.1:6379> get a
"hello worlld"
127.0.0.1:6379> SETRANGE a 1 xx #从1开始替换
(integer) 12
127.0.0.1:6379> get a
"hxxlo worlld"
127.0.0.1:6379> 

1.2.3 setnx
如果key已经存在 再设置就不会成功
如果不存在 就设置成功
127.0.0.1:6379> get a
"hxxlo worlld"
127.0.0.1:6379> setnx a 123
(integer) 0
127.0.0.1:6379> get a
"hxxlo worlld"
127.0.0.1:6379> 

1.2.4 setex
设置过期时间
setex (set with expire)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MrwMNItX-1620627538678)(image/image-20210505185133000.png)]

1.2.5 批量设置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zljd5yjD-1620627538681)(image/image-20210505185347009.png)]

1.2.6 对象 json

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qxCkqDn0-1620627538682)(image/image-20210505185622389.png)]

1.2.7 getset

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KMHddsQK-1620627538683)(image/image-20210505185738894.png)]

1.3 List
在redis里面,可以把list玩成,栈,队列,阻塞队列
所有的list命令都是用l开头的

127.0.0.1:6379> LPUSH list one
(integer) 1
127.0.0.1:6379> LPUSH list two
(integer) 2
127.0.0.1:6379> LPUSH list three
(integer) 3
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> LRANGE list 0 1 #获取区间的值
1) "three"
2) "two"
127.0.0.1:6379> RPUSH list right #将一个值或多个值插入到列表的尾部(右)
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
127.0.0.1:6379> 
1.3.1 LPOP
移除列表左边的值
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
127.0.0.1:6379> lpop list #移除列表的第一个元素
"three"
127.0.0.1:6379> LRANGE list 0 -1
1) "two"
2) "one"
3) "right"
127.0.0.1:6379> rpop list #移除列表的最后一个元素
"right"
127.0.0.1:6379> LRANGE list 0 -1
1) "two"
2) "one"
127.0.0.1:6379> 

1.3.2 rpop
移除列表右边的值
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
127.0.0.1:6379> lpop list #移除列表的第一个元素
"three"
127.0.0.1:6379> LRANGE list 0 -1
1) "two"
2) "one"
3) "right"
127.0.0.1:6379> rpop list #移除列表的最后一个元素
"right"
127.0.0.1:6379> LRANGE list 0 -1
1) "two"
2) "one"
127.0.0.1:6379> 

1.3.3 Lindex

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wT4micdz-1620627538685)(image/image-20210505191046826.png)]

1.3.4 Llen

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VDvii9c2-1620627538685)(image/image-20210505191147001.png)]

1.3.5 Lrem

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hOAZqXLC-1620627538687)(image/image-20210505191328442.png)]

1.3.6 Ltrim

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a6zG4yhd-1620627538688)(image/image-20210505191534307.png)]

1.3.7 rpoplpush

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CEMEZqjR-1620627538688)(image/image-20210505191752269.png)]

1.3.8 Lset

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8bBbPW3M-1620627538690)(image/image-20210505192020783.png)]

1.3.9 Linsert

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YAL2ffyD-1620627538690)(image/image-20210505192224567.png)]

1.3.10 小结

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xqb11H4S-1620627538690)(image/image-20210505192546277.png)]

三、事务

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uCSy73mn-1620627538692)(image/image-20210506000415691.png)]

1.1 开启事务
1.开启事务(multi)
2.命令入队()
3.执行事务(exec)

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set k1 1
QUEUED
127.0.0.1:6379> set k2 2
QUEUED
127.0.0.1:6379> set k3 3
QUEUED
127.0.0.1:6379> get k1
QUEUED
127.0.0.1:6379> set k4 4
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
3) OK
4) "1"
5) OK
127.0.0.1:6379> 

1.2 放弃事务
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set k1 1
QUEUED
127.0.0.1:6379> set k2 2
QUEUED
127.0.0.1:6379> set k3 3
QUEUED
127.0.0.1:6379> get k1
QUEUED
127.0.0.1:6379> set k4 4
QUEUED
127.0.0.1:6379> DISCARD  #放弃事务
OK
127.0.0.1:6379> get k4
(nil)

四、jedis

1.1 Java操作redis

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2B04IJrP-1620627538692)(image/image-20210506003632428.png)]

导入jedis依赖
maven网站:
https://mvnrepository.com/artifact/redis.clients/jedis

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.6.0</version>
</dependency>


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>redis</artifactId>
    <version>1.0-SNAPSHOT</version>
<dependencies>
    <!-- 导入jredis的包-->
    <!-- https://mvnrepository.com/artifact/redis.clients/jedis -->

    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>3.6.0</version>
    </dependency>
<!-- fastjson 阿里巴巴的-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.62</version>
    </dependency>
</dependencies>

</project>

java部分

package test.jedis.com;

import redis.clients.jedis.Jedis;

public class TestPing {
    public static void main(String[] args) {
        // new Jedis 对象即可
        Jedis jedis=new Jedis("192.168.1.200",6379);
        System.out.println(jedis.ping());
    }
}

    <version>3.6.0</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.62</version>
</dependency>
```

java部分

package test.jedis.com;

import redis.clients.jedis.Jedis;

public class TestPing {
    public static void main(String[] args) {
        // new Jedis 对象即可
        Jedis jedis=new Jedis("192.168.1.200",6379);
        System.out.println(jedis.ping());
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值