redis学习--数据类型、spring整合

一,键值类型

String字符类型
map散列类型
list列表类型
set集合类型
sortedset有序集合类型

1,String
赋值:SET key value 例:set str "hello"
取值:GET key
取值并赋值:GETSET key value
设置/获取多个值:

MSET key value [key value …]
MGET key [key …]

删除:DEL key
递增数字:INCR key
增加指定的整数:incrby key num
递减:decr key
递减指定的证书:decrby key num
获取字符串长度:strlen key
追加字符串:append key value 例:append str "hello"
应用:存储商品id,自增主键

2,hash叫散列类型
赋值:HSET key field value

例:hset user username lisi
hset user age 20 username zhangsan

取值:HGET key //一次只能取一个

例:hget user age 

一次获取多个字段值:HMGET key field [field ...]
获取所有字段:HGETALL key
删除字段:HDEL key field [field ...]
增加数值:HINCRBY key field num 例:HINCRBY user age 2
判断字段是否存在:HEXISTS key field
应用:存储商品信息

3,list
Redis的list是采用来链表来存储的
向列表左边增加元素:LPUSH key value [value ...] 例:lpush list:1 1 2 3
向列表右边增加元素:RPUSH key value [value ...]
查看列表:

LRANGE key start stop 索引从0开始。
索引可以是负数,如:“-1”代表最后边的一个元素。
例:lrange list:1 0 2
lrange list:1 0 -1

从列表两端弹出元素:LPOP key / RPOP key
获取列表中元素的个数:LLEN key
应用:商品评论列表

4,Set
无序、不可重复
增加/删除元素:

SADD key member [member ...]
SREM key member [member ...]

获得集合中的所有元素:SMEMBERS key
判断元素是否在集合中:SISMEMBER key member

5,Sortedset有序集合
增加元素

ZADD key score member [score member ...]
例: zadd scoreboard 80 zhangsan 89 lisi 94 wangwu

获取元素的分数

ZSCORE key member
例:zscore scoreboard lisi 

删除元素

ZREM key member [member ...]
例:zrem scoreboard lisi

获得排名在某个范围的元素列表

//按照元素分数从小到大
ZRANGE key start stop [WITHSCORES]
zrange scoreboard 0 2
//按照元素分数从大到小
//如果需要获得元素的分数的可以在命令尾部加上WITHSCORES参数
ZREVRANGE key start stop [WITHSCORES]
zrevrange scoreboard 0 1 WITHSCORES

获取元素的排名

//从小到大
ZRANK key member
//从大到小
ZREVRANK key member

应用:商品销售排行榜

6,常用命令

exists,确认某一个key是否存在
    exists age
keys,返回满足给定pattern 的所有key
    keys mylist*
del,删除一个可以,`del age`
rename,重命名key,`rename age age_new`
type,返回key的类型,`type mylist`

二,与spring整合
1,applicationContext.xml

  <!-- 连接池配置 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
	<!-- 最大连接数 -->
	<property name="maxTotal" value="30" />
	<!-- 最大空闲连接数 -->
	<property name="maxIdle" value="10" />
	<!-- 每次释放连接的最大数目 -->
	<property name="numTestsPerEvictionRun" value="1024" />
	<!-- 释放连接的扫描间隔(毫秒) -->
	<property name="timeBetweenEvictionRunsMillis" value="30000" />
	<!-- 连接最小空闲时间 -->
	<property name="minEvictableIdleTimeMillis" value="1800000" />
	<!-- 连接空闲多久后释放, 当空闲时间>该值 且 空闲连接>最大空闲连接数 时直接释放 -->
	<property name="softMinEvictableIdleTimeMillis" value="10000" />
	<!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 -->
	<property name="maxWaitMillis" value="1500" />
	<!-- 在获取连接的时候检查有效性, 默认false -->
	<property name="testOnBorrow" value="true" />
	<!-- 在空闲时检查有效性, 默认false -->
	<property name="testWhileIdle" value="true" />
	<!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->
	<property name="blockWhenExhausted" value="false" />
</bean>
<!-- redis集群 -->
<bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
	<constructor-arg index="0">
		<set>
			<bean class="redis.clients.jedis.HostAndPort">
				<constructor-arg index="0" value="192.168.101.3"></constructor-arg>
				<constructor-arg index="1" value="7001"></constructor-arg>
			</bean>
			<bean class="redis.clients.jedis.HostAndPort">
				<constructor-arg index="0" value="192.168.101.3"></constructor-arg>
				<constructor-arg index="1" value="7002"></constructor-arg>
			</bean>
			<bean class="redis.clients.jedis.HostAndPort">
				<constructor-arg index="0" value="192.168.101.3"></constructor-arg>
				<constructor-arg index="1" value="7003"></constructor-arg>
			</bean>
			<bean class="redis.clients.jedis.HostAndPort">
				<constructor-arg index="0" value="192.168.101.3"></constructor-arg>
				<constructor-arg index="1" value="7004"></constructor-arg>
			</bean>
			<bean class="redis.clients.jedis.HostAndPort">
				<constructor-arg index="0" value="192.168.101.3"></constructor-arg>
				<constructor-arg index="1" value="7005"></constructor-arg>
			</bean>
			<bean class="redis.clients.jedis.HostAndPort">
				<constructor-arg index="0" value="192.168.101.3"></constructor-arg>
				<constructor-arg index="1" value="7006"></constructor-arg>
			</bean>
		</set>
	</constructor-arg>
	<constructor-arg index="1" ref="jedisPoolConfig"></constructor-arg>
</bean>

2,测试代码

 private ApplicationContext applicationContext;
	@Before
	public void init() {
		applicationContext = new ClassPathXmlApplicationContext(
				"classpath:applicationContext.xml");
	}
// redis集群
@Test
public void testJedisCluster() {
	JedisCluster jedisCluster = (JedisCluster) applicationContext
			.getBean("jedisCluster");

	jedisCluster.set("name", "zhangsan");
	String value = jedisCluster.get("name");
	System.out.println(value);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Security是一个基于Spring框架的安全框架,可以用于实现各种安全需求,如身份认证、授权、攻击防护等。而Redis是一种高性能的内存数据库,可以用于缓存、消息队列、分布式锁等场景。将Spring Security和Redis整合起来,可以提高系统的性能和可扩展性。 具体实现方式可以采用Spring Security提供的缓存机制,将用户信息、权限信息等存储到Redis,以减少数据库的访问次数。可以使用Spring Data Redis来操作Redis,通过配置RedisTemplate来实现对Redis的访问。同时,可以使用Spring Security提供的RedisCacheManager来管理缓存,实现缓存的自动刷新和失效。 在实现过程,需要注意Redis的数据结构和数据类型,如字符串、哈希表、列表、集合等,以及缓存的过期时间、缓存的清理策略等。同时,需要考虑Redis的高可用性和数据一致性,如使用Redis Sentinel或Cluster来实现主从复制和故障转移,使用Redis事务或Lua脚本来保证数据的原子性操作等。 总之,Spring Security整合Redis可以提高系统的性能和可扩展性,但需要考虑到Redis的特性和使用方式,以保证系统的稳定性和安全性。 ### 回答2: Spring Security 是一个安全框架,用于为基于 Java 的企业应用程序提供身份验证和授权。Redis是一个高性能的内存数据存储系统,用于缓存数据。将Spring Security 整合redis可以提高系统的性能,加快缓存数据的读取速度,同时也能提高系统的安全性。 Spring Security与Redis整合的步骤: 1. 首先,需要添加spring-data-redis依赖,包括spring-data-redis和lettuce-core 2. 配置RedisConnectionFactory,用于创建链接Redis的对象,可以通过JedisPool类实现,也可以使用RedisStandaloneConfiguration构造器。 3. 配置RedisTemplate,用于操作Redis数据库,设置key和value的序列化方式。 4. 通过Spring Security的CacheManager配置,将Redis用于存储用户认证的缓存,以便快速地进行身份验证,从而提高系统的性能。 5. 可以使用spring-session来管理用户会话,将用户信息存储在Redis,从而在多个服务器上实现用户会话共享。 综上,通过Spring Security和Redis整合,可以达到缓存优化、用户认证加速、会话共享等多个方面的优化,提高系统的性能和安全性。但是,由于Redis是基于内存,需要特别注意内存使用情况,防止内存泄漏导致系统崩溃。同时,还需要使用加密技术对缓存的敏感数据进行保护,防止泄露。 ### 回答3: Spring Security是一个用于安全身份验证和授权的框架,具有强大的功能和可扩展性。而Redis是一种优秀的NoSQL数据库,可以提供快速、高性能和高可用性的数据存储和访问。将Spring Security与Redis整合起来,可以使得身份验证和授权更加高效和可靠。 Spring Security整合Redis的主要步骤如下: 1. 添加Spring Data Redis依赖 在pom.xml文件添加以下依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-data</artifactId> </dependency> ``` 2. 配置RedisTemplate 在Spring Boot配置文件添加以下内容: ``` spring: redis: host: localhost port: 6379 # RedisTemplate配置 @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(factory); // 设置key的序列化方式 template.setKeySerializer(new StringRedisSerializer()); // 设置value的序列化方式 template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); return template; } ``` 3. 实现UserDetailsService 在Spring Security,需要实现UserDetailsService接口来获取用户信息,我们可以从Redis获取存储的用户信息。 ``` @Service public class RedisUserDetailsService implements UserDetailsService { private final RedisTemplate<String, Object> redisTemplate; public RedisUserDetailsService(RedisTemplate<String, Object> redisTemplate) { this.redisTemplate = redisTemplate; } @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { String key = "user:" + username; boolean exists = redisTemplate.hasKey(key); if (!exists) { throw new UsernameNotFoundException("用户不存在"); } Map<String, Object> map = (Map<String, Object>) redisTemplate.opsForValue().get(key); User user = new User(); user.setUsername(map.get("username").toString()); user.setPassword(map.get("password").toString()); List<GrantedAuthority> authorities = new ArrayList<>(); List<String> roles = (List<String>) map.get("roles"); roles.forEach(role -> { authorities.add(new SimpleGrantedAuthority(role)); }); user.setAuthorities(authorities); return user; } } ``` 4. 配置认证和授权 在Spring Security配置文件配置认证和授权的方式和使用传统方式一样,只是在获取用户信息的方法上,使用RedisUserDetailsService替换默认的UserDetailsService即可。 ``` @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private RedisTemplate<String, Object> redisTemplate; @Autowired private RedisUserDetailsService redisUserDetailsService; @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { // 设置UserDetailsService和密码加密方式 auth.userDetailsService(redisUserDetailsService).passwordEncoder(passwordEncoder()); } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/admin/**").hasRole("ADMIN") .antMatchers("/user/**").hasAnyRole("USER", "ADMIN") .anyRequest().authenticated() .and().formLogin(); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } @Bean public RedisUserDetailsService redisUserDetailsService() { return new RedisUserDetailsService(redisTemplate); } @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(factory); template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); return template; } } ``` 通过以上步骤,就可以实现Spring Security与Redis整合,使得身份验证和授权更加高效和可靠。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值