Redis使用
简单使用示例
- 连接服务器
./redis-cli -h ip地址 -p 端口号(默认是6379)
- 向Redis服务器发送命令
- ping:测试客户端与redis服务器的连接是否正常, 如果连接正常会收到回复pong
- set / get 设置数据和获取数据
- del 删除指定key的内容
- keys * ,查看当前库中所有的key值
Redis的数据结构
-
redis 是一种高级的key-value的存储系统,其中value支持五种数据类型
- 字符串(String)
- 哈希(hash)
- 字符串列表(list)
- 字符串集合(set)
- 有序字符串集合(sorted set)
-
key定义注意:
- key不要太长, 最好不要超过1024个字节, 这不仅消耗内存还有降低查找效率
- key不要太短, 如果太短会降低key的可读性
- 在项目中, key最好有个统一的命名规范
存储字符串
- 赋值: set key value: 例如 set name smx
- 取值: get key : 例如 get name
- 取、赋值: getset key value: 先获取该key的值 再设置该key的值
- 删除: del key
- 数值增减
- incr key: 将指定的key的value原子性递增1,如果该key不存在,其初始值为0, 在incr之后其值为1. 如果value的值不能转成整型,如hello,该操作将执行失败并返回相应的错误信息。
incr num // 可以不存在, 初始值为0, 结果为1
get num // "1"
incr num // 结果为2
incr company 指定key不能累加, 将抛异常 err value is not an integer or out of range
- decr key: 将指定key的value 原子性递减1, 如果该key不存在, 其初始值为0, 在 incr之后其值为 -1. 如果value 的值不能转成整型, 如hello, 该操作将执行失败并返回响应的错误信息。
存储hash
-
概述
redis 中的hash类型可以看成具有String Key 和 String Value 的map容器。所以该类型非常适合于存储值对象的信息。如UserName、PassWord和Age等。如果hash中包含很少的字段,那么该类型的数据也将占用很少的磁盘空间。每一个hash可以存储4294967295个键值对 -
赋值 hset key field value: 为指定的key设定field/value对
hset myhash username jack
-
赋值 hmset key field value [field2 value2]:设置key中的多个 field/value
hmset myhash2 username rose age 21
-
取值:
hget key field
:返回指定的key中的field的值 -
取多个值:
hmget key fields
: 获取key中的多个field的值hmget myhash2 name age
-
获取key中的所有的 field-value
hgetall key
-
删除
hdel key field [field]
: 可以删除多个字段 返回值是被删除字段的个数 -
删除整个hash:
del key
-
增加数字:
hincrby key field increment
hincrby myhash2 age 5
-
判断key中的field是否存在
hexists key field: hexists myhash2 score
-
获取key锁包含的field的数量
hlen key
-
获取所有的value
hvals key
存储list
-
概述
image.png
image.png
-
两端添加:
lpush key values[value1 value2...]
:在指定的key所关联的list的头部插入所有的values,如果该key不存在,该命令在插入之前创建一个与该key关联的空链表,之后再向该链表的头部插入数据。插入成功, 返回元素的个数
lpush mylist a b c
-
在list尾部添加元素:
rpush key values[value1 value2]
例如:rpush mylist 1 2 3
-
查看列表
lrange key start end
:获取链表中从start到end 的元素的值, start、end从0开始计数:也可以为负数,若为-1的表示链表尾部的元素, -2 则表示倒数第二个元素 以此类推 没有rrange
命令 -
两端弹出
-
lpop key
:返回并弹出指定的key关联的链表中的第一个元素,即头部元素。如果该key不存在,返回nil:若key存在,则返回链表的头部元素 -
rpop key
:从尾部弹出元素
-
-
获取列表元素中的个数
llen key
:返回指定key关联的链表中的元素的数量 -
扩展命令(了解):
-
lpushx key value
: 当key存在时 在头部插入元素 否则不插入 -
rpushx key value
: 尝试在尾部插入元素 -
lrem key count value
: 从头向尾遍历并删除count个值为value的元素, 如果count小于0,则从尾向头遍历并删除,如果count等于0 则删除链表中所有等于value的元素
-
![](https://img.haomeiwen.com/i15306475/2fef29d8d04b88c2.png)
![](https://img.haomeiwen.com/i15306475/31d3c2ebe8bfe13a.png)
-
lset key index value
:设置链表中的index的脚标的元素值, 0代表链表的头元素,-1代表链表的尾元素。操作链表的脚标不存在则抛异常
![](https://img.haomeiwen.com/i15306475/1e1c466f2f5da58d.png)
-
linsert key before | after pivot value
:在pivot元素钱或者后插入value这个元素
image.png
-
rpoplpush resource destination
:将链表中的尾部元素弹出并添加到目标链表的头部
image.png
image.png
存储 set
-
概述
image.png
-
添加元素:
sadd key values[value1 value2]
: 向set中添加数据,刚过该key的值已有则不会重复添加 -
删除set中指定成员:srem key members[member1 member2]
srem myset 1 2 3
-
获取集合中的元素:
-
获取所有成员:
smembers key
-
判断某个元素是否存在于某个set中
sismember key member
-
获取set成员个数:
scard key
-
随机返回set中的任意一个成员:
srandmember key
-
-
集合差运算A - B:
sdiff key1 key2
: 返回差集 -
集合的交集运算A 交 B:
sinter key1 key2 key3
: 返回交集 -
集合的并运算 A Union B:
sunion key1 key2 key3
:返回并集 -
将key1和key2相差的成员存储在另外一个集合上 :
sdiffstore destination key1 key2
-
将两个集合的交集存储在另外一个集合上:
sinterstore destination key1 key2
-
将两个集合返回的并集存储在目标集合上:
sunionstore destination key1 key2
-
使用场景
image.png
image.png
sortedset
-
概述
image.png
-
添加元素:zadd key score member score2 member2
image.png
-
获取元素
-
返回指定成员的分数:zscore key member
-
返回集合中的成员的数量: zcard key
-
删除元素:zrem key member1 member2
-
范围查询:
-
zrange key start end [withscores]
image.png
-
zrevrange key start stop [withscores]
image.png
-
按照排名范围删除元素:zremrangebyrank key start stop
-
按照分数范围删除元素: zremrangebyscore key min max
image.png
-
扩展命令
image.png
-
使用场景
image.png
Keys的通用操作
- key pattern: 获取所有与pattern匹配的key, 返回所有与该key匹配的keys。 *表示任意一个或多个字符, ?表示任意一个字符
- 删除指定的key:del key1 key2
- 判断key是否存在:exists key
- 为当前的key重命名: rename key newkey
- 设置过期时间:expire key n 单位:秒
- 获取该key所剩的超时时间:ttl key 如果没有设置超时 返回-1 超时不存在 返回-2
-
获取指定key的类型: type key
type key
Redis特性
-
多数据库
image.png
image.png
-
将newkey 一直到1号库: move newkey 1
移植
-
服务器命令
image.png
image.png
image.png
-
消息订阅和发布
image.png
image.png
-
事务
image.png
image.png
image.png
image.png
redis使用场景
![](https://img.haomeiwen.com/i15306475/435f15630af0b05a.png)
redis 持久化
Jedis的使用
- 导入两个jar包
commons-pool2-2.3.jar 和 jedis-2.7.0.jar
- 简单示例
Test
public void testJedisSingle()
{
// 1. 设置ip地址和端口号
Jedis jedis = new Jedis("localhost", 6379);
// 2. 设置数据
jedis.set("name", "smx");
// 3. 获取数据
String name = jedis.get("name");
System.out.println("name:" + name);
// 4.释放资源
jedis.close();
}
-
连接超时问题
image.png
网友评论