Redis 初窥 安装启动 shell java api使用

    技术2023-11-23  101

    redis

    Nosql是为了解决高并发,高扩展,高写入而产生的数据库解决方案 是关系型数据库的良好补充,而不能替代关系型数据库

    Redis是用C语言开发的高性能的键值对存储的Nosql数据库。 redis是一个内存nosql数据库 redis中也是存储key-value形式的数据 redis中的key-value相比hbase等数据库来说,redis的value比较强大,它的value可以不仅仅是一个byte[] redis的value可以有结构:可以是一个list,也可以是一个hash,也可以是set… Redis存储的数据类型有五种:字符(string)、散列(hash)、列表(list)、集合(set)、有序集合(sorted set) 所以redis经常被称作为:数据结构服务器

    redis的应用场景 缓存(数据查询、短连接、新闻内容、商品内容等等)。(最多使用) 分布式集群架构中的session分离。 聊天室的在线好友列表。 任务队列。(秒杀、抢购、12306等等) 应用排行榜。 网站访问统计。

    redis 的安装启动 在linux系统进行安装 1.下载redis5的稳定版本,下载地址http://download.redis.io/releases/redis-5.0.9.tar.gz 2.上传redis-5.0.9.tar.gz到Linux服务器 3.解压redis源码包 tar -zxvf redis-5.0.9.tar.gz -C /usr/local/src/ 4.进入到源码包中,编译并安装redis cd /usr/local/src/redis-5.0.9/ make && make install 5.报错,缺少依赖的包 6.配置本地YUM源并安装redis依赖的rpm包 yum -y install gcc 7.编译并安装 make && make install 8.报错,原因是没有安装jemalloc内存分配器,可以安装jemalloc或直接输入 make MALLOC=libc && make install 9.重新编译安装 make MALLOC=libc && make install 10.在/usr/local/下创建一个redis目录,然后拷贝redis自带的配置文件redis.conf到/usr/local/redis mkdir /usr/local/redis cp /usr/local/src/redis-5.0.9/redis.conf /usr/local/redis 11.修改当前机器的配置文件redis.conf bind 172.16.200.103 127.0.0.1 daemonize yes #redis后台运行 requirepass 123456 #指定redis的密码 dir /data/redis #redis数据存储的位置 appendonly yes #开启aof日志,它会每次写操作都记录一条日志 12.启动redis节点 cd /usr/local/redis redis-server redis.conf 13.查看redis进程状态 ps -ef | grep redis 使用命令登录: redis-cli -h 172.16.200.103 -p 6379 #验证密码 auth 123456

    停掉redis shutdown save exit 退出 redis

    flushdb 清理当前DB select 2 选择第二个DB

    set数据 set huzhongwu 666 set hh 222 get取数据 get huzhongwu set数据指定key-value的超时时长 (超时时长为30秒) set huzhongwu 8888 EX 30 keys *

    Value为string类型命令使用 字符串 Map(String,String) set xxx 111 get xxx del xxx xxx1 xxx2 set aaa 111 ex 10 (超时10秒删除)

    incr aaa aaa增长1 decr aaa aaa减少1 incrby aaa 10 aaa加10

    mset k1 v1 k2 v2 k3 v3 设多个kv值 mget k1 k2 k3 得到多个k对应的v

    strlen aaa 得到aaa值的长度length

    Value为Hash类型命令使用 Hash类型 Map<String, Map<String,String>> hset liaoning shengyang 1000 hset liaoning dalian 3333 keys *

    hget liaoning shengyang hgetall liaoning (返回 liaoning里的所有数据) 删除 hdel hebei shijiazhuang hdel hebei qingdao del hebei hincrby hebei qingdao 5 qingdao加5 hincrby hebei qingdao 9 hdel hebei qingdao del hebei

    hmset hebei shijiazhuang 100 lf 200 xt 300 hmget hebei shijiazhuang lf xt

    hexists he xt (hexists 是否存在)

    hkeys hebei hvals hebei hlen hebei (hebei的value的length)

    Value为List类型命令使用 list是有序可重复的 Redis的list使用的是linkedlist,linkedlist有两种方式:队列、堆栈。 在linkedlist中的头插法 和尾插法 队列中的名称: 入栈 push,出栈(弹栈) pop lpush : 插入到队首 rpush: 插入到队尾

    lrange 显示几个value -1 表示获取最后一个 127.0.0.1:6379> lrange list1 0 -1

    弹出列表,则表示从列表中删除 127.0.0.1:6379> lpop list1 127.0.0.1:6379> rpop list1 获取列表长度 127.0.0.1:6379> llen list1 (integer) 8

    Value为Set类型命令使用 Set Map<String,HashSet> 无序不能重复

    sadd set1 1 2 2 3 3 4 5 (自动去重)

    srem删除元素 127.0.0.1:6379> srem set1 3

    判断元素是否存在 127.0.0.1:6379> sismember set1 3

    smembers set1 取出全部成员

    运算命令 差集 sdiff保留set1 中 与set2不重复的成员 属于A并且不属于B的元素构成的集合。 sdiff set1 set2

    交集 属于A且属于B的元素构成的集合。 sinter set1 set2

    并集 属于A或者属于B的元素构成的集合 sunion set1 set2

    SortedSet(zset) Map<String,TreeSet> 不能重复可排序 score得分在前 member在后 zadd zset1 1 haha 3 hehe 2 heihei

    zrange zset1 0 -1 取出 member zrange zset1 0 -1 withscores 取出 member 和score

    zrevrange zset1 0 -1 withscores 反排序 取出

    zrem zset1 haha 删除

    zscore zset1 haha 得到 haha的score

    zrank zset1 hange 得到 hangge在升序排序的位置

    zrevrank zset1 hange 得到hangge在降序排序的位置

    zincrby zset1 100 hange hange的value增加100

    Redis的scala的API

    object StringValueDemo2 { def main(args: Array[String]): Unit = { val jedis: Jedis = new Jedis("192.168.133.201", 6379) //授权 jedis.auth("123456") //选择DB jedis.select(0) //添加数据 jedis.set("aaa", "111") //自增 jedis.incr("aaa") val str: String = jedis.get("aaa") println(str) jedis.incrBy("aaa",100) val str2: String = jedis.get("aaa") println(str2) //关闭 jedis.close() } } object ListValueDemo1 { def main(args: Array[String]): Unit = { val jedis: Jedis = new Jedis("192.168.133.201", 6379) jedis.auth("123456") jedis.select(0) //添加数据 /*jedis.lpush("lst2", "1", "2", "3") jedis.lpush("lst2", "4", "5", "6")*/ //插入数据 在数据"2"的后面插入一个数据 7 //jedis.linsert("lst2",ListPosition.AFTER,"2","7") //删除count 个 value 删除2个 “7” jedis.lrem("lst2", 2, "7") val list: util.List[String] = jedis.lrange("lst2", 0, -1) import scala.collection.JavaConversions._ for (e <- list) { println(e) } } } object HashValueDemo1 { def main(args: Array[String]): Unit = { val jedis: Jedis = new Jedis("192.168.133.201", 6379) //授权 jedis.auth("123456") //选择DB jedis.select(0) jedis.hset("手机", "apple", "100") jedis.hset("手机", "华为", "800") jedis.hset("手机", "vivo", "500") jedis.hset("电脑", "联想", "300") jedis.hset("电脑", "小米", "800") jedis.hset("电脑", "华为", "700") jedis.hincrBy("手机", "华为", 100) val map1: util.Map[String, String] = jedis.hgetAll("手机") //导入隐式转换 import scala.collection.JavaConversions._ for (t <- map1){ println(s"key: ${t._1} -> value: ${t._2}") } jedis.close() } } object SetValueDemo1 { def main(args: Array[String]): Unit = { val jedis: Jedis = new Jedis("192.168.133.201", 6379) //授权 jedis.auth("123456") //选择DB jedis.select(0) //添加数据 jedis.sadd("s1", "1", "2", "3", "4", "4", "5") jedis.sadd("s2", "3", "4", "6", "5") val sset: util.Set[String] = jedis.sdiff("s1", "s2") //导入隐式转换 import scala.collection.JavaConversions._ for (s <- sset){ println(s) } } } object ZsetValueDemo { def main(args: Array[String]): Unit = { val jedis: Jedis = new Jedis("192.168.133.201", 6379) //授权 jedis.auth("123456") //选择DB jedis.select(0) //zset是不能重复,但是可以排序的,按照得分进行排序 /*jedis.zadd("z1", 5.5, "aaa") jedis.zadd("z1", 6.5, "bbb") jedis.zadd("z1", 3.5, "ccc") */ //jedis.zincrby("z1", 4.0, "ccc") //val set1: util.Set[String] = jedis.zrevrange("z1", 0, -1) //同时取出得分 val tuples: util.Set[Tuple] = jedis.zrevrangeWithScores("z1", 0, -1) import scala.collection.JavaConversions._ for (s <- tuples){ println(s.getElement +" , "+ s.getScore) } } }
    Processed: 0.012, SQL: 9