Redis学习

Redis系列教材 (四)- Jedis 教程 中,使用各种Redis自带客户端的命令行方式访问Redis服务。而在实际工作中却需要用到Java代码才能访问,使用第三方jar包 :Jedis就能方便地访问Redis的各种服务了。这是一个很简单的Jedis应用,就是set 和get,可以看到如图所示的效果,取出了foo的值。这是一个较为丰富的运用,演示了各种不同数据类型的运用方式。的可运行项目 jedis.rar里包含了有。为了运行,需要用到junit的jar包,在。jedis jar包在上角可以下载。 阅读详情

在这里插入图片描述

一、redis介绍

1.1什么是NoSQL

NoSQL,泛指非关系型的数据库,它可以作为关系型数据库的良好补充。
随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型数据库则由于其本身的特点得到了非常迅速的发展。
NoSQL数据库的产生就是为了解决: 大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题;

1.2NoSQL数据库的四大分类

(一)键值key-value存储数据库

相关产品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB
典型应用: 内容缓存,主要用于处理大量数据的高访问负载。
数据模型: 一系列键值对
优势: 快速查询
劣势: 存储的数据缺少结构化

(二)列存储数据库

相关产品:Cassandra, HBase, Riak
典型应用:分布式的文件系统
数据模型:以列簇式存储,将同一列数据存在一起
优势:查找速度快,可扩展性强,更容易进行分布式扩展
劣势:功能相对局限

(三)文档型数据库

相关产品:CouchDB、MongoDB
典型应用:Web应用(与Key-Value类似,Value是结构化的)
数据模型: 一系列键值对
优势:数据结构要求不严格
劣势: 查询性能不高,而且缺乏统一的查询语法

(二)图形Graph数据库

相关数据库:Neo4J、InfoGrid、Infinite Graph
典型应用:社交网络
数据模型:图结构
优势:利用图结构相关算法。
劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案。

1.3什么是redis

redis是用C语言开发的一个开源的高性能键值对数据库,它通过提供多种键值数据类型类适应不同场景下的存储需求,Redis支持的简直数据类型如下:
字符串类型(string)、散列类型(hash)、列表类型(list)、集合类型(set)、有序集合类型(sortset)

1.4redis的应用场景

缓存(数据查询、短连接、新闻内容、商品内容等等)。(最多使用)
分布式集群架构中的session分离。
聊天室的在线好友列表。
任务队列。(秒杀、抢购、12306等等)
应用排行榜。
网站访问统计。
数据过期处理(可以精确到毫秒)

二、redis安装运行

2.1redis安装环境

redis是C语言开发,建议在linux上运行,本教程使用Centos7作为安装环境。
安装redis需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc:yum install gcc-c++

2.2redis安装

官网下载:
3.0
http://download.redis.io/releases/redis-3.0.0.tar.gz
4.0
http://download.redis.io/releases/redis-4.0.14.tar.gz
直接输入命令:
我的做法是,在/usr/local下mkdir tools文件,然后
①wget http://download.redis.io/releases/redis-3.0.4.tar.gz
②wget http://download.redis.io/releases/redis-4.0.14.tar.gz
 解压源码:
tar -zxvf redis-4.0.14.tar.gz
 进入解压后的目录进行编译
make
 安装到指定目录
make PREFIX=/usr/local/redis install

Linux tree命令用于以树状图列出目录的内容。

 配置redis.conf
在redis-4.0.14目录下
①cp redis.conf /usr/local/redis/bin
②进入/usr/local/redis/bin
③编辑vim redis.conf
注意: 设置redis可远程访问(3.0默认允许,4.0需要手动设置) ,修改绑定地址为0.0.0.0
vim redis.conf
bing 0.0.0.0

在这里插入图片描述
在这里插入图片描述
Redis3.0新增的redis-sentinel是redis集群管理工具可实现高可用。

2.3redis启动

2.3.1前端模式启动

/usr/local/redis/bin目录下输入./redis-server redis.conf
在这里插入图片描述

2.3.2后端模式启动

修改redis.conf配置文件, daemonize yes 以后端模式启动。
在这里插入图片描述

2.3.3启动多个redis进程

(一)启动多个redis进程意义:
一个redis代表一个redis服务(服务器)。

(二)方法1:
启动时指定端口可在一台服务器启动多个redis进程。
cd /usr/local/redis/bin
./redis-server ./redis.conf --port 6380

(三)方法2(推荐此方法):
创建多个redis目录,以端口号命名,比如:创建6379、6380两个目录,将redis的安装文件bin和conf中文件拷贝至这两个目录。
修改6379目录下的redis.conf设置端口号为6379
修改6380目录下的redis.conf设置端口号为6380
启动6379和6380目录下的redis-server程序:
cd 6379
./redis-server . /redis.conf
cd 6380
./redis-server . /redis.conf

(四)查看redis的进程
在这里插入图片描述

2.3.4redis停止

强行终止Redis进程可能会导致redis持久化数据丢失。正确停止Redis的方式应该是向Redis服务发送SHUTDOWN命令,方法为:

cd /usr/local/redis/bin
./redis-cli shutdown save
连接本机6379端口的redis服务执行shutdown 停止
save:在停止redis服务之前将所有的数据持久化保存。

停止6380的redis,执行:
cd /usr/local/redis/bin
./redis-cli -p 6380 shutdown save

2.3.5 连接redis服务端

执行bin/redis-cli连接redis服务端:
在这里插入图片描述
从上图得知redis-cli默认连接本机的redis,本机的redis没有启动则报上图中的错误。
指定连接redis服务的ip和端口
在这里插入图片描述

2.3.6 向redis服务端发送命令

redis-cli连上redis服务后,可以在命令行发送命令
ping
Redis提供了PING命令来测试客户端与Redis的连接是否正常,如果连接正常会收到回复PONG
在这里插入图片描述
 set/get
使用set和get可以向redis设置数据、获取数据。
在这里插入图片描述

2.3.7 使用cmder连接

(一)连接
在这里插入图片描述
(二)连接失败
在这里插入图片描述
(三)解决方案
在这里插入图片描述

2.4 redis多数据库

2.4.1 redis实例

一个redis进程就是一个redis实例,一台服务器可以同时有多个redis实例,不同的redis实例提供不同的服务端口对外提供服务,每个redis实例之间互相影响。每个redis实例都包括自己的数据库,数据库中可以存储自己的数据。

2.4.2 多数据库测试

一个Redis实例可以包括多个数据库,客户端可以指定连接某个redis实例的哪个数据库,就好比一个mysql中创建多个数据库,客户端连接时指定连接哪个数据库。
一个redis实例最多可提供16个数据库,下标从0到15,客户端默认连接第0号数据库,也可以通过select选择连接哪个数据库,如下连接1号库:
=建议:不同的应用系统要使用不同的redis实例而不是使用同一个redis实例下的不同数据库。=

三、jedis

3.1 jedis介绍

Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如java、C、C#、C++、php、Node.js、Go等。
在官方网站里列一些Java的客户端,有Jedis、Redisson、Jredis、JDBC-Redis、等其中官方推荐使用Jedis和Redisson。 在企业中用的最多的就是Jedis,下面我们就重点学习下Jedis。
Jedis同样也是托管在github上,地址:https://github.com/xetorthio/jedis

3.2通过 jedis 连接 redis 单机

3.2.1jar包

pom坐标:

redis.clients
jedis
2.9.0

3.2.2单实例连接
	Jedis jedis = new Jedis("192.168.0.209", 6379);
	jedis.set("name", "bar");
	String name = jedis.get("name");
	System.out.println(name);
	jedis.close();
3.2.3使用连接池连接

通过单实例连接redis不能对redis连接进行共享,可以使用连接池对redis连接进行共享,提高资源利用率,使用jedisPool连接redis服务,如下代码:

@Test
public void pool() {
	JedisPoolConfig config = new JedisPoolConfig();
	//最大连接数
	config.setMaxTotal(30);
	//最大连接空闲数
	config.setMaxIdle(2);
	
	JedisPool pool = new JedisPool(config, "192.168.0.209", 6379);
	Jedis jedis = null;

	try  {
		jedis = pool.getResource();
		
		jedis.set("name", "lisi");
		String name = jedis.get("name");
		System.out.println(name);
	}catch(Exception ex){
		ex.printStackTrace();
	}finally{
		if(jedis != null){
			//关闭连接
			jedis.close();
		}
	}
	
}

四、数据类型–string

4.1redis string 介绍

redis中没有使用C语言的字符串表示,而是自定义一个数据结构叫SDS(simple dynamic string)即简单动态字符串。

4.2命令

4.2.1 赋值与取值

127.0.0.1:6379> set test 123
OK
127.0.0.1:6379> get test
"123“
当键不存在时返回空结果。

4.2.2 向尾部追加值

APPEND key value
APPENDS的作用是向键值的末尾追加value。如果键不存在则将该键的值设置为value,即相当于SET key value、返回值是追加后字符串的总长度。
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!”

4.2.3 获取字符串长度

STRLEN key
STRLEN命令返回键值的长度,如果键不存在则返回0。
127.0.0.1:6379> strlen str
(integer) 0
127.0.0.1:6379> set str hello
OK
127.0.0.1:6379> strlen str
(integer) 5

4.2.4 同时设置/获取多个键值

MSET key value [key value …]
MGET key [key …]
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> get k1
“v1”
127.0.0.1:6379> mget k1 k3

  1. “v1”
  2. “v3”

五、数据类型–hash

5.1 需求

使用 redis存储用户信息,考虑使用string或其它方案。
{“birthday”:1557743055507,“ename”:“zhangsan”,“districtId”:2,“sex”:1,“id”:1,“edate”:1557743055507,“age”:18,“sal”:8000.0}

5.2 使用string的问题

假设有User对象以JSON序列化的形式存储到Redis中,User对象有id,username、password、age、name等属性,存储的过程如下:
保存、更新:
User对象 à json(string) à redis
如果在业务上只是更新age属性,其他的属性并不做更新我应该怎么做呢? 如果仍然采用上边的方法在传输、处理时会造成资源浪费,下边讲的hash可以很好的解决这个问题。

5.3 redis hash介绍

hash叫散列类型,它提供了字段和字段值的映射。字段值只能是字符串类型,不支持散列类型、集合类型等其它类型。如下:
在这里插入图片描述

5.4 redis hash命令

5.4.1赋值与取值

HSET key field value 一次只能设置一个字段值
HGET key field 一次只能获取一个字段值
HMSET key field value[field value …] 一次可以设置多个字段值
HMGET key field[field …] 一次可以获取多个字段值
HGETALL key
HSET命令不区分插入和更新操作,当执行插入操作时HSET命令返回1,当执行更新操作时返回0.

5.4.2判断字段是否存在

HEXISTS key field
127.0.0.1:6379> hexists user age 查看user中是否有age字段
(integer) 1
127.0.0.1:6379> hexists user name 查看user中是否有name字段
(integer) 0

HSETNX key field value
当字段不存在时赋值,类似HSET,区别在于如果字段已经存在,该命令不执行任何操作。
127.0.0.1:6379> hsetnx user age 30 如果user中没有age字段则设置age值为30,否则不做任何操作
(integer) 0

5.4.3删除字段

可以删除一个或多个字段,返回值是被删除的字段个数
HDEL key field [field …]
127.0.0.1:6379> hdel user age
(integer) 1
127.0.0.1:6379> hdel user age name
(integer) 0
127.0.0.1:6379> hdel user age username
(integer) 1

5.4.4只获取字段名或字段值

HKEYS key
HVALS key
127.0.0.1:6379> hmset user age 20 name lisi
OK
127.0.0.1:6379> hkeys user

  1. “age”
  2. “name”
    127.0.0.1:6379> hvals user
  3. “20”
  4. “lisi”
5.4.5获取字段数量

HLEN key
127.0.0.1:6379> hlen user
(integer) 2

六、数据类型list

列表类型(list)可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段。
列表类型内部是使用双向链表实现的,所以向列表两端添加元素的时间复杂度为o(1),获取越接近两端的元素速度就越快,这意味着即使是一个有几千万个元素的列表,获取头部或尾部的10条记录也是极快的。

6.1命令

6.1.1向列表两端增加元素

LPUSH key value [value …]
RPUSH key value [value …]
向列表左边增加元素
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) 3

6.1.2从列表两端弹出元素

LPOP key
RPOP key
LPOP命令从列表左边弹出一个元素,会分两步完成,第一步是将列表左边的元素从列表中移除,第二步是返回被移除的元素值。
127.0.0.1:6379> lpop list:1
"3“
127.0.0.1:6379> rpop list:1
"6“

6.1.3 获取列表中元素的个数

LLEN key
127.0.0.1:6379> llen list:1
(integer) 2

6.1.4 获取列表片段

LRANGE key start stop
LRANGE命令是列表类型最常用的命令之一,获取列表中的某一片段,将返回start、stop之间的所有元素(包含两端的元素),索引从0开始。索引可以是负数,如:“-1”代表最后边的一个元素。
127.0.0.1:6379> lrange list:1 0 2

  1. “2”
  2. “1”
  3. “4”
6.1.5 其他命令

 删除列表中指定的值
LREM key count value
LREM命令会删除列表中前count个值为value的元素,返回实际删除的元素个数。根据count值的不同,该命令的执行方式会有所不同:
 当count>0时, LREM会从列表左边开始删除。
 当count<0时, LREM会从列表后边开始删除。
 当count=0时, LREM删除所有值为value的元素。

 获得/设置指定索引的元素值
LINDEX key index
LSET key index value
127.0.0.1:6379> lindex l:list 2
“1”
127.0.0.1:6379> lset l:list 2 2
OK
127.0.0.1:6379> lrange l:list 0 -1

  1. “6”
  2. “5”
  3. “2”
  4. “2”

 只保留列表指定片段,指定范围和LRANGE一致
LTRIM key start stop
127.0.0.1:6379> lrange l:list 0 -1

  1. “6”
  2. “5”
  3. “0”
  4. “2”
    127.0.0.1:6379> ltrim l:list 0 2
    OK
    127.0.0.1:6379> lrange l:list 0 -1
  5. “6”
  6. “5”
  7. “0”

 向列表中插入元素
LINSERT key BEFORE|AFTER pivot value
该命令首先会在列表中从左到右查找值为pivot的元素,然后根据第二个参数是BEFORE还是AFTER来决定将value插入到该元素的前面还是后面。
127.0.0.1:6379> lrange list 0 -1

  1. “3”
  2. “2”
  3. “1”
    127.0.0.1:6379> linsert list after 3 4
    (integer) 4
    127.0.0.1:6379> lrange list 0 -1
  4. “3”
  5. “4”
  6. “2”
  7. “1”

 将元素从一个列表转移到另一个列表中
RPOPLPUSH source destination
127.0.0.1:6379> rpoplpush list newlist
“1”
127.0.0.1:6379> lrange newlist 0 -1

  1. “1”
    127.0.0.1:6379> lrange list 0 -1
  2. “3”
  3. “4”
  4. “2”
6.1.6 Jedis常用操作
public static void testList() {  
        System.out.println("==List==");  
        Jedis jedis = RedisUtil.getJedis();  
        try {  
            // 开始前,先移除所有的内容  
            jedis.del("messages");  
            jedis.rpush("messages", "Hello how are you?");  
            jedis.rpush("messages", "Fine thanks. I'm having fun with redis.");  
            jedis.rpush("messages", "I should look into this NOSQL thing ASAP");  
  
            // 再取出所有数据jedis.lrange是按范围取出,  
            // 第一个是key,第二个是起始位置,第三个是结束位置,jedis.llen获取长度 -1表示取得所有  
            List<String> values = jedis.lrange("messages", 0, -1);  
            System.out.println(values);  
  
	        // 清空数据  
	        System.out.println(jedis.flushDB());  
	        // 添加数据  
	        jedis.lpush("lists", "vector");  
	        jedis.lpush("lists", "ArrayList");  
	        jedis.lpush("lists", "LinkedList");  
	        // 数组长度  
	        System.out.println(jedis.llen("lists"));  
	        // 排序  
	        //System.out.println(jedis.sort("lists"));  
	        // 字串  
	        System.out.println(jedis.lrange("lists", 0, 3));  
	        // 修改列表中单个值  
	        jedis.lset("lists", 0, "hello list!");  
	        // 获取列表指定下标的值  
	        System.out.println(jedis.lindex("lists", 1));  
	        // 删除列表指定下标的值  
	        System.out.println(jedis.lrem("lists", 1, "vector"));  
	        // 删除区间以外的数据  
	        System.out.println(jedis.ltrim("lists", 0, 1));  
	        // 列表出栈  
	        System.out.println(jedis.lpop("lists"));  
	        // 整个列表值  
	        System.out.println(jedis.lrange("lists", 0, -1));  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            RedisUtil.getPool().returnResource(jedis);  
        }  
    }  

七、数据类型–set

7.1redis set介绍

在集合中的每个元素都有不同的,且没有顺序。
在这里插入图片描述
集合类型的常用操作是向集合中加入或删除元素、判断某个元素是否存在等,由于集合类型的redis内部是使用值为空的散列表实现,所有这些操作的实际复杂度都喂o(1)。
redis还提供了多个集合之间的交集、并集、差集的运算。

7.2命令

7.2.1增加/删除元素

SADD key member [member …]
SREM key member [member …]
127.0.0.1:6379> sadd set a b c
(integer) 3
127.0.0.1:6379> sadd set a
(integer) 0
127.0.0.1:6379> srem set c d
(integer) 1

7.2.2获得集合中的所有元素

SMEMBERS key
127.0.0.1:6379> smembers set

  1. “b”
  2. "a”
    判断元素是否在集合中,无论集合中有多少元素都可以极速的返回结果。
    SISMEMBER key member
    127.0.0.1:6379> sismember set a
    (integer) 1
    127.0.0.1:6379> sismember set h
    (integer) 0

8、数据类型–sorted set

8.1 redis sorted set介绍

在集合类型的基础上有序集合类型中的每个元素都关联一个分数,这使得我们不仅可以完成插入、删除和判断元素是否存在集合中,还能获得分数最高或最低的前N个元素、获取指定分数范围内的元素等与分数有关的操作。
在某些方面有序集合和列表类型有些相似:
(1)二者都是有序的;(2)二者都可以获得某一范围的元素;
但是,二者有着很大区别:
1、列表类型是通过列表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问中间数据的速度就会变慢。
2、有序集合类型使用散列实现,所有即使读取位于中间部分的数据也很快。
3、列表中不能简单的调整某个元素的位置,但是有序集合可以(通过更改分数实现)
4、有序集合要比列表类型更耗内存

8.2命令
8.2.1增加元素

向有序集合中加入一个元素和该元素的分数,如果该元素已经存在则会用新的分数替换原有的分数。返回值是新加入到集合中的元素的个数,不包含之前已经存在的元素
ZADD key score member [score member …]
127.0.0.1:6379> zadd scoreboard 80 zhangsan 89 lisi 94 wangwu
(integer) 3
127.0.0.1:6379> zadd scoreboard 97 lisi
(integer) 0
获取元素的分数
ZSCORE key member
127.0.0.1:6379> zscore scoreboard lisi
“97”

8.2.2获得排名在某个范围的元素列表

获得排名在某个范围的元素列表
ZRANGE key start stop [WITHSCORES] 照元素分数从小到大的顺序返回索引从start到stop之间的所有元素(包含两端的元素)

127.0.0.1:6379> zrange scoreboard 0 2

  1. “zhangsan”
  2. “wangwu”
  3. "lisi“

ZREVRANGE key start stop [WITHSCORES] 照元素分数从大到小的顺序返回索引从start到stop之间的所有元素(包含两端的元素)

127.0.0.1:6379> zrevrange scoreboard 0 2

  1. " lisi "
  2. “wangwu”
  3. " zhangsan “

如果需要获得元素的分数的可以在命令尾部加上WITHSCORES参数
127.0.0.1:6379> zrange scoreboard 0 1 WITHSCORES

  1. “zhangsan”
  2. “80”
  3. “wangwu”
  4. “94”
8.2.3获取指定分数范围的元素

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
127.0.0.1:6379> ZRANGEBYSCORE scoreboard 90 97 WITHSCORES

  1. “wangwu”
  2. “94”
  3. “lisi”
  4. “97”
    127.0.0.1:6379> ZRANGEBYSCORE scoreboard 90 (97 WITHSCORES
  5. “wangwu”
  6. "94“
    127.0.0.1:6379> ZRANGEBYSCORE scoreboard 70 100 limit 1 2
  7. “wangwu”
  8. “lisi”
8.2.4增加某个元素的分数,返回值是更改后的分数

ZINCRBY key increment member
给lisi加4分
127.0.0.1:6379> ZINCRBY scoreboard 4 lisi
"101“
获得集合中元素的数量
ZCARD key
127.0.0.1:6379> ZCARD scoreboard
(integer) 3
获得指定分数范围内的元素个数
ZCOUNT key min max
127.0.0.1:6379> ZCOUNT scoreboard 80 90
(integer) 1

8.3 其它命令

 按照排名范围删除元素
ZREMRANGEBYRANK key start stop
127.0.0.1:6379> ZREMRANGEBYRANK scoreboard 0 1
(integer) 2
127.0.0.1:6379> ZRANGE scoreboard 0 -1

  1. “lisi”
    ZREMRANGEBYSCORE key min max
    按照分数范围删除元素
    127.0.0.1:6379> zadd scoreboard 84 zhangsan
    (integer) 1
    127.0.0.1:6379> ZREMRANGEBYSCORE scoreboard 80 100
    (integer) 1

 获取元素的排名
ZRANK key member
ZREVRANK key member
从小到大
127.0.0.1:6379> ZRANK scoreboard lisi
(integer) 0
从大到小
127.0.0.1:6379> ZREVRANK scoreboard zhangsan
(integer) 1

8.4 keys命令
8.4.1设置key的生存时间

Redis在实际使用过程中更多的用作暖存,然而缓存的数据一般都是需要设置生存时间的,即:到期后数据销毁
EXPIRE key seconds 设置key的生存时间(单位:秒)key在多少秒后会自动删除

8.5 其它命令

(1)keys 返回满足给定pattern的所有key
redis 127.0.0.1:6379> keys mylist*

  1. “mylist”
  2. “mylist5”
  3. “mylist6”
  4. “mylist7”
  5. “mylist8”

(2)exists 确认一个key是否存在
redis 127.0.0.1:6379> exists HongWan
(integer) 0
redis 127.0.0.1:6379> exists age
(integer) 1
redis 127.0.0.1:6379>
从结果来数据库中不存在HongWan 这个key,但是age 这个key 是存在的

(3)del 删除一个key
redis 127.0.0.1:6379> del age
(integer) 1
redis 127.0.0.1:6379> exists age
(integer) 0
redis 127.0.0.1:6379>

(4)rename 重命名key
redis 127.0.0.1:6379[1]> keys *

  1. “age”
    redis 127.0.0.1:6379[1]> rename age age_new
    OK
    redis 127.0.0.1:6379[1]> keys *
  2. “age_new”
    redis 127.0.0.1:6379[1]>
    age 成功的被我们改名为age_new 了

(5)type返回值的类型
redis 127.0.0.1:6379> type addr
string
redis 127.0.0.1:6379> type myzset2
zset
redis 127.0.0.1:6379> type mylist
list
redis 127.0.0.1:6379>

11、服务器命令

(一)ping 测试连接是否存活

redis 127.0.0.1:6379> ping
PONG
//执行下面命令之前,我们停止redis 服务器
redis 127.0.0.1:6379> ping
Could not connect to Redis at 127.0.0.1:6379: Connection refused
//执行下面命令之前,我们启动redis 服务器
not connected> ping
PONG
redis 127.0.0.1:6379>
第一个ping 时,说明此连接正常
第二个ping 之前,我们将redis 服务器停止,那么ping 是失败的
第三个ping 之前,我们将redis 服务器启动,那么ping 是成功的

(二)echo 在命令行打印一些内容

redis 127.0.0.1:6379> echo HongWan
“HongWan”
redis 127.0.0.1:6379>

(三)select选择数据库

Redis 数据库编号从0~15,我们可以选择任意一个数据库来进行数据的存取。
redis 127.0.0.1:6379> select 1
OK
redis 127.0.0.1:6379[1]> select 16
(error) ERR invalid DB index
redis 127.0.0.1:6379[16]>
当选择16 时,报错,说明没有编号为16 的这个数据库

(四)quit 退出连接

redis 127.0.0.1:6379> quit

(五)dbsize 返回当前数据库中key的数目

redis 127.0.0.1:6379> dbsize
(integer) 18
redis 127.0.0.1:6379>
结果说明此库中有18 个key

(六)info获取服务器的信息和统计

redis 127.0.0.1:6379> info
redis_version:2.2.12
redis_git_sha1:00000000
redis_git_dirty:0
arch_bits:32
multiplexing_api:epoll
process_id:28480
uptime_in_seconds:2515
uptime_in_days:0

(七)flushdb删除当前选择数据库中的所有key

redis 127.0.0.1:6379> dbsize
(integer) 18
redis 127.0.0.1:6379> flushdb
OK
redis 127.0.0.1:6379> dbsize
(integer) 0
redis 127.0.0.1:6379>
在本例中我们将0 号数据库中的key 都清除了

(八)flushall 删除所有数据库中的所有key

redis 127.0.0.1:6379[1]> dbsize
(integer) 1
redis 127.0.0.1:6379[1]> select 0
OK
redis 127.0.0.1:6379> flushall
OK
redis 127.0.0.1:6379> select 1
OK
redis 127.0.0.1:6379[1]> dbsize
(integer) 0
redis 127.0.0.1:6379[1]>
在本例中我们先查看了一个1 号数据库中有一个key,然后我切换到0 号库执行flushall 命令,结果1 号库中的key 也被清除了,说是此命令工作正常。

Redis全面深入学习目录 这篇Redis学习目录提供了系统全面的Redis知识体系,从基础到高级特性、架构设计、运维监控、应用开发和生态扩展六个维度展开。核心内容包括:Redis数据类型与持久化机制、事务与Lua脚本、主从复制与集群架构、性能优化与监控方案、客户端开发与缓存设计模式,以及模块开发与未来趋势。特别对Redis集群进行了深度解析,涵盖数据分片、节点通信、请求重定向等关键技术细节,并提供了生产环境实践指导。本教程适用于希望全面掌握Redis的开发者和架构师。 阅读详情

相关推荐

从零组装电赛送药小车:OpenMV视觉核心+STM32控制,我的软硬件联调全记录

本文详细记录了从零构建电赛智能送药小车的全过程,重点解析了OpenMV视觉识别与STM32控制的深度协同方案。通过硬件选型对比、通信协议设计、PID调参等实战经验,解决了巡线精度、十字路口识别等核心问题,最终实现稳定可靠的送药小车系统,助力电子设计竞赛取得优异成绩。

weixin_42641741的博客 447

java操作jedis_Redis教程 —— Java池化JedisPool操作Jedis

今天再学习一下Redis的池化操作jedis,接着上一篇文章Redis教程 —— Java操作Redis增删改查(基础操作)我是用的是jedis2.9版本,池化操作依赖与common-pool2.jar包一、池化使用Jedis在classpath目录下创建一个config文件夹,文件夹中创建一个redis.properties配置文件redis.host=127.0.0.1redis.port=...

weixin_39854288的博客 660

Vue中实现word文档渲染、在线编辑、保存

Vue3对word文档进行渲染、编辑、保存。word转成html,html转成word

h18749849699的博客 1328

Redis 笔记之 Java 操作 Redis(Jedis)

jedis.close();}@Testpublic void testKeys() {// 删除一个keyjedis.del(“name”);// 删除多个keyjedis.del(“name”, “age”);// 设置一个keyjedis.set(“age”, “hello”);// 判断一个key是否存在Boolean name = jedis.exists(“name”);System.out.println(name);// 设置一个key超时时间Long age = jedis.expire(

2401_84010497的博客 898

锐捷交换机堆叠配置举例

一、组网需求: 1)四台S2628G进行堆叠; 2)设备在堆叠前先设置好优先级; 3)使用光口堆叠的设备如RG-S2928G-E相关配置 二、组网拓扑 三、配置要点: 普通堆叠设备不需要配置,只要把堆叠模块和线缆连接好即可 堆叠模块不支持热插拔,即插在模块连上线缆后不能立即生效,需要重启设备才生效。 如果拔掉堆叠插槽后,想再插上模块堆叠,那么必须重启设备才生效 设备堆叠需要协商参数,时间会比较久,请耐心等待 堆叠时设备建议是...

dongsheng_9234的专栏 8285

【TestNG自动化测试框架详解】

TestNG是一款设计测试用例执行流程的测试框架。

weixin_43936332的博客 1540

Jedis的基本操作方法

一、Jedis介绍 jedis 是 redis推荐的java客户端。通过Jedis我们可以很方便地使用java代码的方式,对redis进行操作。jedis使用起来比较简单,它的操作方法与redis命令相类似。对于初次使用redis的人来说,上手更快,更能适应。本例子使用maven,需要添加如下依赖: <!-- https://mvnrepository.com/arti...

游王子og的博客 5195

Vivado FFT IP核配置与实战:FPGA信号处理硬件加速指南

快速傅里叶变换(FFT)是数字信号处理(DSP)中的核心算法,用于将时域信号转换到频域进行分析。其原理基于离散傅里叶变换(DFT),通过蝶形运算的分解与复用,大幅降低了计算复杂度。在工程实践中,软件实现的FFT难以满足高速实时处理的需求,因此硬件加速方案至关重要。FPGA凭借其并行架构和可定制性,成为实现高性能FFT的理想平台。通过集成专用的FFT IP核,如Vivado中的Pipelined Streaming I/O架构,可以构建流水线化的计算引擎,实现极低延迟和高吞吐量的连续数据流处理。这种硬件方案特

weixin_42536863的博客 647

redis中各种数据类型对应的jedis操作命令

一、常用数据类型简介:       redis常用五种数据类型:string,hash,list,set,zset(sorted set). 1.String类型 String是最简单的类型,一个key对应一个value String类型的数据最大1G。 String类型的值可以被视作integer,从而可以让“INCR”命令族操作(incrby、decr、decrby),这种情况下

Jack Zhu 1万+

(王道考研计算机网络)第三章数据链路层-第一节:数据链路层功能概述

文章目录一:本章概述二:数据链路层基本概念三:数据链路层功能概述(1)为网络层提供服务(2)链路管理(3)组帧(4)流量控制(5)差错控制 本章是计算机网络中入门较难的一章,如果没有接触过相关内容,可能会止步于一些晦涩难懂的术语。本节内容希望大家可以用心看一看,对于大家入门是很有帮助的 一:本章概述 数据链路层位于物理层之上,主要作用就是提高物理层传输比特流的能力,使物理层可能出现差错的连接转变为逻辑上无差错的数据链路,同时向网络层提供服务。本章学习的主要就是数据链路层的功能和应用 数据链路层功能 封

快乐江湖的博客 2469

MATLAB - 使用 RRT 进行挖掘机运动规划

本例演示了如何使用运动规划器在包含障碍物的环境中为挖掘机规划路径。在此示例中,您将以运动树的简化形式为挖掘机建模,然后使用基于采样的运动规划器确定挖掘机在存在障碍物的两个姿势之间的可行路径。在 Simscape™ 多体™ 模型中模拟结果。

机器人控制与仿真应用 1850

Redis学习规划

Redis学习计划,包括学习内容、参考资料、考核以及扩展优化的考核内容。这个计划将帮助您系统地学习Redis,从基础概念到高级应用,再到解决实际问题。通过这个整合和优化的学习计划,您可以全面地学习Redis,并在实际应用中提升其性能和稳定性。- 包含Redis的基础知识、数据结构、持久化、集群、高可用和性能优化等方面的内容。- 提供了从基础到进阶的Redis学习资源。- 深入了解Redis的基本架构和特性。- 获取最权威的Redis学习资源。

喝醉酒的小白 1658

C#量化交易的市场数据采集与分析:从0到1构建你的‘数据雷达’——对比5大神器,代码实战全解析!

数据是量化交易的‘氧气’,而好的数据采集与分析是你的‘呼吸机’!本文5大神器+代码实战,总有一款适合你!(本文代码均经过测试,但请根据实际需求调整!

java专栏 731

学习Redis源码路径

学习 Redis 源码并剖析其技术栈是一个深入理解分布式系统、高性能网络编程和内存管理的绝佳途径。Redis 虽然代码量不大(约 10 万行 C 代码),但设计精妙,涵盖了事件驱动、内存管理、数据结构、持久化、集群协议等多个核心系统技术。

ZachLi的博客 1185

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Redis 学习

官网、各版本下载 Redis 学习

Sun 245

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

如何学习Redis?

在最近的时间里,我的很多工作都是围绕 Redis 展开的。在这期间,遇到了很多 Redis 相关的问题,例如访问延迟变大、部署运维参数配置不合理,等等,也狠狠地恶补了 Redis 方面的知识,看过书,读过源码,出过 Bug,踩过坑,一路走来,逐渐梳理出了一套高效的学习路径,把它分为三大模块:1. 掌握数据结构和缓存的基本使用方法;2. 掌握支撑 Redis 实现高可靠、高性能的技术;3. 精通 Redis 底层实现原理。先和你聊聊“如何高效学习 Redis”,后面会再分享一些学习心得和总结。

qq_37756660的博客 1263

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Redis快速学习+java操作Redis

本文介绍了Redis的基本概念、数据结构及常用操作命令。Redis是一种基于键值对的内存数据库,支持多种数据结构,包括字符串、哈希、列表、集合和有序集合。文章详细说明了如何启动Redis服务端、修改密码以及通过客户端连接Redis。此外,还列举了各类数据结构的常用命令,如字符串的SET、GET,哈希的HSET、HGET,列表的LPUSH、LRANGE等。最后,文章简要介绍了如何使用Java操作Redis,展示了通过Jedis客户端进行字符串操作的示例代码。

梓梓心的博客 1388

Redis 学习指南与资料分享

Redis 作为一款高性能内存数据库,在当今软件开发领域占据着重要地位。其丰富的数据类型、强大的功能特性以及广泛的应用场景,吸引着众多开发者深入学习。以下为你精心整理的 Redis 学习指南与实用资料分享,助力你高效掌握 Redis 技术。

zsnandzmn的博客 1269

Redis学习文档

目录一、概念1、特征2、关系型数据库和非关系型数据库的区别3、键的结构4、Redis的Java客户端5、缓存更新策略5.1、概念5.2、代码6、缓存穿透6.1、含义6.2、解决办法6.3、缓存空值代码举例6.4、布隆过滤器代码举例7、缓存击穿7.1、概念7.2、解决办法7.3、互斥锁代码举例7.4、逻辑过期代码举例8、缓存雪崩8.1、含义8.2、解决办法9、Lua脚本9.1、Lua教程9.2、Lua介绍9.2.1、概念9.2.2、Redis为Lua语言内置的lua函数9.2.3、在Redis-cli中执行L

qq_42449963的博客 3913

redis学习

redis基础知识

qq_47660541的博客 213

Redis 学习网站

分享一个 redis 学习网站:http://redisdoc.com

weixin_45417821的博客 369

Redis技术学习笔记

Redis 是一个高性能的key-value数据库。redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部 分场合可以对起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP,使用很方便。

qq_739988982的博客 1821

C++学习之redis

C++学习之redis

qq_27302885的博客 1379
上一篇: 使用阿里云服务器的上线配置
下一篇: Node学习(一)安装与卸载
智汇风渔AI小白
博客等级 码龄7年 1万+粉丝 179原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智汇风渔AI小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值