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基础操作的主要内容,如果未能解决你的问题,请参考以下文章

Java学习---Redis基础操作

Java学习---Redis基础操作

java学习---Redis基础操作

java学习---Redis基础操作

好程序员Java学习路线分享5分钟了解基数排序

Redis学习-09 hyperloglog基本操作