大家好,又见面了,我是你们的朋友全栈君。
一、redis 的启动停止连接命令
ifconfig 查询ip
———- redis-4.0.11(本机 linux7系统)————
代码语言:javascript复制cd wslxm/redis/redis-4.0.11 切到redis目录
./src/redis-server redis.conf 启动 redis
./src/redis-cli -p 6379 shutdown save 关闭 redis
ps aux|grep redis 查询线程(ps aux所有线程)
./src/redis-cli -h 192.168.0.105 -p 6379 连接 redis,quit 退出连接
save: 更新到本地(硬盘),下次启动从本地读取
quit
其他
代码语言:javascript复制flushDB 清空当前db数据(db:数据库)
flushall 清空所有db数据
select 数据库选择(0 ~ 15)
info 获取服务器信息
dbsize 当前 db key的数量
keys* 返回所有key, keys map*( key 中 key)
exists key 是否存在
del 删除 key
rename 重命名 key
type 返回值类型(五种储存方式)
----------------- 其他命令 ---------------------------
EXPIRE key seconds 设置key的生存时间(单位:秒)
TTL key 查看key生于的生存时间
PERSIST key 清除生存时间
PEXPIRE key milliseconds 生存时间设置单位为:毫秒
二、redisClient可视化工具
下载地址:http://www.uzzf.com/soft/78115.html 下载后直接解压,无需安装,
开启redis服务后,直接运行 .exe 文件运行,输入信息连接即可,其中password,若redis服务为配置密码,则不用填。
成功后界面如下,默认数据库数量为16 db0-db15, 选择数据库(如果是命令行操作,默认是操作db0,要指定其他库,需要select 1(1为数据库下标)),新建自己想建的数据类型即可,这不像关系型数据库,并没有表的概念。
其使用非常简单,自己慢慢玩一会儿就会了的。
RedisClient是Redis客户端的GUI工具,使用Java swt和jedis编写,可以方便开发者浏览Redis数据库。该软件支持简体中文,非常适合国内用户使用,不需要汉化就可以直接使用。RedisClient将redis数据以资源管理器的界面风格呈现给用户,可以帮助redis开发人员和维护人员方便的建立,修改,删除,查询redis数据,完全不需要了解redis命令。可以让用户方便的编辑数据,可以剪切,拷贝,粘贴redis数据,可以导入,导出redis数据,可以对redis数据排序。
1、使用服务器管理,支持服务器密码认证 2、根据喜好管理redis数据 3、管理redis数据,包括: 新的redis数据:字符串String,列表List,哈希hash,集合set,有序集合Sorted set。
2、无法使用ip连接解决 遇到主机redis使用localhost和127.0.0.1都可以访问,但是使用主机ip访问就连接不上,三番查阅终得解药,拿好不谢!
1.打开 redis.conf 文件(redis 安装目录下) 2.将69行处 bind 127.0.0.1注释掉(加#注释)
3.将 88行处 protected-mode yes 改为protected-mode no;
4.重启redis服务,即可使用ip访问redis了
代码语言:javascript复制./src/redis-cli -p 6379 shutdown save 关闭 redis
./src/redis-server redis.conf 启动 redis
ps aux|grep redis 查看线程
./src/redis-cli -h 192.168.142.128 -p 6379 连接命令
注意:如果在生产环境中,只有主机访问redis,则不需要修改,保证redis数据安全,使用localhost或127.0.0.1访问即可! 3、无法连接防火墙放行 执行下面命令 – 防火墙放行 6379 端口
代码语言:javascript复制/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
三、java 操作redis(jedis)
redis –> nosql 1、键值对方式储存 2、主要用于大量数据的高服务负载 3、优势,快速查询(集群 –> 多台redis) 4、缺点,缺少关系结构 1、pom依赖 Springboot项目自动装配,非jedis===============
代码语言:javascript复制<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
Maven项目依赖=========================
代码语言:javascript复制<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.2</version>
</dependency>
**Jedis 依赖 (只需添加此依赖) **==============================
代码语言:javascript复制<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.6.0</version>
</dependency>
2、jedis数据连接 1、连接方式一 优点:自行封装一个连接池对象,每次请求不用重复连接redis数据库
//=================================================================
代码语言:javascript复制//创建连接
public static void connection(){
JedisPoolConfig jpc = new JedisPoolConfig(); //创建redis连接池配置对象
jpc.setMaxIdle(20); //最大连接空闲数
jpc.setMaxTotal(50); //最大连接数
JedisPool jp = new JedisPool(jpc, "192.168.142.128", 6379); //创建连接池对象
Jedis jedis = jp.getResource();
//数据操作
jp.returnResource(jedis);
}
//=================================================================
2、连接方式二 缺点: jedis 每一次使用都会重新连接redis
代码语言:javascript复制public void test() {
Jedis jedis = new Jedis("192.168.100.132", 6379);//获取连接
jedis.set("address", "beijing"); //保存数据
String address = jedis.get("address"); //读取数据
jedis.close(); //关闭连接
}
3、连接工具类UtliRedis
public class UtliRedis {
//ip地址,端口可以抽离到配置文件
//==============创建连接池==================
public static JedisPool connection(){
//创建redis连接池配置对象
JedisPoolConfig jpc = new JedisPoolConfig();
//最大连接空闲数
jpc.setMaxIdle(20);
//最大连接数
jpc.setMaxTotal(50);
//创建连接池对象
JedisPool jp = new JedisPool(jpc, "192.168.142.128", 6379);
return jp;
}
//===============归还连接=================
public static void shutdown(JedisPool jp,Jedis jedis){
jp.returnResource(jedis);
}
//调用方法(main)
public static void main(String[] args) {
//获取连接
JedisPool jp = UtliRedis.connection();
//获取jedis对象
Jedis jedis = jp.getResource();
//保存数据到redis
jedis.set("name","wangsong");
//读取数据
String nmae = jedis.get("name");
System.out.println(nmae);
//归还连接
UtliRedis.shutdown(jp,jedis);
}
}
五、数据类型及api
数据类型: 1 、字符串(string) 2、散列(hash) 3、列表(set) 4、集合(list) 5、有序集合(storeset)
1、string 字符串
字符串 全为 键值对模式 (name”,“ws_兮”) ————方法大全 – 对应 linux 和 java方法 —————————–
代码语言:javascript复制set 添加数据(key存在覆盖原数据)
mset 添加数据(key存在覆盖原数据)
setnx 添加数据(key存在不·储存)
setex 添加数据 1.key 2.key有效期(秒) 3.value
append key不存在添加数据, key存在追加
get 读取数据key
mget 读取数据key
getrange 截取 1.key 2.开始 3、结束
getSet 获取并更改(类似set 覆盖数据)
del 删除数据(1-成功,0-失败)
flushDB 清空数据
strlen 获取值的长度
exists 判断 key是否存在(1-存在,0-不存在)
java 方法 和 linux 命令 –> 对应方法大全
linux命令举例列——————–
代码语言:javascript复制set name ws_兮
get name
java举列————————– value 可以使用集合
代码语言:javascript复制jedis.set("name", "ws_兮");
//单值取
jedis.get("name");
//多值存
jedis.mset(new String[]{"name"," ws_兮 ","age","18"});
//多值取
jedis.mget(new String[]{"name","age"});
————– 注 ———————- User对象 à json(string) à redis 可以使用 json , 也把所有属性拼成一个 value 值 如:(”name“,“小爱,小美,小溪,小微”) 缺点:取值凌乱,value数据太多无法分辨
2、List 集合
有序,可以重复 key value jedis.lpush(“lists”, “LinkedList”); ———–方法大全 – 对应 linux 和 java方法 —————————–
代码语言:javascript复制lpush 向列表左填加元素
rpush 向列表右填加元素
LINSERT 插入元素(指定位置)
lrange 获取区间内元素(所有: 0 -1 )
lindex 获取指定索引值
lset 获取多个指定索引值
LLEN 获取元素个数(长度)
LPOP 列表左弹出一个元素(删除并返回)
RPOP 列表右弹出一个元素(删除并返回)
LTRIM 删除 指定范围元素
LREM 删除指定数量的指定值的元素 --> LREM key count value ||
count --> 负数:左边开始删除 正数:右边开始删除 0 :全部删除
----------------------- linux 命令实列 -------------------------------------
lpush list1 2 3 左添加(建议 –> key = list:1) llen list 获取元素个数 lrange list 0 2 获取区间元素(0 2) lrem list 5 lxm 删除 5个value 为 lxm 的元素(从左边)
————————— java 实列 —————————————– value 值可以为集合
代码语言:javascript复制jedis.lpush("lists", "LinkedList"); //左添加
jedis.rpush("messages", "Hello how are you?") //右添加
jedis.lrange("messages", 0, -1) //获取区间值(索引)
jedis.llen("lists") //获取元素长度
jedis.lrem("lists", 1, "vector") //删除 1个为 vector 的值
jedis.ltrim("lists", 0, 1)) //删除 区间外的值
jedis.lset("lists", 0, "hello list!") //修改(指定索引)
jedis.sort("lists") //排序
jedis.lpop("lists") //列表出栈
jedis.lrange("lists", 0, -1) //整个列表出栈
jedis.flushDB() //清空数据
思路: 在redis中创建商品评论列表 用户发布商品评论,将评论信息转成json存储到list中。 用户在页面查询评论列表,从redis中取出json数据展示到页面。 定义商品评论列表key: 商品编号为1001的商品评论key:items: comment:1001 192.168.101.3:7001> LPUSH items:comment:1001 ‘{“id”:1,“name”:“商品不错,很好!!”,“date”:1430295077289}’
3、Set 列表
无序,不能重复 jedis.zadd(“key”,“value”);
————-方法大全 – 对应 linux 和 java方法 —————————-
代码语言:javascript复制SADD 添加元素
SREM 删除元素
SMEMBERS 获取所有元素
SISMEMBER 判断是否存在元素(需指定 key和 value)
——————— linux 示列 ————————————
代码语言:javascript复制sadd key a b c 添加
srem key b c 删除
————————java 示列 ———————————
代码语言:javascript复制jedis.zadd("key","value"); //添加(value,可以为集合)
4、Hash 散列map
hash叫散列类型,字段值只能是字符串类型 key 字段名 字段值 key name == map 如:(“key”,“name”,“ws-兮”)//根据 key name 设置值
——————-方法大全 – 对应 linux 和 java方法 —————————–
代码语言:javascript复制HSET 设置单值 无字段添加返回 1,有字段覆盖返回 0
HMSET 设置多值
HSETNX 字段不存在添加值
hincrBy 追加值
HGET 取值
HMGET 取多值,根据设置方式去
HGETALL 取所有 key下的值
HKEYS 只取字段名,不取 字段值(字段值 == value)
HVALS 只取 字段值,不取字段名,
HEXISTS 判断字段是否存在
HLEN 获取字段值的数量
HDEL 删除 (成功 返回 1,失败 0)
flushDB 清空
————————- linux 命令举例—————————————
代码语言:javascript复制hset user name 小艾 存单值
hget user name 取单值
hmset user id 1 name ws age 20 存多值
hmget user id name age 取多值
——————java jedis 举例 ————————-
代码语言:javascript复制jedis.hset("kid", "name","小艾"); 存单值
jedis.hget("kid", "name"); 取单值
jedis.hdel("kid", "name") 删除
jedis.hmset("kid", map); 存多值,map = 键值对
jedis.hmget("kid"); 获取多值 --> map集合
jedis.hkeys("kid") 获取所有 map的 key
jedis.hvals("kid") 获取使用 map的 value
jdis.hlen("kid") 获取集合长度
jedis.hdel("kid","age"); 删除 map 中的某的值
jedis.exists("kid") 是否存在
jedis.flushDB() 清空数据
建议用法 ———- HGETALL items:1001
- “id”
- “3”
- “name”
- “apple”
- “price”
- “999.9” key = 对象名 :id (如 items:1001) –> 这样可以通过 对象名 :id获取对应id 的 map集合属性
5、sorted set 有序集合
有序 – 按分数排序 key 分数 value jedis.zadd(“hackers”, 1940, “Alan Kay”);
————-方法大全 – 对应 linux 和 java方法 ——————————–
代码语言:javascript复制zadd 添加 (值:分数 value)
ZRANGE 获取指定索引的区间值 (从小到大排序)
ZREVRANGE 获取指定索引的区间值 (从大到小排序)
ZRANGEBYSCORE 获取指定分数的区间值
ZSCORE 获取分数 (key value)
ZINCRBY 增加分数
ZCARD 获取元素数量
ZCOUNT 获取元素数量(指定分数范围)
ZRANK 获取元素排名(小到大)
ZREVRANK 获取元素排名(大到小)
zrem 删除(key value)
ZREMRANGEBYRANK 删除(索引范围)
ZREMRANGEBYSCORE 删除(分数范围)
—————————- linux 示·列———————————————–
代码语言:javascript复制zadd key 80 zhangsan 89 lisi 添加(分数存在更新分数)
zrange key 0 2 获取指定索引的区间值(从小到大)
zrange key 0 1 WITHSCORES 同上( 外加获取分数)
—————————- java 示·列 ———————————————– value 值可以为集合
代码语言:javascript复制jedis.zadd("hackers", 1940, "Alan Kay"); //添加
jedis.zrange("hackers", 0, -1) //获取区间值(小到大)
jedis.zrevrange("hackers", 0, -1) //获取区间值(大到小)
jedis.zscore("zset", "value") //获取value值的分数
jedis.zcard("zset") //获取元素数量
jedis.zrem("zset", "zset!") //删除
jedis.flushDB() //清空数据
- 本文到此结束,如果觉得有用,动动小手点赞或关注一下呗,将不定时持续更新更多的内容…,感谢大家的观看!
关注公众号【兮家】,不定时分享干货内容哦
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/182809.html原文链接:https://javaforall.cn