前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java 和 Redis 的示例(1)

Java 和 Redis 的示例(1)

作者头像
张云飞Vir
发布2021-07-20 11:32:35
3610
发布2021-07-20 11:32:35
举报
文章被收录于专栏:写代码和思考写代码和思考

1. 背景

本文简要介绍 Redis 和完成一个示例。

2.知识

Redis(Remote Dictionary Server ),即远程字典服务。它是一个key-value存储系统。它是内存数据存储,因此很快,常常作为缓存使用。

特点:

  • key-value存储系统, 支持多种数据结构
  • 数据都是缓存在内存中,周期性存储到磁盘
  • Redis支持主从同步

Redis 是一个键值对存储:

  • Key 定义了如何标识数据块。
  • Values 表示 key指向的 实际数据。Values 可以是任何类型,可以存储字符串,整数,或序列化对象(比如 JSON, XML )

指令格式:

代码语言:javascript
复制
set key value

比如: set kk1 vv1 就代表了 将值 vv1 存放在 kk1 为key 的位置。可以直接 get 取出。

代码语言:javascript
复制
get kk1 

持久化

  • Redis 基于一定量 key 的变更,来触发对数据库进行快照,保存到硬盘上
  • Redis 支持增量模式

客户端连接工具:

  • 它自带了一个客户端工具: redis-cli
  • 也可以选择 QuickRedis 工具。

事务(Transactions)

Redis 所有的命令都是原子性的,包括那些一次可以执行多项操作的命令也一样。此外,在使用多命令的时候,Redis 支持事务。

Redis 确实是单线程的,这就是为什么每个命令都是原子性的原因。

一次只能执行一个命令

事务的使用

使用 multi 命令, 作为开始。 使用 exec 执行命令。或者 discard 来放弃取消执行。

代码语言:javascript
复制
multi
hincrby groups:1percent balance -9000000000
hincrby groups:99percent balance 9000000000
exec

key 的过期时间

  • expire 可以指定一个 key 的过期时间。
  • ttl 命令 可以找出一条数据还能活多久
代码语言:javascript
复制
127.0.0.1:6379> set page 30
OK

127.0.0.1:6379> expire page 10
1

127.0.0.1:6379> ttl page
23

setex 名字,写入一个值的同时指定过期时间,示例:

代码语言:javascript
复制
127.0.0.1:6379> setex ppp 10 'hello'
OK
127.0.0.1:6379> ttl ppp
4

3. 安装

请参考:https://cloud.tencent.com/developer/article/1608185

本文略。

4. 使用命令行操作 redis 的示例

4.1 使用 redis-cli

编译后的 redis-cli 在你的 redis-6.2.4/src 文件夹下,使用它连接Redis服务。

4.2 使用密码连接到指定redis

代码语言:javascript
复制
./redis-cli -h 127.0.0.1 -a 123456 --raw

-h 后是服务器地址

-a 是密码

--raw 用来显示中文

4.3 选择一个“库”

在 Redis 中,通过一个数字来标识数据库,默认开始标识是 0。

代码语言:javascript
复制
127.0.0.1:6379> select 1
OK

4.4 使用"命令字"

示例:

代码语言:javascript
复制
127.0.0.1:6379[1]> set k1 v1
OK
127.0.0.1:6379[1]> get k1
"v1"

写一个 json 格式的:

代码语言:javascript
复制
127.0.0.1:6379[1]> set users:zhang3 '{"name":"zhang3" "age":16 }'
OK

像上面的 users:zhang3 ,用冒号分割是一种约定习惯,前面表达一个分类,这里表达了“一个叫zhang3的用户”。这是可选的行为。

5. Redis 的五种数据结构

五种数据结构:

  • (1) Strings (字符串结构)
  • (2) Hashes (哈希结构)
  • (3) Lists (列表结构)
  • (4) Sets (集合结构)
  • (5) Sorted Sets (有序集合结构)

5.1 字符串类型 ( Strings )

指令字有:

  • set 写入
  • get 取出
  • strlen 获得长度
  • getrange 获得范围区间
  • append 在尾部追加

示例:

代码语言:javascript
复制
127.0.0.1:6379> set txt1 '白日依山尽,黄河入海流。欲穷千里目,更上一层楼'
OK

127.0.0.1:6379> get txt1
白日依山尽,黄河入海流。欲穷千里目,更上一层楼

127.0.0.1:6379> strlen txt1
69

127.0.0.1:6379> getrange txt1 18 24
黄河?

append txt1 ' --- 唐诗一首'
127.0.0.1:6379> get txt1
白日依山尽,黄河入海流。欲穷千里目,更上一层楼 --- 唐诗一首

value 可以是数字

如果value 是数字的话,可以做做累加。

指令字:

  • incr 累加1
  • incrby 增加指定数字
代码语言:javascript
复制
127.0.0.1:6379> set age 1
OK

127.0.0.1:6379> get age
1

127.0.0.1:6379> incr age
2

127.0.0.1:6379> incrby age 10
12

5.2 Hashes (哈希结构)

对至值的内容 可以是一个 Hash 表,类似 Java 里的 HashMap

格式:

代码语言:javascript
复制
hset key field value [fileld value]

指令字:

  • hset 写入
  • hget 取出
  • hdel 删除一个字段
  • hkeys 获得所有 key
  • hgetall 后的所有内容

field 和 value 可以多个键值对。

示例:

代码语言:javascript
复制
127.0.0.1:6379> hset zhang3 name zhang3 age 16
2

# 获取全部
127.0.0.1:6379> hgetall zhang3
name
zhang3
age
16

127.0.0.1:6379> hget zhang3 name
zhang3

127.0.0.1:6379> hkeys zhang3
name
age

# 删除字段
127.0.0.1:6379> hdel zhang3 age
1

5.3 Lists (列表结构)

它的 value 以数组形式的 存储。不过它更类似一个双向链表。

指令字有:

  • lpush 从左侧 push
  • rpush 从右侧 push
  • lrange 查看指定范围的元素
  • ltrim 仅保留
  • llen 查看长度

示例:

代码语言:javascript
复制
127.0.0.1:6379> lpush duiwu1 zhang3 li4
2

127.0.0.1:6379> lpush duiwu1 wang5
3

127.0.0.1:6379> llen duiwu1
3

127.0.0.1:6379> lrange duiwu1 0 3
wang5
li4
zhang3

5.4 Sets (集合结构)

集合结构被用于存储唯一值。

集合是无序的。

它提供了一组基于集合的操作,比如说并集运算。

集合非常适用于:

  • 需要标记或者跟踪那些有重复属性的值的时候。
  • 或者我们希望使用集合的交并操作的时候。

指令字:

  • sadd 添加
  • sismember 检索
  • sinter 交集

示例:

代码语言:javascript
复制
127.0.0.1:6379> sadd zhang3_friedns li4 wang5
2

127.0.0.1:6379> sadd wang5_friends li4 zhao6
2

127.0.0.1:6379> sismember zhang3_friedns li4
1

127.0.0.1:6379> sinter zhang3_friedns wang5_friends
li4

5.4 Sorted Sets (有序集合结构)

有序集合结构就像集合结构一样,但是有权重(score)。

权重提供了排序和排名功能

指令字:

  • zadd 添加
  • zcount 计算一个区间的数量
  • zrank 排在第几名
  • zrevrank 倒序排名
代码语言:javascript
复制
127.0.0.1:6379> zadd paiming 80 zhangsan 70 lisi 30 anni
3

127.0.0.1:6379> zcount paiming 0 60
1

127.0.0.1:6379> zrevrank paiming anni
2

127.0.0.1:6379> zrank paiming anni
0

5.5 其他扩展

keys : 按模式搜索有哪些key

代码语言:javascript
复制
127.0.0.1:6379> keys *
paiming
age
zhang3
duiwu1

6. Java 操作 Redis

本文太长了,参考我的另一篇文章:https://cloud.tencent.com/developer/article/1849675

7.参考:

Redis 学习笔记2

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 背景
  • 2.知识
  • 3. 安装
  • 4. 使用命令行操作 redis 的示例
    • 4.1 使用 redis-cli
      • 4.2 使用密码连接到指定redis
        • 4.3 选择一个“库”
          • 4.4 使用"命令字"
          • 5. Redis 的五种数据结构
            • 5.1 字符串类型 ( Strings )
              • 5.2 Hashes (哈希结构)
              • 5.3 Lists (列表结构)
                • 5.4 Sets (集合结构)
                  • 5.4 Sorted Sets (有序集合结构)
                    • 5.5 其他扩展
                    • 6. Java 操作 Redis
                    • 7.参考:
                    相关产品与服务
                    云数据库 Redis
                    腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档