Java学习---Redis基础操作
Posted 易小顺
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java学习---Redis基础操作相关的知识,希望对你有一定的参考价值。
Redis基础操作
1、Redis的数据结构
Redis
是一种基于内存管理的数据库,并且提供一定的持久化功能,它是一种键值(key - -value)类型的非关系型数据库,和 hash
的索引方式一样,使用键作为作为索引就可以找到当前进行缓存的数据,并且将数据返回给程序的调用者。
当前的 Redis
支持 6种 数据类型,分别是字符串(String
),列表(List
),集合(Set
),哈希结构(Hash
),有序集合(Zset
)和基数计算(HyperLogLog
)。
数据类型 | 存储的值信息 | 说明 |
---|---|---|
String | 可以是字符串、整数和浮点数 | 可以对字符串进行操作,比如增加字符或者是求子串;如果是整数或者是浮点数,可以实现计算例如自增功能等。 |
List | 表示为一个链表,每一个节点都包含一个字符串 | 支持双端、偏移裁剪操作,可以一次读取一个或者多个节点,按照条件查找删除。 |
Set | 无序集合,每个元素都是一个字符串而且唯一 | 支持集合之间的操作,最多还是用于去重。 |
Hash | 相当于 Map 结构 | 支持增、删、改、查操作。 |
Zset | 有序集合,根据指定的分值来进行排序 | 支持增、删、改、查操作,可以按照分值进行范围查询。 |
HyperLogLog | 作用是计算重复的值,以确定存储的数量 | 只提供基数的运算并且没有响应。 |
2、常用指令
对于指令的介绍在 http://doc.redisfans.com/index.html 中有着明确的定义,这里对简单常用的指令进行简单的回顾使用。
2.1、String 基本操作
- 简单赋值:set key value
127.0.0.1:6379> set name beordie
ok
- 简单取值:get key
127.0.0.1:6379> get nameshell
"beordie"
- 一次设置多个键值:mset key value [key value…]
127.0.0.1:6379> mset name lisi age 13
OK
- 获取多个键值:get key [key…]
127.0.0.1:6379> mget name age
1) "lisi"
2) "13"
- 删除键值:del key
127.0.0.1:6379> del name
(integer) 1
2.2、字符串数字自增自减
当存储的字符串是整数时,Redis
提供了一个实用的命令 INCR | DECR,其作用是让当前键值递增递减,并返回计算后的值,偏移的值可以进行指定。
- 递增数字:incr key
127.0.0.1:6379> incr age
(integer) 14
- 递增指定偏移量:incrby key increment
127.0.0.1:6379> incrby age 2
(integer) 16
- 递减数字:decr key
127.0.0.1:6379> decr age
(integer) 15
- 递减指定偏移量: decrby key increment
127.0.0.1:6379> decrby age 2
(integer) 13
2.3、Hash 散列
提供字段和字段值的映射,字段值 只支持 字符串类型,不支持其他数据类,相当于对象格式的存储(key
表示对象、filed
表示字段、value
表示属性值)。
- 简单赋值:hset key filed value
127.0.0.1:6379> hset user name lisi
(integer) 1
127.0.0.1:6379> hset user name zhangsan
(integer) 0
hset
命令不区分插入和更新操作,靠返回值来判别,插入返回 1 ,更新返回 2 。
- 简单取值:hget key filed
127.0.0.1:6379> hget user name
"zhangsan"
- 多个字段赋值:hmset key filed value [filed value…]
127.0.0.1:6379> hmset user1 name lisi age 14
OK
- 多个字段取值:hmget key filed [filed…]
127.0.0.1:6379> hmget user1 name age
1) "lisi"
2) "14"
- 获取所有的字段和值:hgetall key
127.0.0.1:6379> hgetall user
1) "name"
2) "zhangsan"
- 删除字段:hdel key field [field…]
127.0.0.1:6379> hdel user name
(integer) 1
2.4、List 列表
Redis
的列表是采用双向链表来实现的,具有较高的更改能力,但是查询速度较慢,元素的插入是有序的。
- 左边增加元素:lpush key value [value…]
127.0.0.1:6379> lpush label a1 a2
(integer) 2
- 左边删除元素:lpop key
127.0.0.1:6379> lpop label
"a1"
- 右边增加元素:rpush key value [value…]
127.0.0.1:6379> rpush label a3
(integer) 1
- 右边删除元素:rpop key
127.0.0.1:6379> rpop label
"a3"
- 获取列表中元素的个数:llen key
127.0.0.1:6379> llen label
(integer) 1
- 查看区间元素:lrange key start stop
127.0.0.1:6379> lrange label 0 1
1) "a2"
区间范围是闭区间,索引从零开始计算,也可以是负数,表示从尾部开始,-1 就代表最后一个元素
2.5、Set 集合
- 增加元素:sadd key member [member…]
127.0.0.1:6379[2]> sadd user zhangsan
(integer) 1
127.0.0.1:6379[2]> sadd user lisi
(integer) 1
127.0.0.1:6379[2]> sadd user lisi
(integer) 0
- 删除元素:srem key member [member…]
127.0.0.1:6379[2]> srem user lisi
(integer) 1
- 查看所有元素:smembers key
127.0.0.1:6379[2]> smembers user
1) "zhangsan"
2) "lisi"
- 查看是否包含键:sismember key member
127.0.0.1:6379[2]> sismember user lisi
(integer) 0
127.0.0.1:6379[2]> sismember user zhangsan
(integer) 1
2.6、Zset 集合
SortedSet
又叫 Zset
,是有序集合,元素可进行排序但是唯一,和一般集合的区别就在于为每个元素增加了一个分数属性,可以通过这个分数来进行排序。
- 增加元素:zadd key score member [score member…]
如果已经存在了一个同名元素那就会替换掉当前的分数值,保持原元素的数据。
127.0.0.1:6379[2]> zadd object 10 english 12 math
(integer) 2
- 按照排序区间进行数据的返回:zrevrange key start stop [whitscores]
后面的指定参数表示是否将元素对应的分数一起返回
127.0.0.1:6379[2]> zrevrange object 0 3
1) "math"
2) "english"
- 获取元素的分数:zscore key member
127.0.0.1:6379[2]> zscore object math
"12"
- 删除元素:zrem key member [member…]
127.0.0.1:6379[2]> zrem object math
(integer) 1
3、HyoperLogLog
HyoperLogLog
是一种使用随机化的算法,以少量内存提供集合中唯一元素数量的近似值,简单的说就是输入一个数据集合,返回集合中唯一数据的近似数量。
-
概念:
基数:集合中不同元素的个数,例如‘apple’,‘orange’,‘apple’的基数为2
估算值:算法给出的数据不是精确的,波动的幅度可控。
3.1、优点
HyoperLogLog
优点是既是输入元素的集合数量或者是体积非常的大,计算基数所需要的空间总是固定的,并且消耗量较小。
在 Redis
里面,每个 HyoperLogLog
键只需要花费 12KB 的内存就可以计算接近 2^64 个元素集合的基数,和其他的存储数据的基数计算方法有着鲜明的内存消耗对比。
由于 HyoperLogLog
低内存计算的特点,因此不会对元素进行存储,不能像集合类型那样进行元素的返回,只会根据输入元素来计算基数。
3.2、相关命令
- 添加元素:pfadd key element [element…]
127.0.0.1:6379> pfadd fruit apple orange apple
(integer) 1
- 计算基数:pfcount key [key…]
127.0.0.1:6379> pfcount fruit
(integer) 2
- 合并集合:pfmerge destkey sourcekey [sourcekey]
127.0.0.1:6379> pfmerge food fruit
OK
4、其他命令
- 指定条件查询获取键:keys pattern
# *号表示匹配所有的条件
127.0.0.1:6379> keys *
1) "food"
2) "fruit"
- 查看是否包含一个键:exists key
127.0.0.1:6379> exists food
(integer) 1
- 删除键:del key
127.0.0.1:6379> del fruit
(integer) 1
- 重命名键:rename oldkey newkey
127.0.0.1:6379> rename food fruit
OK
- 返回值的类型:type key
127.0.0.1:6379> type fruit
string
- 设置生存周期:expire key seconds
127.0.0.1:6379> expire fruit 120
(integer) 1
- 查看生存时间剩余:ttl key
127.0.0.1:6379> ttl fruit
(integer) 82
- 清除时间:persist key
127.0.0.1:6379> persist fruit
(integer) 1
- 获取配置节点信息:info
- 删除当前数据库的所有键:flushdb
- 删除所有数据库的所有键:flushall
5、数据库切换
一个 Redis
实例包含多个数据库,键值在多个数据库之间是不可见的,在客户端可以选定使用哪一个数据库。和常用的 mysql
数据库的切换不一样,Redis
的数据库数量是在配置文件中进行预先定义的,默认是 16 个数据库,最多也只提供 16 个,下标从 0 开始计数。
- 数据库切换:select index
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
以上是关于Java学习---Redis基础操作的主要内容,如果未能解决你的问题,请参考以下文章