Redis基础

声明:本文参考网上资料整理而成,只为梳理记录。如有错误望不吝赐教。在此拜谢!持续完善修改中…

随时参考

教程

定义

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 —[摘自百度百科]

应用场景

  • 取最新N个数据的操作
  • 排行榜应用,取TOP N操作
  • 需要精准设定过期时间的应用
  • 计数器应用
  • Uniq操作,获取某段时间所有数据排重值
  • 实时系统,反垃圾系统
  • Pub/Sub构建实时消息系统
  • 构建队列系统
  • 缓存
    参考链接

服务搭建

下载服务并启动

Redis下载地址:http://redis.io/download
linux环境

$ wget http://download.redis.io/releases/redis-2.8.17.tar.gz
$ tar xzf redis-2.8.17.tar.gz
$ cd redis-2.8.17
$ make
$ make test
$ redis-server  ../redis.conf   //注意 redis.conf 的路径

以上:redis.conf 为 Redis 的自定义配置文件

客户端链接

启动客户端
$ redis-cli

客户端链接远程 Redis 服务
$ redis-cli -h host -p port -a password

检查 Redis 服务是否正常

redis> ping

PONG

将 [key]= name 和 [value] = Mikayla 放入 redis 库中

redis> set name Mikayla
OK
redis> get name
"jiu"

make 过程常见的错误

  • 异常1
    make[2]: cc: Command not found
    异常原因:没有安装 gcc
    解决方案:yum install gcc-c++

  • 异常2
    zmalloc.h:51:31: error: jemalloc/jemalloc.h: No such file or directory
    异常原因:一些编译依赖或原来编译遗留出现的问题
    解决方案:make distclean。清理一下,然后再make

在make成功以后,需要make test。在make test出现异常
- 异常3
couldn't execute "tclsh8.5": no such file or directory
异常原因:没有安装 tcl
解决方案:yum install -y tcl

Redis 数据类型

表格展示

数据类型 说明 存储大小 命令格式 放值 取值
string 字符串 一个键最大能存储512MB SET GET
hash 哈希 2的32次方 -1 键值对(40多亿) HMSET HGETALL
list 列表 2的32次方-1元素(4294967295,每个列表可存储40多亿) lpush lrange
set 集合 2的32次方-1(4294967295,每个集合可存储40多亿个成员) sadd key member sadd smembers
zset 有序集合 zadd key score member zadd ZRANGEBYSCORE

针对以上数据类型,做以下简单练习:
[备注 * 每种类型可以和对应的 Redis 命令的实现做对比]

public class TestRedis {

    public static void main(String[] args) {
        Jedis jedis = new Jedis("Redis 服务 IP 地址");
        System.out.println("链接成功");
        System.out.println("服务正在运行:" + jedis.ping());

        //string 字符串
        jedis.set("redis_string", "mikayla_redis_string");
        System.out.println("redis 存储key:【redis_string】的字符串为:" + jedis.get("redis_string"));

        //map 哈希
        Map userMap = new HashMap();
        userMap.put("username", "runoob");
        userMap.put("points", "200");
        userMap.put("password", "runoob");
        jedis.hmset("redis_map:1", userMap);
        System.out.println("redis 存储key:【redis_map:1】的字符串为:" + JsonUtil.toJson(jedis.hgetAll("redis_map:1")));

        //list 列表
        jedis.lpush("redis_site-list", "Runoob");
        jedis.lpush("redis_site-list", "Google");
        jedis.lpush("redis_site-list", "Taobao");
        List list = jedis.lrange("redis_site-list", 0 ,2);
        for(int i=0; i
            System.out.println("列表项为: "+list.get(i));
        }

        //set 集合
        jedis.sadd("redis_set", "set2", "set5", "set3");
        System.out.println("redis_set>>> "+ JsonUtil.toJson(jedis.smembers("redis_set")));

        //zset 有序集合 TODO:实现失败,待补充
        /*jedis.zadd("redis_zset", 0, "redis");
        jedis.zadd("redis_zset", 0, "mongodb");
        jedis.zadd("redis_zset", 0, "rabitmq");
        System.out.println("redis_zset>>> " + JsonUtil.toJson(jedis.zrangeByLex("redis_zset", 0, 5)));*/

        // 获取数据并输出
        Set keys = jedis.keys("*");
        Iterator it=keys.iterator() ;
        while(it.hasNext()){
            String key = it.next();
            System.out.println(key);
        }

    }

}

Redis 常用命令

查看库中所有的 key

redis> keys *

清空 Redis 数据

1、使用redis客户端链接远程redis服务
2、使用命令
redis> flushdb 删除当前库中的所有key
redis> flushall 删除所有数据库中的key

String 类型的存放

redis> set name Mikayla
OK
redis> get name
"Mikayla"

Hash 类型的存放

redis> hmset user:1 username Mikayla password 123
OK
redis> hgetall user:1
1)"username"
2)"Mikayla"
3)"password"
4)"123"
redis> 

List 类型的存放

redis> lpush listname redis
(integer) 1
redis> lpush listname mongodb
(integer) 2
redis> lpush listname mysql
(integer) 3
redis> lrange listname 0 10
1)"redis"
2)"mongodb"
3)"mysql"
redis> 

Set 类型的存放

无序集合,元素不重复

redis> sadd setname redis
(integer) 1
redis> sadd setname mongodb
(integer) 1
redis> sadd setname mysql
(integer) 1
redis> sadd setname redis
(integer) 0
redis> smembers setname
1)"mysql"
2)"mongodb"
3)"redis"
redis> 

Zset 类型的存放

有序集合,元素不重复

redis> sadd zsetname 0 redis
(integer) 1
redis> sadd zsetname 0 mongodb
(integer) 1
redis> sadd zsetname 0 mysql
(integer) 1
redis> sadd zsetname 0 redis
(integer) 0
redis> smembers setname
1)"redis"
2)"mongodb"
3)"mysql"
redis> 

你可能感兴趣的:(从0到1了解,redis,数据库)