Redis入门(一)

目录

一、什么是redis?

二、Redis的操作命令

三、Redis数据结构

四、Jedis简单演示


一、什么是redis?

Redis 是一个开源的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(string), 散列(hashe), 列表(lists) 无序集合(set),有序集合(zset)等。

redis是Nosql数据库中使用较为广泛的非关系型内存数据库,redis内部是一个key-value存储系统。

1、为什么使用redis呢?

某些操作不需要持久化到数据库,例如前端页面广告位数据无需每次查询后台系统的接口,可以在前台系统添加缓存,提高访问首页的速度。这个时候redis就起到了作用。

2、列式数据库:

3、redis适用于什么场景?

(1)配合关系型数据库做高速缓存配合关系型数据库做高速缓存

•高频次,热门访问的数据,降低数据库IO

•分布式架构,做session共享

(2)由于其拥有持久化能力,利用其多样的数据结构存储特定的数据

4、单线程+多路IO复用技术

多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态,比如调用select和poll函数,传入多个文件描述符,如果有一个文件描述符就绪,则返回,否则阻塞直到超时。得到就绪状态后进行真正的操作可以在同一个线程里执行,也可以启动线程执行(比如使用线程池)。

二、Redis的操作命令

1、配置redis

#后台启动
daemonize no
pidfile /var/run/redis.pid
port 6379
#设置密码  
requirepass 123456
#开启远程连接
protected-mode no

2、连接redis服务

[root@hdp-1 src]# ./redis-server ../redis.conf 

3、连接redis客户端

[root@hdp-1 src]# ./redis-cli 
127.0.0.1:6379> 

4、关于key基础操作

127.0.0.1:6379> auth 123456              #登陆密码
OK

127.0.0.1:6379> keys *                   #显示所有key
1) "shopId_2"
2) "username"

#查看key是否存在,可查多个
127.0.0.1:6379> exists username
(integer) 1
127.0.0.1:6379> exists username shopId_2
(integer) 2

#清空当前库
flushdb

#清空所有库
flushall

#查看当前库的key数量
dbsize

#查看值的类型
type key

#删除某个键
del key

#为键值设置过期时间,单位秒
expire key seconds

#查看键还有多久过期,-1表示永不过期,-2表示已过期
tt1 key

#选择数据库,默认16个
127.0.0.1:6379> select 8
OK

三、Redis五大数据结构

1、字符串(String)

String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。

String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M

set "xixi" haha

get xixi

#同时设置多个kv
mset key1 value1 key2 value2 ...

#同时设置多个kv,仅当key不存在
msetnx key1 value1 key2 value2 ...

#同时获取多个value
mget key1 key2

exists xixi              #是否存在xixi键

append xixi "ok"         #追加

getset xixi woshihaha     #同时赋值获取,相同key的值会被覆盖

del xixi                  #删除键值

incr num                 #对数值类型value递增, 不存在按0进行增减                       

decr num                 #对数值类型value递减

incrby num 5             #指定增加数值

#获取值的长度
strlen key

#key不存在赋值
setnx key value

#获得值的范围,类似java中的substring
getrange key 起始位置 结束位置

#用 <value>  覆写<key> 所储存的字符串值,从<起始位置>开始。
setrange key 起始位置 value

2、List(单键多值)

列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。

#从左边/右边插入一个或多个值。
lpush/rpush key value1 value2 ...

#从左边/右边吐出一个值(插入的最后一个是最左边的值)值在键在,值亡键亡。
lpop/rpop key

#从<key1>列表右边吐出一个值,插到<key2>列表左边
rpoplpush key1 key2

#按照索引下标获得元素(从左到右)
lrange <key> <start> <stop>

#按照索引下标获得元素(从左到右)
lindex <key> <index>

#获取列表长度
llen <key>

#在<value>的前面插入<newvalue> 
linsert key value newvalue

#从左边删除n个value(从左到右),即删除相同的value n个
lrem key n value

3、Set(无序集合)

Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。

Redis的Set是string类型的无序集合。它底层其实是一个value为null的hash表,所以添加,删除,查找的复杂度都是O(1)。

#将一个或多个元素加入到集合 key 当中,已存在的元素将被忽略。
sadd key value1 value2 ...

#取出该集合的所有值。
smembers key

#判断集合<key>是否为含有该<value>值,有返回1,没有返回0
sismember value

#获取该集合元素个数
scard key

#删除集合中的某个元素。
srem key value1 value2

#随机从该集合中吐出n个值
spop key n

#随机从该集合中取出n个值,不会从集合中删除
srandmember key n

#返回两个集合的交集元素。
sinter key1 key2

#返回两个集合的并集元素。
sunion key1 key2

#返回两个集合的差集元素。
sdiff key1 key2

4、哈希(hash)

string的key,string的value的map,即Map<String,String>

hset info name xin                #赋值一个key的hash

hmset infos name xin age 20       #赋值多个key的hash

hget info name                    #取出一个key的value

hmget infos name age              #取出多个key的value

hgetall info                      #获取所有key的值

hgetall infos


127.0.0.1:6379> hdel infos name age               #删除一个或多个key
(integer) 2
127.0.0.1:6379> del infos                         #删除所有key
(integer) 0

127.0.0.1:6379> hincrby infos age 2
(integer) 22
127.0.0.1:6379> hexists infos age
(integer) 1
127.0.0.1:6379> hlen infos                        #获取长度,多少个key
(integer) 2
127.0.0.1:6379> hkeys infos                       #获取所有key  所有value
1) "name"
2) "age"
127.0.0.1:6379> hvals infos
1) "xin"
2) "22"

四、Jedis简单演示

jedis集成了redis的一些命令操作,是封装了redis的java客户端。

添加依赖

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>
package redis;

import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class RedisDemo {
    //单实例的测试
    @Test
    public void simpleTest(){
        Jedis jedis = new Jedis("hdp-1",6379);
        jedis.auth("123456");
        jedis.set("jedis","jedis is active1");

        System.out.println(jedis.get("xin"));
        System.out.println(jedis.get("jedis"));
        jedis.close();
    }

    //连接池的方法连接
    @Test
    public void poolTest() {
        //获得连接池对象
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        //设置最大连接数
        jedisPoolConfig.setMaxTotal(30);
        //设置最大空闲连接数
        jedisPoolConfig.setMaxIdle(10);

        //获得连接池
        JedisPool jedisPool = new JedisPool(jedisPoolConfig, "hdp-1", 6379);
        //获得核心组件
        Jedis jedis=null;
        try{
            //通过连接池获取
            jedis=jedisPool.getResource();
            jedis.auth("123456");
            jedis.set("jedispool","this is jedispool");
            System.out.println(jedis.get("jedispool"));
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if(jedis !=null){
                jedis.close();
            }
            if(jedisPool !=null){
                jedisPool.close();
            }
        }
    }
}

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值