Redis常用密令以及使用java连接操作redis

本文介绍了Redis的基本命令,包括连接、数据操作及监控等,并提供了使用Java进行Redis操作的示例代码。


Redis常用命令

 

1连接redis

 redis-cli -h 10.0.0.51 -p 6379

  1. 查看所有key

    keys *

  2. 设置值

    set aaa 100

  3. 获取值

    get aaa

  4. 删除key

    del aaa

  5. 查看数据库的详细信息

    Info

  6. 查看连接客户端信息

    client list

  7. 断开某个客户端的连接

    cleint kill ip地址+端口号

    Eg:cleint kill 10.0.0.51:44706

  8. 查看数据库中记录条数

    Dbsize

  9. 清空所有数据

    Flushall

  10. 监控

    Monitor

     

    Redis数据结构

    Redis支持5中数据类型,string(字符串), hash(哈希), list(列表), set(集合), zset(sorted set:有序集合)

  1. String (字符串)

    Stringredis的最基本的类型,可以理解成与memcached一模一样的类型,一个key对一个value

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

    String类型是redis最基本的数据类型,一个键最大能存储512MB

     

     

     

  2. Hash(哈希)

    Hash是一个键值对集合。

    Hash是一个string类型的fieldvalue的映射表,hash特别适用于存储对象

    每个hash可以存储232次放-1键值对(40多亿)

     

    示例中的myhashhashkey名称 name为属性名,liuzhuang为属性值

  3. List(列表)

    List列表是简单的字符串列表,按照插入顺序排序,你可以添加一个元素到列表头部(坐边)或者尾部(右边),每个列表最多可存储40多亿元素

    从右边加,则在末尾加 rpush key value

    从左边加,则在前面加 lpush key value

    遍历 知道长度 lrange key 0 length-1

     不知长度 lrange key 0 -1

    10.0.0.51:6379>

    //从边添加

    10.0.0.51:6379> rpush mylist aaa

    (integer) 1

    10.0.0.51:6379> rpush mylist bbb

    (integer) 2

    10.0.0.51:6379> rpush mylist ccc

    (integer) 3

    10.0.0.51:6379> rindex mylist 0

    (error) ERR unknown command 'rindex'

    //取值

    10.0.0.51:6379> lindex mylist 0

    "aaa"

    10.0.0.51:6379> lindex mylist 1

    "bbb"

    10.0.0.51:6379> lindex mylist 2

    "ccc"

    //遍历

    10.0.0.51:6379> lrange mylist 0 -1

    1) "aaa"

    2) "bbb"

    3) "ccc"

    10.0.0.51:6379> lrange mylist 0 2

    1) "aaa"

    2) "bbb"

    3) "ccc"

    10.0.0.51:6379> lindex mylist -1

    "ccc"

    10.0.0.51:6379>

    10.0.0.51:6379> lpush mylist ddd

    (integer) 4

    10.0.0.51:6379>

    10.0.0.51:6379> lrange mylist 0 -1

    1) "ddd"

    2) "aaa"

    3) "bbb"

    4) "ccc"

     

    List排序

     

  4. Set(集合)

    Setstring类型的无序集合。

    Set中添加值sadd

     

  5. Zset(有序集合)

     

    Zsetset一样,也是string类型元素的集合,且不允许重复的成员。

    不同的是每个元素都会关联一个double类型的分数,redis正是通过分数来为集合中的成员进行从小到大的排序。

    Zet的成员都是唯一的,但分数(score)却是可以重复的

    Zadd密令 添加元素到集合,元素在集合中存在则更新对应的score

     

     

    使用java操作redis

     

  1. 测试redis连通性

     第一步:注释掉/etc/redis.conf61行下面的bind 127.0.0.1 让所有客户端可以访问redis,并让配置文件生效 redis-server /etc/redis.conf

    重启redis  /bin/systemctl restart  redis.service

    第二步:开启防火墙6379端口 开启端口

    firewall-cmd --zone=public --add-port=6379/tcp --permanent

    并重启防火墙

    firewall-cmd --reload #重启firewall

    编写测试程序:

    1创建工程、创建package、引入jedis-2.9.0.jar

    import redis.clients.jedis.Jedis;

     


    /**

     * 测试redis服务器连接是否正常

     * @author Administrator

     *

     */

     

    public class RedisConnectTest {

     

    /**

     * @param args

     */

    public static void main(String[] args) {

    Jedis jedis = new Jedis("10.0.0.51",6379);

    String ret=jedis.ping();

    System.out.println(ret);

     

    }

    若控制台输出pong则表示联通。

  2. 使用java进行存储读取redis里面的数据

    import java.util.List;

     

    import redis.clients.jedis.Jedis;

     

     

    /**

     * 测试redis服务器连接是否正常

     * @author Administrator

     *

     */

     

    public class RedisConnectTest {

     

    /** 初始化jedis对象

     * @param args

     */

    public static void main(String[] args) {

    //初始化jedis对象

    Jedis jedis = new Jedis("10.0.0.51",6379);

    //测试连通性

    String ret=jedis.ping();

    System.out.println(ret);

    //保存值到redis数据库

    /*jedis.set("hello", "world");

    //获取从redis服务器中某个key的值

    String str=jedis.get("hello");

    System.out.println(str);*/

    //list

    //将数据存储到redis

    /*for(int i=1;i<=6;i++){

    jedis.lpush("myjavalist", i+"00");

    }*/

    //从redis中遍历取值

    /*List<String> lrange= jedis.lrange("myjavalist", 0, -1);

    for(String str:lrange){

    System.out.println(str);

    }*/

     

    }

     

    }




### 使用 Redis 管理登录令牌的最佳实践 使用 Redis 来管理登录令牌是一种高效的方式,能够显著提升系统的性能和可扩展性。以下是关于如何通过 Redis 管理登录令牌的一些最佳实践: #### 1. **数据存储结构设计** 为了有效管理和验证用户登录状态,建议采用键值对的形式来存储令牌信息。通常情况下,可以将用户的唯一标识符作为键的一部分,并设置过期时间以自动清理无用的数据。 - 键名格式:`auth:token:<token_value>` 或 `auth:user:<user_id>` - 值的内容应至少包含用户 ID 和其他必要的元数据(如角色、权限等)。可以通过 JSON 序列化这些数据以便于解析。 ```json { "userId": "123", "username": "exampleUser", "roles": ["admin", "editor"], "expiresAt": "2023-12-31T23:59:59Z" } ``` 这种设计方式便于快速查找和更新特定用户的令牌信息[^1]。 --- #### 2. **安全性考虑** 在实际应用中,安全始终是一个重要议题。以下是一些增强安全性的措施: - 对敏感数据进行加密处理后再存入 Redis 中,防止潜在的信息泄露风险。 - 设置较短的有效期限并支持刷新机制,减少因长期有效的令牌被窃取而带来的危害。 - 利用 HTTPS 协议保护传输过程中的数据不被截获篡改。 --- #### 3. **分布式环境下的协调** 当系统运行在一个分布式的架构下时,可能涉及到多个实例共享同一套认证逻辑的情况。此时可以选择像 Codis 这样的解决方案来进行更高效的集群管理;而对于小型项目,则可以直接选用原生的 Redis Cluster 功能即可满足需求[^2]。 --- #### 4. **限流与防滥用策略** 为了避免恶意请求耗尽资源或者频繁尝试非法操作,在实现过程中还需要加入合理的限制条件。例如基于 IP 地址或者其他维度定义访问频率上限,并借助 Redis 提供的强大命令集轻松完成此类任务[^3]。 对于动态调整限流规则的需求,应该建立一套完善的反馈循环体系,即周期性地审查现有政策执行效果并通过数据分析指导后续改进方向[^4]。 --- #### 5. **注意事项** 尽管 Redis 能够很好地胜任上述职责,但在某些特殊场景比如独立访客(UV)统计方面仍需谨慎对待。由于每条记录都需要持久保留直至达到预设时限为止,因此可能会造成内存占用迅速攀升的问题[^5]。针对这种情况,开发者应当提前规划好容量分配方案以及相应的应急预案。 --- ### 示例代码片段 下面展示了一个简单的 Java 方法用于生成新的 JWT 并将其缓存在 Redis 当中: ```java import redis.clients.jedis.Jedis; public class TokenManager { private static final String TOKEN_PREFIX = "auth:token:"; private Jedis jedis; public void saveToken(String token, Map<String, Object> payload, int expireInSeconds){ try (Jedis client = new Jedis()) { String serializedPayload = serialize(payload); client.setex(TOKEN_PREFIX + token, expireInSeconds, serializedPayload); } } private String serialize(Map<String, Object> data){ // Implement your serialization logic here. return ""; } } ``` 此方法接受三个参数分别是自动生成出来的随机字符串形式的身份证明(Token),关联该身份的各种属性组成的映射表(Payload),还有希望维持多久秒数(Expire In Seconds). ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sonwing_for

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值