redis之基础语法

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: redis之基础语法

redis


是一种支持Key-Value等多种数据结构的存储系统。可用于缓存、事件发布或订阅、高速队列等场景。该数据库使用ANSI C语言编写,支持网络,提供字符串、哈希、列表、队列、集合结构直接存取,基于内存,可持久化。


曾经走过的坑(可以不看下面,但是这一段我感觉是最用心的):


1

曾经沉迷在Linux上搭建环境,曾经在Linux上搭建了个MySQL和java web的环境并且成功跑起来,开心了好几天,但是实际生活中我感觉写代码比搭建环境更重要,何况你既然能看到我的文章就说明不是大牛,那你搭建的环境就是自己玩玩算了,把重心用在写代码上


2

怎么搭建redis环境(敲黑板,重中之重)


    1) 首先你要有一个能联网,能连接的Linux系统


     2)我用的是宝塔界面 ,官方URL:宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板      我很笨,我都能用,但是这个插件是真的棒,就是是在Linux上安装一个安装软件的图形界面,类似手机的应用宝


       如果你用的是阿里云服务器,并且你安装了宝塔插件,你需要修改阿里云的安全组,还需要修改宝塔面板的安全选项,才能开放端口,见下面图片


       如果你是虚拟机,那就要开端口6379,在宝塔面板也配置一下,见下面图片


3

我曾经会遇到 一些可以事件解决的问题,却拼命的看博客自己推理,就像这个语法区分大小写吗,试试就知道了,试试就知道了,试试就知道了


4

学习知识的时候不要太追求完美,比如java里面的String的类,里面有很多分割字符串的方法,没必要全都试一遍,用到在查自然就会了,刚开始学习知识的时候把最常用的学会了我感觉就很棒了


搭建环境(用宝塔面板)


阿里云服务器搭建redis


修改安全组

 

1.png

 

2.png


3.jpg


修改redis的配置文件


4.png


5.png


修改redis的密码为 123456(下图是修改以后的)不要看行数,看大体位置


6.png


修改运行在别的主机上访问(下图是修改好的)不要看行数,看大体位置


7.png


如果是虚拟机


  安装宝塔页面宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板


  修改配置文件同上


 开放6379端口


Redis支持五种数据类型:


string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。


登录


语法:


redis-cli -h host -p port -a password


实践:


redis-cli -h 127.0.0.1 -p 6379 -a 123456


选择哪个数据库(默认16个)


8.png


查看数据库有多少个数据


9.png


Redis 字符串(String)


set一个关键字为key1的关键字,其值为value1


127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379> del key1
(integer) 1
127.0.0.1:6379> del key1
(integer) 0
127.0.0.1:6379>


Redis 哈希(Hash)


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


Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。(对于小白来说这是废话)


我认为:


此数据类型和java中的     Map<String, Object> map=new HashMap<String, Object>();         相似


创建


2种创建方式,一种是hset (一次只操作一组key-value),一种hmset(一次可以操作多组key-value)


HSET 哈希表名称   key1  value1


127.0.0.1:6379> HSET set1 name zhangsan


HMSET 哈希表名称   key1  value1 key2  value2


127.0.0.1:6379> HMSET hset1 name zhangsan age 11
OK


获取在哈希表中指定 key 的所有字段和值


127.0.0.1:6379> HGETALL hset1
1) "name"
2) "zhangsan"
3) "age"
4) "11"
127.0.0.1:6379>


获取hset1中key为age的value


127.0.0.1:6379> HGET hset1 age
"11"
127.0.0.1:6379>


删除键值对


127.0.0.1:6379> HDEL hset1 name
(integer) 1
127.0.0.1:6379>


查看hset1中是否有key为name的键值对


127.0.0.1:6379> HEXISTS hset1 name
(integer) 0
127.0.0.1:6379>


获取key列表


127.0.0.1:6379> HKEYS hset1
1) "age"
2) "name1"
3) "name2"


Redis 列表(List)


Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)


一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。


我认为: 和java中的        List<String> list=new ArrayList<String>();            相似


基本操作


LPUSH   在list1中的左边添加zhangsan关键字,返回列表的长度


127.0.0.1:6379> LPUSH list1 zhangsan
(integer) 1


RPUSH   在list1中的右边边添加llisi关键字,返回列表的长度


127.0.0.1:6379> RPUSH list1 lisi
(integer) 2


LPOP 在左边移除,移除,移除并获取列表的第一个元素,RPOP一样


127.0.0.1:6379> LPOP list1
"111"


查看列表里面所有的数据


127.0.0.1:6379> LRANGE list1 0 -1
1) "zhangsan"
2) "lisi"


Redis 集合(Set)


Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。


Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。


集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。


SADD set集合名词  value


127.0.0.1:6379> SADD set1 zhangsan
(integer) 1


获取set里面的所有数据


 SMEMBERS set集合名称


127.0.0.1:6379> SMEMBERS set1
1) "zhangsan"


查看set集合里面所有的数据


127.0.0.1:6379> SMEMBERS set1
1) "zhangsan"


判断 zhangsan元素是否是集合 set1 的成员


127.0.0.1:6379> SISMEMBER set1 zhangsan
(integer) 1
127.0.0.1:6379> SISMEMBER set1 lisi
(integer) 0


Redis 有序集合(sorted set)


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


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


有序集合的成员是唯一的,但分数(score)却可以重复。


添加数据


127.0.0.1:6379> ZADD sset1 1 zhangsan
(integer) 1
127.0.0.1:6379> ZADD sset1 2 lisi
(integer) 1
127.0.0.1:6379> ZADD sset1 2 lisi2
(integer) 1
127.0.0.1:6379> ZADD sset1 3 wangwu
(integer) 1


显示数据


127.0.0.1:6379> ZRANGE sset1 0 -1
1) "zhangsan"
2) "lisi"
3) "lisi2"
4) "wangwu"
127.0.0.1:6379> ZRANGE sset1 0 -1 WITHSCORES
1) "zhangsan"
2) "1"
3) "lisi"
4) "2"
5) "lisi2"
6) "2"
7) "wangwu"
8) "3"
127.0.0.1:6379>


Redis单机版环境搭建(要联网)


安装步骤


下载安装包


wget http://download.redis.io/releases/redis-5.0.8.tar.gz


解压压缩包


tar -zxvf redis-5.0.8.tar.gz


进入解压的目录


cd redis-5.0.8/


执行make命令.


yum install gcc


yum install gcc-c++


make distclean


make


执行make install 命令


make install


安装完毕后会在 /usr/local/bin/ 目录下如下图所示


111.jpg


在 /usr/local/bin/下启动redis-server ,其中后面的路径为刚开始解压的压缩包中配置文件的位置


./redis-server /opt/module/redis-5.0.8/redis.conf 


在 /usr/local/bin/下启动redis-client


./redis-cli


设置服务端为后台启动


修改redis.conf文件


112.png


运行远程客户端访问


修改redis.conf文件


113.png


Redis主从复制(一台机器开3个redis)


步骤


前提:此文档是在一台机器开3个redis服务,从而完成主从复制


把redis.conf复制3份 ,redis6379.conf    redis6380.conf      redis6381.conf


修改redis6379.conf 文件


##注意:我redis的版本里的配置文件是下面的行号,其他版本不一定
# bind 127.0.0.1     #大约69行,运行其他IP访问
port 6379  #大约92行
daemonize yes  #大约136行  后台启动
pidfile /var/run/redis_6379.pid  #大约158行
logfile "6379.log"  #大约171行
dbfilename dump6379.rdb #大约253行


修改6380和6381 配置文件,添加主机节点,不仅添加上面的代码,而且还修改自己单独的代码


# replicaof <masterip> <masterport>   #大约286行
replicaof 127.0.0.1 6379


启动3台redis服务器(在/usr/local/bin目录下)


./redis-server /opt/module/redis-5.0.8/redis6381.conf


./redis-server /opt/module/redis-5.0.8/redis6380.conf


./redis-server /opt/module/redis-5.0.8/redis6379.conf


启动三台客户端


./redis-cli -p 6379


./redis-cli -p 6380


./redis-cli -p 6381


查看主机结果


114.png


哨兵模式


在自定义目录下创建sentinel.conf,其中参数为主机IP和端口


sentinel monitor mymaster 127.0.0.1 6379 1


(在/usr/local/bin目录下)开启哨兵模式


./redis-sentinel /opt/module/redis-5.0.8/sentinel.conf


Redis集群搭建(一台机器开3个redis)


一台机器开3个redis服务器,然后redis端口分别是 6379 7380 6381


安装ruby环境


yum install ruby
yum install rubygems


修改redis6389.conf的配置文件


protected-mode no    #大约88行
# bind 127.0.0.1     #大约69行,运行其他IP访问
port 6379  #大约92行
daemonize yes  #大约136行  后台启动
pidfile /var/run/redis_6379.pid  #大约158行
logfile "6379.log"  #大约171行
dbfilename dump6379.rdb #大约253行
cluster-enabled yes #大约832行    #打开集群模式
cluster-config-file nodes-6379.conf   #大约840行  #设置节点配置文件名
cluster-node-timeout 15000   #大约840行  #设置节点失联时间,超过该时间,集群自动进行主从切换


修改redis6390.conf、redis6391.conf的配置文件


同上,省略,把数字改改


启动3个redis


./redis-server /opt/module/redis-5.0.8/redis6379.conf 
./redis-server /opt/module/redis-5.0.8/redis6380.conf 
./redis-server /opt/module/redis-5.0.8/redis6381.conf 


115.png


启动完毕后,正常情况下会生成如下所示文件(在/usr/local/bin目录下)


116.png


在解压的redis目录下的src下执行下面命令,不能写localhost,不能写127.0.0.1,其中后面的0是主从复制,一个主节点有几个从节点


redis-cli --cluster create 39.105.30.146:6379 39.105.30.146:6380 39.105.30.146:6381 --cluster-replicas 0


缓存策略


# volatile-lru -> 在过期的key中使用最近最久未使用.
# allkeys-lru -> 在所有的key中使用最近最久未使用
# volatile-lfu -> 在过期的key中使用最近最少使用原则.
# allkeys-lfu -> 在所有的key中使用最近最少使用原则
# volatile-random -> 在过期的key中随机删除.
# allkeys-random -> 在所有的key中随机删除.
# volatile-ttl -> 删除快要过期的key
# noeviction -> 什么都不做,抛错.
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
4月前
|
消息中间件 NoSQL Redis
Redis Stream消息队列之基本语法与使用方式
这篇文章详细介绍了Redis Stream消息队列的基本语法和使用方式,包括消息的添加、读取、删除、修剪以及消费者组的使用和管理,强调了其在消息持久化和主备复制方面的优势。
80 0
|
6月前
|
存储 缓存 NoSQL
Redis系列学习文章分享---第十三篇(Redis多级缓存--JVM进程缓存+Lua语法)
Redis系列学习文章分享---第十三篇(Redis多级缓存--JVM进程缓存+Lua语法)
83 1
|
NoSQL Redis
redis 常用语法
redis 常用语法
|
存储 消息中间件 NoSQL
Redis的介绍和安装,简单语法
Redis的介绍和安装,简单语法
115 0
|
存储 NoSQL Redis
Redis 常见语法
Redis 常见语法
881 0
|
NoSQL Redis
阿里云Redis集群兼容cluster语法
阿里云Redis集群兼容社区cluster相关语法,允许jedis client等客户端访问cluster nodes等命令,用户在开通兼容功能后,可以将自建的cluster集群无缝迁移到阿里云上的Redis集群,无须修改业务代码。
2847 0
|
2月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
78 6
|
1月前
|
缓存 NoSQL 关系型数据库
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
本文详解缓存雪崩、缓存穿透、缓存并发及缓存预热等问题,提供高可用解决方案,帮助你在大厂面试和实际工作中应对这些常见并发场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
|
1月前
|
存储 缓存 NoSQL
【赵渝强老师】基于Redis的旁路缓存架构
本文介绍了引入缓存后的系统架构,通过缓存可以提升访问性能、降低网络拥堵、减轻服务负载和增强可扩展性。文中提供了相关图片和视频讲解,并讨论了数据库读写分离、分库分表等方法来减轻数据库压力。同时,文章也指出了缓存可能带来的复杂度增加、成本提高和数据一致性问题。
【赵渝强老师】基于Redis的旁路缓存架构
|
1月前
|
缓存 NoSQL Redis
Redis 缓存使用的实践
《Redis缓存最佳实践指南》涵盖缓存更新策略、缓存击穿防护、大key处理和性能优化。包括Cache Aside Pattern、Write Through、分布式锁、大key拆分和批量操作等技术,帮助你在项目中高效使用Redis缓存。
213 22