Redis知识简介(数据类型、常用命令、在java中操作redis)

目录

数据类型

常用命令

在java中操作redis


数据类型

常用命令(Redis 教程_redis教程)

官网更全,点击上方m链接

 字符串string操作命令:

set key value            设置指定key的值

get key                       获取指定key的值

setex key seconds value  设置指定key的值,将key的过期时间设为seconds秒(应用于验证码)

setnx key value           只有在key不存在时设置key的值(应用于分布式锁)

127.0.0.1:6379> set name xiaoming
OK
127.0.0.1:6379> get name
"xiaoming"
127.0.0.1:6379> get age
(nil)                              //空
127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> get age
"20"
127.0.0.1:6379> set age 30
OK
127.0.0.1:6379> get age
"30"                               //若key已经存在对应的value会被覆盖
127.0.0.1:6379> setex city 10 beijing
OK
127.0.0.1:6379> get city
"beijing"
127.0.0.1:6379> get city           //10秒后city记录被删除
(nil)
127.0.0.1:6379> setnx key1 value1   
(integer) 1
127.0.0.1:6379> setnx key1 value2
(integer) 0
127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379>

哈希hash操作命令:

Redis hash是一个string类型的 field和value的映射表,特别适合用于存储对象。

 

127.0.0.1:6379> hset 001 name xiaoming   //将哈希表中的key中的字段field的值设为value
(integer) 1
127.0.0.1:6379> hset 001 age 20
(integer) 1
127.0.0.1:6379> hget 001 name       //找哈希表中的key中的字段field对应的值value
"xiaoming"
127.0.0.1:6379> hget 001 age
"20"
127.0.0.1:6379> hdel 001 age       //删除哈希表中的key中的字段field及其value值
(integer) 1
127.0.0.1:6379> hget 001 age
(nil)
127.0.0.1:6379> hkeys 001          //获取哈希表中的key中的所有field
1) "name"
127.0.0.1:6379> hset 001 age 20
(integer) 1
127.0.0.1:6379> hkeys 001
1) "name"
2) "age"
127.0.0.1:6379> hvals 001       //获取哈希表中的key中的所有field对应的值
1) "xiaoming"
2) "20"
127.0.0.1:6379> hgetall 001     //获取哈希表中的key中的所有field和其对应的value
1) "name"
2) "xiaoming"
3) "age"
4) "20"
127.0.0.1:6379> get 002 a
(error) ERR wrong number of arguments for 'get' command
127.0.0.1:6379> hget 002 abc
(nil)
127.0.0.1:6379>

列表list操作命令

Redis列表是简单的字符串列表,按照插入的顺序排序。

 

127.0.0.1:6379> lpush mylist a b c
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> lpush mylist it
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "it"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> lpush mylist a
(integer) 5
127.0.0.1:6379> lrange mylist 0 -1    //包含重复
1) "a"
2) "it"
3) "c"
4) "b"
5) "a"
127.0.0.1:6379> rpop mylist
"a"
127.0.0.1:6379> lrange mylist 0 -1
1) "a"
2) "it"
3) "c"
4) "b"
127.0.0.1:6379> rpop mylist
"b"
127.0.0.1:6379> lrange mylist 0 -1
1) "a"
2) "it"
3) "c"
127.0.0.1:6379> llen mylist
(integer) 3
127.0.0.1:6379> brpop mylist 10
1) "mylist"
2) "c"
127.0.0.1:6379> brpop mylist 10
1) "mylist"
2) "it"
127.0.0.1:6379> lrange mylist 0 -1
1) "a"
127.0.0.1:6379> brpop mylist 10
1) "mylist"
2) "a"
127.0.0.1:6379> lrange mylist 0 -1
(empty list or set)
127.0.0.1:6379> brpop mylist 10
(nil)
(10.08s)
127.0.0.1:6379>

集合set操作命令:

Redis set是string类型的无序集合,集合成员是唯一的。

 

 

127.0.0.1:6379> sadd myset a b c d
(integer) 4
127.0.0.1:6379> smembers myset
1) "b"
2) "d"
3) "c"
4) "a"
127.0.0.1:6379> sadd myset a b
(integer) 0
127.0.0.1:6379> smembers myset
1) "d"
2) "c"
3) "a"
4) "b"
127.0.0.1:6379> scard myset
(integer) 4
127.0.0.1:6379> sadd myset2 a b x y
(integer) 4
127.0.0.1:6379> smembers myset2
1) "x"
2) "b"
3) "y"
4) "a"
127.0.0.1:6379> sinter myset myset2
1) "b"
2) "a"
127.0.0.1:6379> sunion myset myset2
1) "b"
2) "x"
3) "d"
4) "c"
5) "y"
6) "a"
127.0.0.1:6379> sdiff myset myset2
1) "d"
2) "c"
127.0.0.1:6379> sdiff myset2 myset
1) "x"
2) "y"
127.0.0.1:6379> srem myset a b c
(integer) 3
127.0.0.1:6379> smembers myset
1) "d"
127.0.0.1:6379>

有序集合sorted set操作命令:

Redis sorted set有序集合是string类型元素的集合,且不允许有重复的成员,每个元素都会关联一个double类型的分数(score),通过分数来为集合中的成员进行从小到大排序,分数可以重复。

 

127.0.0.1:6379> zadd myset3 10.0 a 9.0 b
(integer) 2
127.0.0.1:6379> zrange myset3 0 -1
1) "b"
2) "a"
127.0.0.1:6379> zadd myset3 9.9 c
(integer) 1
127.0.0.1:6379> zrange myset3 0 -1
1) "b"
2) "c"
3) "a"
127.0.0.1:6379> zrange myset3 0 -1 withscores
1) "b"
2) "9"
3) "c"
4) "9.9000000000000004"
5) "a"
6) "10"
127.0.0.1:6379> zincrby myset3 20 b
"29"
127.0.0.1:6379> zrange myset3 0 -1
1) "c"
2) "a"
3) "b"
127.0.0.1:6379> zrem myset3 b
(integer) 1
127.0.0.1:6379> zrange myset3 0 -1
1) "c"
2) "a"
127.0.0.1:6379>

 通用命令:

 

127.0.0.1:6379> keys *
1) "myset2"
2) "001"
3) "myset"
4) "name"
5) "age"
6) "key1"
7) "myset3"
127.0.0.1:6379> exists name
(integer) 1
127.0.0.1:6379> exists abc
(integer) 0
127.0.0.1:6379> type name
string
127.0.0.1:6379> type myset3
zset
127.0.0.1:6379> type myset2
set
127.0.0.1:6379> type 001
hash
127.0.0.1:6379> ttl name
(integer) -1
127.0.0.1:6379> setex test 100 itcccc
OK
127.0.0.1:6379> keys (
(empty list or set)
127.0.0.1:6379> keys *
1) "myset2"
2) "001"
3) "test"
4) "myset"
5) "name"
6) "age"
7) "key1"
8) "myset3"
127.0.0.1:6379> ttl test
(integer) 78
127.0.0.1:6379> ttl tetst
(integer) -2
127.0.0.1:6379> ttl test
(integer) 67
127.0.0.1:6379> del test
(integer) 1
127.0.0.1:6379> keys *
1) "myset2"
2) "001"
3) "myset"
4) "name"
5) "age"
6) "key1"
7) "myset3"
127.0.0.1:6379> del name age 001
(integer) 3
127.0.0.1:6379> keys *
1) "myset2"
2) "myset"
3) "key1"
4) "myset3"
127.0.0.1:6379> type key1
string
127.0.0.1:6379>

在java中操作redis

这里用jedis的java客户端。

Spring 对redis客户端进行了整合,提供了Spring Data Redis,在Spring Boot项目中还提供了对应的starter。

使用  Jedis操作Redis的步骤:

  1. 获取连接
  2. 执行操作
  3. 关闭连接

创建一个maven工程,其依赖坐标有:

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>2.8.0</version>
    </dependency>
  </dependencies>

创建一个测试类test

public class test {

    @Test
    public void testRedis(){
//        获取连接
        Jedis jedis = new Jedis("localhost", 6379);
//        执行操作
        jedis.set("username","root");
//        关闭连接
        jedis.close();

    }
}

执行结果:

127.0.0.1:6379> get username        //程序执行前
(nil) 
127.0.0.1:6379> get username        //程序执行后
"root"
127.0.0.1:6379>

其他命令类似。

下面演示,在springboot的项目中操作redis。

在创建springboot项目时选中如下图:

 

 在application.yml中做如下配置:

spring:
  application:
    name: redis_demo

  redis:
    host: localhost
    port: 6379
   # password: 123456
    database: 0
    # 0号数据库
    jedis:
      pool:
        max-active: 8
        max-wait: 1ms
        max-idle: 4
        min-idle: 0

创建一个测试类001test

package com.example.redis_demo;



@SpringBootTest
@RunWith(SpringRunner.class)
public class test001 {

    @Autowired
    private RedisTemplate redisTemplate;
@Test
    public void testString(){
     redisTemplate.opsForValue().set("city","hangzhou");
    }

}

运行该测试类,在客户端窗口输入命令 发现找不到city

 查找所有会发现,springboot帮我们加上了很多前缀,解决这个问题需要设置序列化器。

创建一个config类

package com.example.redis_demo.config;

import org.springframework.cache.jcache.config.JCacheConfigurerSupport;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfig extends JCacheConfigurerSupport {
    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setConnectionFactory(connectionFactory);
        return redisTemplate;
    }


}

即可解决,虽然value此时还是有很多前缀,但是取数据时会自动反序列化。

如:

 操作其他数据类型则需要加入以下类似操作,以List为例:

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值