redis命令

开启redis客户端

//方式1
redis-cli
auth 密码
//方式2
redis-cli -a 密码

查看客户端是否开启

ping
    
    //若会有是pong,则是开启的
    //不是则否

关闭redis客户端

//方式1
exit
//方式2
puit
//方式3
ctrl+c
    

选择数据库

select 数字
// 例,选择1号数据库
    select 1

String类型

设置键值对

set key value
//例 password:123456
    set password 123456

获取值

get key
    //例 获取到password的值
    get password

在原先的值后面追加值

append key 追加的值
    //例
    append password 789//返回的是password追加后的长度
    //password的值就从123456-->123456789

获取值的长度

strlen key
    //例
    strlen password
    //返回9

键不存在时赋值,键存在时不赋值

setnx key 值
    //例
    setnx password 12
    //返回0,代表不赋值,因为password已经存在了

查看当前数据库所有的键(key)

keys *

判断当前数据库是否有某一个键(key)

exists key
    //例
    exists password
    //返回1代表true
    //返回0代表folas

查看某个key的类型

type key
    //例,查看password的类型
    type password

删除某个键,当然key对应的值也被删除了

del key
    //例
    del password

为已经存在的键值对设置过期时间

expire key 秒
    //例,给password这个键值对设置10秒的过期时间
    expire password 10

    
    
    //一定是已经存在的键值对

查看某个键值对当前离过期还剩多少时间

ttl key
    //例
    ttl password
    //返回-1,代表永不过期
    //返回-2,代表已经过期,过期了在数据库中就再也查询不到了
    

查看当前数据库key的数量

dbsize

清空当前数据库

flushdb

屠杀全部的数据库(慎用)

flushall

将存储的数字值+1

incr key
    //只能对数字值操作
    //如果为null,新增值为1

将存储的数字值-1

decr key
    //只能对数字值操作
    //如果为null,新增值为-1

将存储的数字值+Number || -Number

incrby 数值
decrby 数值
    //加上数值
    //减去数值
    //只能对数字值操作

同时设置多个键值对

mset k1 v1 k2 v2
    //设置了两个键值对

同时获取多个键值对

mget k1 k2
    //同时获取两个键值对

当所有的key都不存在时,设置多个键值对

msetnx k1 v1 k2 v2
    //设置了两个键值对

截取值的范围(在位置上的截取)

getrange key 起始位置 截止位置
    //例password:1234
    getrange password 02
    //password的值就变成了123

将值的某个范围赋上一个值

setrang key 起始位置 value
    //例password:1234
    set password 2 abc
    //password的值就变成了12abc

设置键值对的同时设置过期的时间

setex key 过期时间 value
    //例
    setex password 30 123
    //password:123,30秒后过期

给已经存在的key赋新值的同时,获取原来的值

getset key 新值
    //例password:1234
    getset password 456
    //返回1234

list类型:有序,可重复

-1可以表示list最后一个元素的索引

从左边||右边插入一串数据

lpush key1 v1 v2 v3
rpush key2 1 2 3
    //key1 : v3 v2 v1
    //key2 : 1  2  3

从左边||右边弹出一个数据(即删除)

lpop key1
    //key1 : v3 v2 v1
    //弹出v3
rpop key2
    //key2 : 1  2  3
    //弹出3

从key1的右边弹出一个值,插入到key2的左边

rpoplpush key1 key2
    //key1 : v3 v2 v1
    //key2 : 1  2  3
    rpoplpush key1 key2
    //key1 : v3 v2
    //key2 : v1 1  2  3

按照索引下标获取元素(从左到右)

lrange key 起始索引 截止索引
lrange key 起始索引 -1//表示截止索引为list尾
    //例key2 : 1  2  3
    lrange key 0 -1
    //返回"1" "2" "3"

通过索引获取某个元素

lindex key 索引
    //例key2 : 1  2  3
    lindex key2 -1
    //返回"3"

获取列表的长度

llen key
     //例key2 : 1  2  3
    llen key2
    //返回3

在某个元素的前|后加上一个值

linsert key before 元素 被加上的值
linsert key after 元素 被加上的值
    //例key2 : 1  2  3
    linsert key2 before 1 0
    //key2 : 0 1  2  3

从左边向右删除n个value

lrem key n 值
    //例key2 : 1  2  1  3  1
    lrem key2 3 1
    //例key2 : 1  2  3 
    
    
   /**
    *特别注意
    *n为正整数:代表从左向右删除n个
    *n为负整数:代表从右向左删除|n|个
    *n为0:    代表删除所有要删除的value
    */

set类型:无序,不重复

将一个或多个member元素加入到集合key中,已经存在于集合的member元素将被忽略

sadd key v1 v2 v3
    //例
    sadd k1 1 2 3
    //k1集合里的元素有1 2 3,无序

取出set集合所有的元素

smembers key
    //例
    smember k1
    //"1" "2" "3"

判断set集合中是否有value值

sismember key value
    //例 k1集合里的元素有1 2 3,无序
    sismember k1 3
    //返回1:代表有
    //返回0:代表没有

返回set集合中的元素个数

scard key
    //例 k1集合里的元素有1 2 3,无序
    scard k1
    //返回3

随机从set集合中吐出一个值,即删除

spop key
    //例 k1集合里的元素有1 2 3,无序
    spop k1
    /吐出1或2或3

删除set集合中的某个或某些个元素

srem key v1 v2 v3 ...
    //例 k1集合里的元素有1 2 3,无序
    srem k1  2 3
    //返回2:代表删除了两个元素

随机从set集合中取出n个值,但是不会删除

srandmember key n
    //略

返回两个set集合的公共元素

sinter key1 key2
    //略

返回两个set集合的并集

sunion key1 key2
    //略

返回两个set集合的差集key1 - key2

sdiff key1 key2
    //略

hash类型(map)

创建一个hash

hset key fieId value
    /**
     *key:代表redis里面的键
     *fieId:代表hash里面的键(属性)
     *value:代表hash里面的值(属性值)
     */
     
     //例
     hset userInfo user:1010:name chenli

批量设置hash值

hmset key1 fieId1 value1 key2 fieId2 value2
    //例
    hset userInfo user:1010:name chenli user:1010:phone 133...

获取某个hash的某个fieId的值

hget key fieId
    //从key的这个hash中获取fieId这个键的值
    //例
    hget userInfo user:1010:name
        //返回"chenli"

判断某个hash中是否存在fieId这个键

hexists key fieId
    //例
    hexists userInfo user:1010:name
        //返回1:代表存在
        //返回0:代表不存在

获取hash中所有的fieId

hkeys key
     //例
    hkeys userInfo
     //返回"user:1010:name" "user:1010:phone"

获取hash中所有的value

hvals key
    //例
    hvals userInfo
     //返回"chenli" "133...."

获取hash中所有的键值对

hgetall key
    //例
    hgetall userInfo
    /**返回
     *"user:1010:name" 
     *"chenli" 
     *"user:1010:phone"
     *"133...."
     */

将hash中的fieId的值加上 | 减去一个值

hincrby key fieId 正数 //加上一个值
hincrby key fieId 负数 //减去一个值
    //例略

为fieId赋值为value,当且当fieId不存在的时候起作用

hsetnx key fieId value
    //例略
    //返回1:代表成功
    //返回0:代表fieId已经存在,不赋值

zset类型:有序,不重复,根据评分从低到高来排序

向zset集合中插入一个或多个member元素及其评分

zadd key score1 v1 score2 v2 score3 v3
    //例
    zadd testzset 100 v1 20 v2  1 v3
    //返回3:插入元素的数量

根据索引查询zset集合中的元素,和list类似

zrange key 开始索引 截止索引
    //例
    zrange testzset 0 -1
    //"v3" "v2" "v1"

特殊情况

/**
 *相同元素不同分数,会将分数替换(更新),元素不变
 *
 *不同元素相同分数,可以正常的加入
 */

根据分数的范围来查询元素,返回的结果从小到大

zrangebyscore key 最小值 最大值
    //例 100 v1 20 v2  1 v3
    zrangebyscore testzset 10 20
    //"v2"

根据分数的范围来查询元素,返回的结果从大到小

zrevrangbyscore key 最大值 最小值 
    //例 100 v1 20 v2  1 v3
    zrangebyscore testzset 100 0
    //v1 v2 v3

为元素的分数加上增量

zincrby key 增量 value
    //例 100 v1 20 v2  1 v3
    zincrby testzset 100 v1
    //返回200

删除zset集合下,指定的元素

zrem key value
    //例 100 v1 20 v2  1 v3
    zrem testzset v1
    //返回1:代表成功
    //返回0:代表失败

统计zset集合,在指定的分数范围内的元素个数

zcount key 最小值 最大值
    //例 100 v1 20 v2  1 v3
    zcount testzset 1 20
    //2

返回value在zset集合中的排名,根据分数,从0开始

zrank key value
    //例 100 v1 20 v2  1 v3
    zrank testzset v2
    //1

spring boot整合redis

引入依赖

        <!-- 引入redis启动器 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

在默认配置文件中配置连接redis数据库的基本信息,将redis作为缓存需要的配置

#设置redis服务器地址,默认端口6379
spring.redis.host=127.0.0.1
#设置redis的密码
spring.redis.password=123456
#缓存类型设置为redis
spring.cache.type=redis
#设置redis缓存超时时间ms
spring.cache.redis.time-to-live=60000
#设置redis是否缓存空值null
spring.cache.redis.cache-null-values=true

测试redis

@Autowired
private StringRedisTemplate stringRedisTemplate;//操作的k-v都是字符串
@Autowired
private RedisTemplate redisTemplate;//操作的k-v都是对象

@Test
    void test1() {
        stringRedisTemplate.opsForValue().set("k2","321");
        System.out.println(stringRedisTemplate.opsForValue().get("k1"));
    }


可以将对象bean序列化存入到redis

//对象类需要继承Serializable接口,目的是使用jdk的序列化工具序列化,不过这时的序列化,是我们看不懂的,还需要进一步处理
@Data
@Component
public class Person implements Serializable {//implements Serializable使用jdk默认的序列化
    private String name;
    private String phone;
}


/****************************/


//需要写一个配置类
@Configuration
public class MyRedisConfig {
    @Bean
    public RedisTemplate<Object, Person> personRedisTemplate(
            RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
        RedisTemplate<Object, Person> template = new RedisTemplate<Object, Person>();
        template.setConnectionFactory(redisConnectionFactory);
        Jackson2JsonRedisSerializer<Person> serializer = new Jackson2JsonRedisSerializer<Person>(Person.class);
        template.setDefaultSerializer(serializer);
        return template;
    }
}


/***************************/


@Autowired
private RedisTemplate<Object, Person> redisTemplate;


/*****************************/


//使用示例
@Test
void test1() {
     person.setName("chen");
     person.setPhone("123");
     redisTemplate.opsForValue().set("k",person);
     System.out.println(redisTemplate.opsForValue().get("k"));
}


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351