Java 和 Redis 的示例(1)

1. 背景

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

2.知识

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

特点:

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

Redis 是一个键值对存储:

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

指令格式:

set key value

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

get kk1

持久化

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

客户端连接工具:

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

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

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

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

multi
hincrby groups:1percent balance -9000000000
hincrby groups:99percent balance 9000000000
exec

key 的过期时间

  • expire 可以指定一个 key 的过期时间。
  • ttl 命令 可以找出一条数据还能活多久
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 名字,写入一个值的同时指定过期时间,示例:

127.0.0.1:6379> setex ppp 10 'hello'
OK
127.0.0.1:6379> ttl ppp
4

3. 安装

请参考:https://www.jianshu.com/p/52350a764bd3
本文略。

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

4.1 使用 redis-cli

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

4.2 使用密码连接到指定redis

./redis-cli -h 127.0.0.1 -a 123456 --raw

-h 后是服务器地址
-a 是密码
--raw 用来显示中文

4.3 选择一个“库”

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

127.0.0.1:6379> select 1
OK

4.4 使用"命令字"

示例:

127.0.0.1:6379[1]> set k1 v1
OK
127.0.0.1:6379[1]> get k1
"v1"

写一个 json 格式的:

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 在尾部追加

示例:

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 增加指定数字
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

格式:

hset key field value [fileld value]

指令字:

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

field 和 value 可以多个键值对。

示例:

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 查看长度

示例:

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 交集

示例:

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 倒序排名
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

127.0.0.1:6379> keys *
paiming
age
zhang3
duiwu1

6. Java 操作 Redis

本文太长了,参考我的另一篇文章:https://www.jianshu.com/p/52c72b720062

7.参考:

Redis 学习笔记2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值