初识Redis

package com.wangzhu.redis;

import java.util.List;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,<br/>
 * 包括string(字符串)、list(链表)、 set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。<br/>
 * 这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作 ,而且这些操作都是原子性的。<br/>
 * 在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。<br/>
 * 区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave。<br/>
 * 所需jar包:jedis-2.6.2.jar hamcrest-core-1.3.jar junit-4.11.jar<br/>
 * 
 * @author wangzhu
 * @date 2015-3-9上午9:10:16
 * 
 */
public class TestRedis {

    Jedis jedis;
    JedisPool pool;

    @Before
    public void init() {
        pool = new JedisPool(new JedisPoolConfig(), "localhost");
        jedis = pool.getResource();
    }

    @Test
    public void testPing() {
        System.out.println("Servier is runnning: " + jedis.ping());
        // Servier is runnning: PONG
    }

    @After
    public void destroy() {
        jedis.disconnect();
    }

    @Test
    public void testString() {
        // 获取
        System.out.println("get===" + jedis.get("strKey"));

        // 设置
        System.out.println("set===" + jedis.set("strKey", "qingyezhu"));

        // 获取
        System.out.println("get===" + jedis.get("strKey"));

        // 删除
        System.out.println("del===" + jedis.del("strKey"));

        // get===null
        // set===OK
        // get===qingyezhu
        // del===1

    }

    @Test
    public void testList() {
        String listKey = "listKey";
        // System.out.println("lpush==="
        // + jedis.lpush(listKey, "Redis", "MongoDb", "MySql", "Oracle",
        // "Db2"));

        System.out.println("lpush====" + jedis.lpush(listKey, "other"));
        long len = jedis.llen(listKey);
        System.out.println("size===" + len);
        List<String> list = jedis.lrange(listKey, 0, len);
        System.out.println("list====" + list);
        for (int i = 0; i < len; i++) {
            System.out.println(i + "===lindex===" + jedis.lindex(listKey, i));
        }

        System.out.println(jedis.llen(listKey));
    }
}
1、字符串操作
设置key的值
set key value

获取key的值
get key

设置过期的毫秒数
pexpire key 10000

查看key的生命周期(毫秒)
pttl key

设置key的生命周期(秒)
expire key 1

查看key的生命周期(秒)
ttl key

把指定的key设置为永久有效
perisist key

删除一个key
del key

返回随机key
randomkey

返回key存储的类型
type key

改名
rename key newkey

一次设置多个值
mset key1 value key2 value key3 value

一次获取多个值
mget key1 key2 key3

把value追加到key的原值上
append key value

取指定key的value值得长度
strlen key

2、链表操作
Redis的list类型其实就是一个每个子元素都是string类型的双向链表,链表的最大长度是2^32。list既可以用做栈,也可以用作队列。
list的pop操作还有阻塞版本,主要是为了避免轮询。

把值插入到链表头部
lpush key value
把值插入到链表尾部
rpush key value
返回并删除链表头部元素
lpop key
返回并删除链表尾部元素
rpop key
返回链表中[start,stop]中的元素
lrange key start stop

计算链表的元素的个数
llen key

返回index索引上的值
lindex key index

3、hashed类型操作

Redis的hash是一个string类型的field和value的映射表,它的添加、删除操作都是O(1)(平均)。hash特别适用于存储对象,
将一个对象存储在hash类型中会占用更少的内存,并且可以方便的存取整个对象。

配置:
#配置字段最多64个
hash_max_zipmap_entries 64
#配置value最大为512字节
hash_max_zipmap_value 512

设置hash1的field为value
hset hash1 field value

获取指定的hash field
hget hash1 field

同时设置多个field
hmset hash1 field1 value1 field2 value2 field3 value3

一次获取多个field
hmget hash1 field1 field2 field3

测试制定的hash field是否存在
hexists hash1 field

获取hash的field数量
hlen hash1

返回hash所有的field
hkeys hash1

返回hash所有的value
hvals hash1

获取某个hash中全部的field及value
hgetall hash1

删除指定的field
hdel hash1 field


4、集合结构操作
特点:无序性、确定性、唯一性

往集合众添加元素
sadd key value1 value2 value3

获取集合所有的元素
smembers key

删除集合某个元素
srem key value

返回并删除集合中的一个随机元素
spop key

随机取一个元素
srandmember key

判断集合中是否有某个值
sismember key value

返回集合元素的个数
scard key

求key1 key2 key3的交集
sinter key1 key2 key3

求key1 key2的并集
sunion key1 key2

求key1 key2的差集
sdiff key1 key2

求key1 key2的交集并存在res里
sinterstore res key1 key2

把source的value移动到dest集合中
smove source dest value

6、有序集合
概念:它是在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动按新的值调整顺序。

添加元素
zadd key score1 value1

查询member的排名
zrank key member

返回集合元素的个数
zcard key

删除集合中的元素
zrem key value1 value2

 

参考:

Redis内存使用优化与存储【http://www.infoq.com/cn/articles/tq-redis-memory-usage-optimization-storage】

Windows下Redis的安装使用【http://os.51cto.com/art/201403/431103.htm】

 

转载于:https://www.cnblogs.com/xiaoxian1369/p/4322740.html

### Redis 入门教程初学者指南 Redis 是一种高性能的键值对存储系统,广泛应用于缓存、消息队列以及实时数据分析等领域。作为一种开源软件,Redis 支持多种数据结构操作并提供丰富的功能特性。 #### 1. Redis 的基本概念 Redis 不仅是一个简单的键值存储工具,还提供了字符串(String)、哈希(Hash)、列表(List)、集合(Set) 和有序集合(Sorted Set)等多种复杂的数据结构支持[^2]。这些数据结构使得开发者能够轻松实现各种复杂的业务逻辑需求。 #### 2. 安装环境配置 为了开始使用 Redis,需要先完成其安装过程。通常情况下,在 Linux 或 macOS 平台上可以通过包管理器快速部署;而在 Windows 上则推荐采用 Docker 方式来运行容器化的 Redis 实例[^3]。 ```bash # 使用 apt-get (适用于 Ubuntu/Debian 系统) sudo apt update && sudo apt install redis-server # 启动服务 redis-server --daemonize yes ``` #### 3. 数据结构解析 以下是几种主要的数据类型及其用途简介: - **字符串(String)**: 存储单个值或者作为计数器使用。 ```lua SET mykey "Hello" GET mykey INCR counter_key ``` - **哈希(Hash)**: 表示对象字段其对应值得映射关系。 ```lua HMSET user:1000 username "Alice" age 30 HGETALL user:1000 ``` - **列表(List)**: 双端链表形式用于 FIFO/LIFO 队列模拟。 ```lua LPUSH queue item1 RPUSH queue item2 LPOP queue RPOP queue ``` - **集合(Set)& 有序集合(Sorted Set)**: 去重后的无序集合或带分数权重排序版。 ```lua SADD unique_items apple banana orange SMEMBERS unique_items ZADD leaderboard 95 alice 87 bob 76 charlie ZRANGE leaderboard 0 -1 WITHSCORES ``` #### 4. 持久化机制 Redis 提供两种持久化方式——RDB 快照文件和 AOF 日志记录。前者定期保存当前状态至磁盘,后者则是每次写命令追加到日志中以便恢复时重新执行所有变更[^2]^。 #### 5. 应用场景举例 一些常见的 Redis 使用场景包括但不限于网站访问统计、会话管理、购物车暂存等功能模块开发过程中发挥重要作用. --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值