Redis学习笔记

简介:

1 安装

$ wget http://download.redis.io/releases/redis-3.0.7.tar.gz
$ tar xzf redis-3.0.7.tar.gz
$ cd redis-3.0.7
$ make

网页下载地址:http://www.redis.cn/download.html

2 启动服务端

$ src/redis-server

3 启动客户端

You can interact with Redis using the built-in client:

$ src/redis-cli
redis> set foo bar
OK
redis> get foo
“bar”

数据类型:

类型常量 对象的名称 TYPE命令输出值
REDIS_STRING 字符串对象 “string”
REDIS_LIST 列表对象 “list”
REDIS_HASH 哈希对象 “hash”
REDIS_SET 集合对象 “set”
REDIS_ZSET 有序集合对象 “zset”

常用命令:

1 自增(原子操作)

SET connections 10
INCR connections => 11
INCR connections => 12
DEL connections
INCR connections => 1

对应的为DECR。
增加指定数字:INCRBY,对应的为DECRBY。

2 设置失效时间

SET resource:lock "Redis Demo"
EXPIRE resource:lock 120
resource:lock将在120s内被删除

获取距离失效的时间

TTL resource:lock

3 list

RPUSH puts the new value at the end of the list.

RPUSH friends "Alice"
RPUSH friends "Bob"

LPUSH puts the new value at the start of the list.

LPUSH friends “Sam”

LPOP、RPOP为移除列表的第一个/最后一个元素。

LRANGE gives a subset of the list. It takes the index of the first element you want to retrieve as its first parameter and the index of the last element you want to retrieve as its second parameter. A value of -1 for the second parameter means to retrieve elements until the end of the list.

LRANGE friends 0 -1 => 1) "Sam", 2) "Alice", 3) "Bob"
LRANGE friends 0 1 => 1) "Sam", 2) "Alice"
LRANGE friends 1 2 => 1) "Alice", 2) “Bob"

LLEN returns the current length of the list.

LLEN friends => 3

LPOP removes the first element from the list and returns it.

LPOP friends => "Sam"

RPOP removes the last element from the list and returns it.

RPOP friends => "Bob"

Note that the list now only has one element:

LLEN friends => 1
LRANGE friends 0 -1 => 1) "Alice"

4 set

SADD adds the given value to the set.

SADD superpowers "flight"
SADD superpowers "x-ray vision"
SADD superpowers "reflexes"

SREM removes the given value from the set.

SREM superpowers “reflexes"

SCARD myset => 4 (set中元素个数)
SINTER //返回两个或多个set的交集

SISMEMBER tests if the given value is in the set. It returns 1 if the value is there and 0 if it is not.

SISMEMBER superpowers "flight" => 1
SISMEMBER superpowers "reflexes" => 0

SMEMBERS returns a list of all the members of this set.

SMEMBERS superpowers => 1) "flight", 2) "x-ray vision"

SUNION combines two or more sets and returns the list of all elements.

SADD birdpowers "pecking"
SADD birdpowers "flight"
SUNION superpowers birdpowers => 1) "pecking", 2) "x-ray vision", 3) “flight”

SPOP //移除并返回列表中的一个随机元素
ZCOUNT //计算在有序集合中指定区间分数的成员数

5 zset

Sets are a very handy data type, but as they are unsorted they don’t work well for a number of problems. This is why Redis 1.2 introduced Sorted Sets.

A sorted set is similar to a regular set, but now each value has an associated score. This score is used to sort the elements in the set.

ZADD hackers 1940 "Alan Kay"
ZADD hackers 1906 "Grace Hopper"
ZADD hackers 1953 "Richard Stallman"
ZADD hackers 1965 "Yukihiro Matsumoto"
ZADD hackers 1916 "Claude Shannon"
ZADD hackers 1969 "Linus Torvalds"
ZADD hackers 1957 "Sophie Wilson"
ZADD hackers 1912 "Alan Turing"

In these examples, the scores are years of birth and the values are the names of famous hackers.

ZRANGE hackers 2 4 => 1) "Claude Shannon", 2) "Alan Kay", 3) "Richard Stallman”
ZSCORE //获取元素的score值

6 hset

Simple strings, sets and sorted sets already get a lot done but there is one more data type Redis can handle: Hashes.

Hashes are maps between string fields and string values, so they are the perfect data type to represent objects (eg: A User with a number of fields like name, surname, age, and so forth):

HSET user:1000 name "John Smith"
HSET user:1000 email "john.smith@example.com"
HSET user:1000 password "s3cret"

To get back the saved data use HGETALL:

HGETALL user:1000

You can also set multiple fields at once:

HMSET user:1001 name "Mary Jones" password "hidden" email "mjones@example.com"

If you only need a single field value that is possible as well:

HGET user:1001 name => "Mary Jones”

PUBSUB

redis是一个基于key-value的存储系统,但同样提供了许多其他的使用的组件,比如SUBSCRIBE、PUBLISH这两个命令。这两个命令能让你非常方便地再两个进程中进行通信。

订阅/发布/取消订阅
SUBSCRIBE、PUBLISH、UNSUBSCRIBE

# SUBSCRIBE 订阅给定的一个或多个频道的信息 SUBSCRIBE channel1 channel2
127.0.0.1:6379> SUBSCRIBE channel1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel1"
3) (integer) 1

# PUBLISH 将信息发送到指定的频道 PUBLISH CHANNEL MESSAGE 返回值为订阅该频道的客户端数量
127.0.0.1:6379> PUBLISH channel1 message1
(integer) 1

事务

Redis事务让一组命令在单个步骤执行。事务中有两个属性,说明如下:
在一个事务中的所有命令按顺序执行作为单个隔离操作。通过另一个客户端发出的请求在Redis的事务的过程中执行,这是不可能的。
Redis的事务具有原子性。原子意味着要么所有的命令都执行或都不执行。
Redis的事务由指令多重发起,然后需要传递在事务,而且整个事务是通过执行命令EXEC执行命令列表。

redis 127.0.0.1:6379> MULTI
OK
List of commands here
redis 127.0.0.1:6379> EXEC

Java连接Redis

首先需要下载jedis.jar,将其加入类路径,或者添加maven依赖。

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.8.1</version>
</dependency>

代码示例如下:

import redis.clients.jedis.Jedis;

import java.util.List;
import java.util.Map;

public class TestRedis {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost");
        print(jedis.ping());
        print();

        jedis.set("name", "lee");
        print(jedis.get("name"));
        print();

        jedis.lpush("vector", "bbb");
        jedis.lpush("vector", "aaa");
        jedis.rpush("vector", "ccc");
        List<String> list = jedis.lrange("vector", 0, -1);
        for (int i = 0; i < list.size(); i++) {
            print(list.get(i));
        }
        print();

        jedis.hset("person1", "name", "Lee");
        jedis.hset("person1", "age", "12");
        jedis.hset("person1", "address", "beijing");

        Map<String, String> mymap = jedis.hgetAll("person1");
        for (Map.Entry<String, String> entry : mymap.entrySet()) {
            print(entry.getKey() + " " + entry.getValue());
        }
    }

    public static void print(Object...objects) {
        for (Object obj: objects) {
            System.out.print(obj.toString() + " ");
        }
        System.out.println();
    }
}


转载:http://blog.csdn.net/foreverling/article/details/50960640

目录
相关文章
|
存储 前端开发 Java
如何开发供应商管理系统中的询报价板块(附架构图+流程图+代码参考)
本文介绍了供应商管理系统中的询报价板块,涵盖创建询价需求、供应商报价、比价分析、核价等核心流程。通过系统化管理,企业可提升采购效率与透明度,优化供应商选择,降低采购成本。
|
域名解析 缓存 网络协议
《网络是怎么样连接的》读书笔记 - 汇总篇(一)
《网络是怎么样连接的》读书笔记 - 汇总篇
1168 0
《网络是怎么样连接的》读书笔记 - 汇总篇(一)
|
Java 安全 索引
滚雪球学Java(48):面向对象编程中的StringBuffer类详解
【6月更文挑战第2天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
340 5
滚雪球学Java(48):面向对象编程中的StringBuffer类详解
西门子S7-1200基本位逻辑指令编程实例,如何编写起保停控制程序
今天我们来学习一个西门子S7-1200基本位逻辑指令的编程实例,给大家介绍一下如何编写起保停控制程序。
西门子S7-1200基本位逻辑指令编程实例,如何编写起保停控制程序
|
存储 编译器 程序员
C语言基础--操作符详解
C语言基础--操作符详解
418 0
C语言基础--操作符详解
|
关系型数据库 MySQL 数据安全/隐私保护
源码安装MySQL8.0 2
源码安装MySQL8.0
184 0
|
4天前
|
人工智能 自然语言处理 安全
阿里云AI数智鉴密:AI 生成内容如何拿到一张"防篡改的身份证"
隐形水印 + C2PA签名:让AI生成内容“持证上岗”。
1116 0
|
13天前
|
人工智能 自然语言处理 安全
阿里云千问办公、Qoder Teams、Qoder CN区别与选择指南:模型能力、适用场景与最新活动参考
本文聚焦阿里云2026年推出的三款自研AI办公产品,清晰拆解千问办公、Qoder Teams、Qoder CN的差异化定位与能力边界:千问办公主打职场全场景提效,支持自然语言指令一键完成PPT生成、数据分析等高频办公任务;Qoder Teams面向程序员团队,深度整合AI代码生成、团队协同与企业知识库能力;Qoder CN则专为金融、政务等强合规场景打造,实现数据不出境与VPC私有化部署。文章同步给出分场景选型指南与最新活动定价,帮助不同类型的企业按需组合产品,实现业务岗、研发岗与强合规场景的AI能力全覆盖。
3719 4
阿里云千问办公、Qoder Teams、Qoder CN区别与选择指南:模型能力、适用场景与最新活动参考
|
4天前
|
人工智能 运维 BI
阿里云千问办公QwenWork深度解析:基于Qwen3.8,六大核心能力重构企业全自动化工作流与计费选型指南
传统AI办公工具大多停留在对话问答、文档摘要、简单文案生成层面,只能完成单点碎片化任务,无法自主拆解复杂业务流程,很难串联多工具、多文档、外部业务系统完成端到端完整工作交付。很多企业在落地AI办公的时候,需要组合多款不同工具,来回切换界面,手动复制粘贴中间结果,智能化改造落地门槛居高不下。千问办公QwenWork是整合多款智能体产品能力打造的一体化企业办公智能体平台,底层基座依托Qwen3.8大模型,打通桌面端Agent、云端Agent、企业协同Agent三种运行形态,不再局限简单问答,接收业务目标之后自主拆解任务步骤,调用各类工具,处理文档、表格、浏览器自动化、数据查询,直接输出可交付的办公
1271 0

热门文章

最新文章