Redis学习笔记
概念篇
Redis数据库(REmote DIctionary Server):
- 定义:开源的、使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存、亦可持久化的日志型、Key-Value数据库。
- 值的类型
- 字符串-string
- 最基本的数据类型
- 相关命令:
set <key> <value> get <key> 示例: set tom "cat" get tom
- 哈希-hash
- 定义: string 类型的 field 和 value 的映射表
- 相关命令:
hmset <key> <field1> <value1> <field2> <value2> hget <key> <field1> 示例: // 设置2个field-value对 HMSET runoob field1 "Hello" field2 "World" HGET runoob field1
- 列表-list
- 定义:简单的字符串列表,可以左插到列表头部,也可以右插到列表尾部。
- 相关命令:
// lpush-list push lpush <key> <value> 示例: lpush runoob redis lpush runoob mongodb
- 集合-set
- 定义:String类型的无序集合。
- 相关命令
// sadd-set add sadd <key> <member> 示例: sadd runoob redis sadd runoob mongodb
- 添加一个 string 元素到 key 对应的 set 集合中,成功返回 1,如果元素已经在集合中返回 0。
- 集合内元素不允许重复。
- 有序集合-zset(sorted sets)
- 定义:string类型元素的集合,且不允许重复的成员。
- 区别:每个元素都会关联一个double类型的分数,redis正是通过分数来为集合中的成员进行从小到大的排序。
- 相关命令:
// zadd-zset add zadd <key> <score> <menber> 示例: zadd runoob 0 redis
- 字符串-string
- Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存。
Redis安装:
- redis-server:redis服务程序
- redis-cli:测试客户端
Redis命令篇
启动Redis客户端:
- Redis客户端:redis-cli
- 相关命令:
// 连接本地的Redis服务 redis-cli // 连接远程的Redis服务 redis-cli -h <hostname> -p <portname> -p <password> 示例: redis-cli -h 127.0.0.1 -p 6379 -a "mypass"
Redis事务:
- 定义:一次执行多个命令 / 打包的批量执行脚本。
- 事务的3个阶段:
- 开始事务
- 命令:
multi
- 附:
discard
:取消事务
- 命令:
- 命令入队
- 执行事务
- 命令:
exec
- 命令:
- 开始事务
- Redis事务的执行不具备原子性,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。。
Redis脚本:
eval <script> <numkeys> <key> [<key>...] <arg> [<arg>...] 示例: EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second
eval命令参数说明:
参数 描述 script 脚本代码 numkeys key的数量 key 键 arg 参数 Redis脚本使用 Lua 解释器来执行脚本。
Redis 2.6 版本通过内嵌支持 Lua 环境。
Redis连接:
- 相关命令:
// 验证密码是否正确 auth <password> // 查看Redis服务是否运行 ping // 关闭连接 quit // 切换到指定序号的数据库 select <index>
- 相关命令:
高级篇
从Redis驱动下载页面下载Redis For Java的驱动包。
常用API:
// 连接redis服务 Jedis jedis = new Jedis("localhost"); // 验证Redis服务密码 jedis.auth("123456"); // 插入字符串数据 jedis.set("key1", "value1"); // 查看字符串数据 jedis.get("key1"); //插入列表数据 jedis.lpush("key2", "value2_1"); jedis.lpush("key2", "value2_2"); //获取列表数据 List<String> list = jedis.lrange("key2", 0, 2);